停止调用选择器的UIGestureRecognizer

时间:2012-12-07 23:05:12

标签: iphone ios uigesturerecognizer

我在目标和选择器中添加了一些UIGestureRecognizers。我只谈一个,因为另一个我会肯定的。

我添加了UIPinchGestureRecognizer

UIPinchGestureRecognizer *pinch = [UIPinchGestureRecognizer new];
[pinch addTarget:self action:@selector(pinchGestureDetected:)];
[self.view setMultipleTouchEnabled:YES];
[self.view addGestureRecognizer:pinch];

现在我的目标是在收到捏手势时简单地调用此方法一次。但是,当人们捏住时,它仍然继续称之为。我将它用作页面导航的一部分,并在检测到捏合时更新视图。

所以在我的 - (void)pinchGestureDetected:(UIPinchGestureRecognizer)捏合方法我将调用另一种方法。有点像...这是一个小sudo

-(void)pinchGestureDetected:(UIPinchGestureRecognizer)pinch
{
if (pinch.scale > 1) layoutViewWithMoreDetail;
else layoutViewWithLessDetail;
}

所以我不希望它继续调用此方法,否则将继续调用布局方法。我想要一个布局/捏合手势。

一旦确定了比例,有没有办法可以停止检测捏?一路走来......

-(void)pinchGestureDetected:(UIPinchGestureRecognizer)pinch
{
if (pinch.scale > 1)
{
layoutViewWithMoreDetail;
stop receiving pinch gestures till this.gesture is finished;
}

我会诋毁GestureDelegate吗?

-(void)pinchGestureDetected:(UIPinchGestureRecognizer)pinch
{
if (pinch.scale > 1 && pinching == NO )
{
layoutViewWithMoreDetail;
pinching = YES;
}

然后在手势代表结束...捏=否;

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

UPinchGestureRecognizer是一个连续的手势 - 使用if(pinch.state == UIGestureRecognizerStateBegan)来检测事件是否刚刚开始。

但是,这会导致触发事件的阈值较低。另一种方法是在触发满意时快速禁用和启用手势,如下所示:

-(void)pinchGestureDetected:(UIPinchGestureRecognizer)pinch
{
    if (pinch.scale > 1)
    {
        //do your stuff here
        pinch.enabled = NO;
        pinch.enabled = YES;
    }
}

这是因为如果您查看documentation,它会说明:

  

启用

     

一个布尔属性,指示是否启用手势识别器。   @property(nonatomic,getter = isEnabled)启用BOOL

     

讨论

     

禁用手势识别器,使其无法接收触摸。默认值为YES。如果在手势识别器当前正在识别手势时将此属性更改为“否”,则手势识别器将转换为已取消状态。