首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UISwipeGestureRecognizer UIGestureRecognizerStateChanged未调用

UISwipeGestureRecognizer UIGestureRecognizerStateChanged未调用
EN

Stack Overflow用户
提问于 2018-06-05 10:50:06
回答 3查看 346关注 0票数 0

我在我的应用程序中定义了两个UISwipeGestureRecognizer

代码语言:javascript
复制
UISwipeGestureRecognizer *swipeLeftVolume = [[UISwipeGestureRecognizer alloc]  initWithTarget:self action:@selector(handleSwipeGestureVolume:)];
swipeLeftVolume.direction = UISwipeGestureRecognizerDirectionLeft;
[self.playerView addGestureRecognizer:swipeLeftVolume];

UISwipeGestureRecognizer *swipeRightVolume = [[UISwipeGestureRecognizer alloc]  initWithTarget:self action:@selector(handleSwipeGestureVolume:)];
swipeRightVolume.direction = UISwipeGestureRecognizerDirectionRight;
[self.playerView addGestureRecognizer:swipeRightVolume];

在目标方法中,我有三个状态:

代码语言:javascript
复制
UIGestureRecognizerStateBegan
UIGestureRecognizerStateChanged
UIGestureRecognizerStateEnded

我注意到只有UIGestureRecognizerStateEnded才被调用。

知道有什么问题吗?我想识别特定UIView上的滑动:

代码语言:javascript
复制
- (void)handleSwipeGestureVolume:(UISwipeGestureRecognizer *)sender {
    if (sender.state == UIGestureRecognizerStateBegan) {
        NSLog(@"Start");
    } else if (sender.state == UIGestureRecognizerStateChanged) {
        NSLog(@"Changed");
    } else if (sender.state == UIGestureRecognizerStateEnded) {
        NSLog(@"Finish");
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-05 11:08:48

确保为self.playerView.启用了UserInteraction

票数 1
EN

Stack Overflow用户

发布于 2018-06-05 11:37:42

似乎您在UISwipeGestureRecognizerUIPanGestureRecognizer之间感到困惑。

UISwipeGestureRecognizer只生成UIGestureRecognizerStateEnded状态,而UIPanGestureRecognizer具有所需的3种状态。

如果您需要同时接收UIGestureRecognizerStateBeganUIGestureRecognizerStateChangedUIGestureRecognizerStateEnded,请使用UIPanGestureRecognizer

代码语言:javascript
复制
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]  initWithTarget:self action:@selector(handleSwipeGestureVolume:)];
[self.playerView addGestureRecognizer:panGesture];
票数 2
EN

Stack Overflow用户

发布于 2018-06-05 11:36:21

对于任何手势识别器,必须启用用户交互才能工作。没有它,所有的手势都不会被触发,包括touchBegan:touchMove:等。

所以你需要让[self.playerView setUserInteractionEnabled:TRUE];

还有一件事,我想让您知道,如果您已经实现了touchBegan:touchMove:等,那么这个方法将首先被用于手势而不是UIGestureRecognizer shilds。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50698255

复制
相关文章

相似问题

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