首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIGestureRecognizer结束

UIGestureRecognizer结束
EN

Stack Overflow用户
提问于 2011-02-10 07:03:08
回答 3查看 14.3K关注 0票数 12

我想在我的iPhone应用程序中处理旋转手势,并在此过程中旋转imageView。在手势结束时,我想将imageView旋转到一个固定的位置。所以,就是。如果我将imageView从0弧度旋转到M_PI/2弧度,但在中途的某个地方,我以手势结束。在结束后,我想测试角度,如果它接近M_PI/2,则将其设置为M_PI/2,否则设置为0。

这是我的代码,我试图做到这一点:

我创建识别器并将其添加到我的视图中。

代码语言:javascript
复制
UIGestureRecognizer *recognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(gestureRecognized:)];
recognizer.delegate = self;
[self addGestureRecognizer:recognizer];
[recognizer release];

委派方法:

代码语言:javascript
复制
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if (_imageView) {
        return YES;
    }
    return NO;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

手势识别方法:

代码语言:javascript
复制
- (void)gestureRecognized:(UIRotationGestureRecognizer *)recognizer {
    _imageView.transform = CGAffineTransformMakeRotation(recognizer.rotation);
}

这些方法是有效的,但这里是我如何尝试得到手势结束的方法。这不起作用:

代码语言:javascript
复制
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"gesture end");
}

同样,在转换时,我也有一个小问题。有时它会回到0弧度。

欢迎任何建议。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-12 20:17:16

我在另一个论坛上找到了答案。我希望这对其他人也有帮助。答案:

您可以通过检查操作方法中的UIRotationGestureRecognizer的状态来检测手势的结束。如果gestureRecognizer状态为== UIGestureRecognizerStateEnded,那么它就完成了。如果是某些原因导致它被取消(例如,一个电话打进来),那么您将看到它以UIGestureRecognizerStateCancelled结尾。

如果您想要将识别器的旋转直接应用于您的视图,而不是将其视为上一个位置的增量,您可以将识别器的旋转设置为UIGestureRecognizerStateBegan,然后它将计算该值的偏移量,您可以直接应用它们。这只要求您记住上次结束的旋转,然后可以在识别器的状态为UIGestureRecognizerStateBegan.时执行类似gestureRecognizer setRotation:lastAppliedRotation的操作

票数 26
EN

Stack Overflow用户

发布于 2011-02-10 07:15:20

如果gestureRecognizer识别该手势,则默认情况下不会调用touchesEnded (而是调用touchesCancelled。只有当识别器无法识别手势时,才会调用touchesEnded )。将gestureRecognizer.delaysTouchesEnded设置为NO,它应该可以工作。

票数 1
EN

Stack Overflow用户

发布于 2017-10-31 03:07:48

以防这种情况也发生在你身上,这就是你读这个问题的原因:“and”和"recognized“是相同的值(3 )。所以这段代码(在swift中)将不会工作:

代码语言:javascript
复制
if (gesture.state == .recognized || gesture.state == .changed) {
}
else if (gesture.state == .ended) {
//do something else
//=> never called
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4951617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档