将手势识别器放在视图或控制器类中

时间:2015-04-19 11:15:55

标签: ios objective-c swift

我在网上寻找GestureRecognizer教程,并且在视图中看到大多数人直接使用UIPanGestureRecognizer示例。这是常见的做法,如果是这样,为什么不在控制器中呢?

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

2 个答案:

答案 0 :(得分:1)

您也可以将手势拖入故事板(进入视图控制器)。然后从文档大纲中为该手势进行操作(在vc中)

答案 1 :(得分: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!");
    }
}

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

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

  

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