我在网上寻找GestureRecognizer教程,并且在视图中看到大多数人直接使用UIPanGestureRecognizer
示例。这是常见的做法,如果是这样,为什么不在控制器中呢?
我在控制器中生成我的视图,并且在使用手势时我需要调用方法。如果我的手势识别器在视图类中,并且要在控制器类中调用的方法,那么委托方法应该如何?
答案 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模式。正如你所说,视图不应该与如何控制它有关,将这些代码分组到应用程序的另一部分是一个更好的习惯。