0

我正在添加一些带有目标和选择器的 UIGestureRecognizers。我只谈一个,因为另一个我敢肯定。

我添加了一个 UIPinchGestureRecognizer

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

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

所以在我的 -(void)pinchGestureDetected:(UIPinchGestureRecognizer)pinch 方法中,我将调用另一个方法。有点像……这有点 sudo

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

所以我不希望它一直调用这个方法或者layout方法会继续被调用。我想要一种布局/捏合手势。

一旦确定了比例,有什么方法可以停止检测夹点?一路上的东西...

-(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;
}

然后在 Gesture 的代表中结束... pinching = NO;

谢谢你的帮助

4

1 回答 1

2

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

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

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

这是因为如果您查看文档,它会指出:

启用

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

讨论

禁用手势识别器,使其不接收触摸。默认值为是。如果在手势识别器当前正在识别手势时将此属性更改为 NO,则手势识别器将转换为取消状态。

于 2012-12-07T23:08:52.047 回答