相关疑难解决方法(0)

如何识别oneTap/doubleTap?

我知道使用Apple API过滤oneTap/doubleTap.代码如下.

UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                        initWithTarget:self action:@selector(handleDoubleTap:)];
doubleTapGestureRecognizer.numberOfTapsRequired = 2;


[self addGestureRecognizer:doubleTapGestureRecognizer];


UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
singleTapGestureRecognizer.numberOfTapsRequired = 1;

**[singleTapGestureRecognizer requireGestureRecognizerToFail: doubleTapGestureRecognizer];**

[self addGestureRecognizer:singleTapGestureRecognizer];
Run Code Online (Sandbox Code Playgroud)

但oneTap/doubleTap checkDelayTime感觉如此之长(约0.5秒?).一般来说App的用户反应非常快.虽然0.5秒通常是短时间.但在移动设备环境中是长期的,因为用户的反应非常重要.

说到这一点,YouTubeApp在此输入图像描述有一个非常完美的算法,关于oneTap/doubleTap时刻的过滤.oneTap-doubleTap checkDelay是VeryVeryShort完美优化.

oneTap(show/hidden controlBar)

doubleTap(完整/默认videoScreenSize)

如何实现像YoutubeApp?关于oneTap-doubleTap过滤不使用requireGestureRecognizerToFail选择器.关于非常短的延迟oneTap-doubleTap区分.

我认为YoutubeApp不使用requireGestureRecognizer选择器.

iphone uigesturerecognizer

10
推荐指数
3
解决办法
1万
查看次数

如何在Swift中定义自定义UIGestureRecognizer?

我想在Swift中定义自定义UIGestureRecognizer,但是我无法导入UIGestureRecognizerSubclass并且无法覆盖"touchesBegan","touchesMoved"等方法.

"UIGestureRecognizerSubclass.h"位于UIKit模块中,但只能在Swift中导入模块,并且无法导入头文件.

如何导入UIGestureRecognizerSubclass并定义自定义UIGestureRecognizer?


编辑:

我在Bridging-Header.h中添加了以下代码,并成功编译了我的自定义手势识别器.

#import <UIKit/UIGestureRecognizerSubclass.h>
Run Code Online (Sandbox Code Playgroud)

但是这段代码可能会为我项目中的每个swift文件导入"UIGestureRecognizerSubclass.h",所以我认为这不是最好的方法.

这是对的吗?还有其他合适的解决方案吗

import uigesturerecognizer swift

5
推荐指数
1
解决办法
1488
查看次数

覆盖touchesBegan:错误-方法不会覆盖超类中的任何方法

我试图覆盖UITapGestureRecognizer的自定义子类中的touchesBegan。代码如下。我是从这里得到的:如何加快对双击的识别?。这是公认的答案,但我遇到一个错误:方法未从其超类覆盖任何方法。我已经检查过了,这似乎确实是touchesBegan的签名。救命?

import UIKit

class UIShortTapGestureRecognizer: UITapGestureRecognizer {
    let tapMaxDelay: Double = 0.3

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        super.touchesBegan(touches, withEvent: event)
        delay(tapMaxDelay) {
        // Enough time has passed and the gesture was not recognized -> It has failed.
            if  self.state != UIGestureRecognizerState.Ended {
                self.state = UIGestureRecognizerState.Failed
            }
        }
    }


}
Run Code Online (Sandbox Code Playgroud)

ios uitapgesturerecognizer swift

2
推荐指数
1
解决办法
1453
查看次数