如何调用viewController的方法来显示子视图中的新内容?(iOS)
我遵循本教程,但很难弄清楚: 更新: 如何通知向左或向右拖动的项目以告知视图控制器显示新的内容,如何基于正在拖动的视图调用视图控制器中的方法?它们是两个独立的文件viewController.m和这个 基于这个手势我该怎么说 GGDraggableView.m如何调用viewController的方法来显示子视图中的新内容?(iOS),ios,objective-c,Ios,Objective C,我遵循本教程,但很难弄清楚: 更新: 如何通知向左或向右拖动的项目以告知视图控制器显示新的内容,如何基于正在拖动的视图调用视图控制器中的方法?它们是两个独立的文件viewController.m和这个 基于这个手势我该怎么说 GGDraggableView.m #import "GGDraggableView.h" #import "GGOverlayView.h" @interface GGDraggableView () @property(nona
#import "GGDraggableView.h"
#import "GGOverlayView.h"
@interface GGDraggableView ()
@property(nonatomic, strong) UIPanGestureRecognizer *panGestureRecognizer;
@property(nonatomic) CGPoint originalPoint;
@property(nonatomic, strong) GGOverlayView *overlayView;
@end
@implementation GGDraggableView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (!self) return nil;
self.panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(dragged:)];
[self addGestureRecognizer:self.panGestureRecognizer];
self.overlayView = [[GGOverlayView alloc] initWithFrame:self.bounds];
self.overlayView.alpha = 0;
[self addSubview:self.overlayView];
return self;
}
- (void)dragged:(UIPanGestureRecognizer *)gestureRecognizer
{
CGFloat xDistance = [gestureRecognizer translationInView:self].x;
CGFloat yDistance = [gestureRecognizer translationInView:self].y;
switch (gestureRecognizer.state) {
case UIGestureRecognizerStateBegan:{
self.originalPoint = self.center;
break;
};
case UIGestureRecognizerStateChanged:{
CGFloat rotationStrength = MIN(xDistance / 320, 1);
CGFloat rotationAngel = (CGFloat) (2*M_PI/16 * rotationStrength);
CGFloat scaleStrength = 1 - fabsf(rotationStrength) / 4;
CGFloat scale = MAX(scaleStrength, 0.93);
CGAffineTransform transform = CGAffineTransformMakeRotation(rotationAngel);
CGAffineTransform scaleTransform = CGAffineTransformScale(transform, scale, scale);
self.transform = scaleTransform;
self.center = CGPointMake(self.originalPoint.x + xDistance, self.originalPoint.y + yDistance);
[self updateOverlay:xDistance];
break;
};
case UIGestureRecognizerStateEnded: {
[self resetViewPositionAndTransformations];
break;
};
case UIGestureRecognizerStatePossible:break;
case UIGestureRecognizerStateCancelled:break;
case UIGestureRecognizerStateFailed:break;
}
}
目前我调用该方法的方式是这样的,但我觉得alloc,init新控制器是不正确的,因为这是视图控制器中的一个视图:
这是我在GGDraggableView.m文件中的尝试:
RandomViewController *rVC = [[RandomViewController alloc]init];
[rVC displayNewInfo];
不能在视图内部使用viewcontroller的属性。因此,如果要将图像添加到imageview中,应该在
GGDraggableView
中为该imageview创建memebr变量。将此GGDraggableView
添加到viewDidLoad或通过XIB/情节提要中的viewcontroller.view。现在通过引用图像将其指定给imageView,如gdraggbleview.imageView.image=pics[0]代码>我的道歉我上次的回复犯了一个大错
这里要使用的是一个委托来更新ViewController
GCDraggableView.h
@protocol GCDraggableViewDelegate <NSObject>
-(void)GCDraggableView:(id)draggableView dragged:(UIPanGestureRecognizer*) gestureRecognizer;
@end
@interface GGDraggableView ()
@property (weak) id<GCDraggableViewDelegate> delegate;
@end
ViewController.m
- (void)dragged:(UIPanGestureRecognizer *)gestureRecognizer
{
//Call protocol method on delegate in order to update ViewController
[self.delegate GCDraggableView:self dragged:gestureRecognizer];
}
-(void)viewDidLoad
{
GCDraggableView *subview.delegate = self;
}
-(void)GCDraggableView:(id)draggableView dragged:(UIPanGestureRecognizer*) gestureRecognizer
{
//Whatever you want done when your subview is panned
}
好的,那么我怎么说如果图像是向左或向右滑动以加载图片[1]之后呢?我如何创建一个可调用的方法来设置下一张图片?如果您在视图中添加手势(GdRaggLeView),那么您应该在viewcontroller中委托该方法,并将该图像的索引作为参数传递。好的,因此我在视图控制器中连接了常规视图(我想要滑动的内容)通过序列图像板创建GGDRAGABLE视图,并在代码中创建imageview,现在我正在尝试上述操作,只需imageview.image=pics[0]但是pics是未声明的。我是否必须导入view controller.h文件,因为我也尝试过,但仍然无法访问它。您需要在viewcontroller中创建方法,当拖动视图时将通知该方法。在通知时,您更改了HeImage如何从发出通知调用以通知视图控制器?这就是我所困惑的