2015-04-19 49 views
2

我一直在网上寻找GestureRecognizer教程,并看到大多数人直接在视图中使用例如UIPanGestureRecognizer。这是常见的做法,如果是这样,为什么不在控制器中?在视图或控制器类中放置手势识别器

我在控制器中生成我的视图,并使用手势时需要调用的方法。委托方法应该如何,如果我的手势识别器在视图类中,以及要在控制器类中调用的方法?

回答

1

一个简单UIGestureRecognizer实施,最在我看来,常见的是如下:

//this is where you create the view that you want to add the gesture recognizer 
UIImageView * imageView = [[UIImageView alloc] initWithFrame:frame]; 
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] init]; 
tapRecognizer.numberOfTapsRequired = 1; 
[tapRecognizer addTarget:self action:@selector(imageViewTapped:)]; 
imageView.userInteractionEnabled = YES; 
[imageView addGestureRecognizer:tapRecognizer]; 

创建手势识别并将其添加到UIView子类可以拿到水龙头与您上面所指出的功能后:

- (void)imageViewTapped:(UIGestureRecognizer *)gestureRecognizer 
{ 
    if (gestureRecognizer.state == UIGestureRecognizerStateRecognized) 
    { 
     NSLog(@"tap recognized!"); 
    } 
} 

所以基本上,你不必担心控制器/视图的困境。 您总是将gesturerecognizer添加到视图。在添加手势识别器时添加一个目标函数,您需要在控制器类中实现该目标函数。

P.S This SO Question might clarify in detail of the dilemma you are facing

从某种意义上说,是的,这违反了MVC模式。正如你所说,这个观点不应该与如何控制它有关,在应用程序的另一部分将这些代码分组是更好的习惯。

1

您可以拖动的手势到故事(到视图控制器),too.Then从文档大纲你做一个动作(在VC)为该姿势