我使用tap事件的目的是非常时间敏感的,所以我很好奇是否有可能让UITapGestureRecognizer在用户简单地触碰时激活,而不是要求他们也触摸?
发布于 2013-08-05 23:23:31
使用UILongPressGestureRecognizer并将其minimumPressDuration
设置为0。在UIGestureRecognizerStateBegan
状态下,它的行为就像是触碰。
对于Swift 4+
func setupTap() {
let touchDown = UILongPressGestureRecognizer(target:self, action: #selector(didTouchDown))
touchDown.minimumPressDuration = 0
view.addGestureRecognizer(touchDown)
}
@objc func didTouchDown(gesture: UILongPressGestureRecognizer) {
if gesture.state == .began {
doSomething()
}
}
对于Objective-C
-(void)setupLongPress
{
self.longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(didLongPress:)];
self.longPress.minimumPressDuration = 0;
[self.view addGestureRecognizer:self.longPress];
}
-(void)didLongPress:(UILongPressGestureRecognizer *)gesture
{
if (gesture.state == UIGestureRecognizerStateBegan){
[self doSomething];
}
}
发布于 2016-07-01 18:55:25
Swift (无子类化)
这是一个类似于Rob Caraway's Objective-C answer的Swift版本。
这个想法是使用minimumPressDuration
设置为零的长按手势识别器,而不是使用轻击手势识别器。这是因为长按手势识别器报告触摸开始事件,而轻击手势不报告。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Add "long" press gesture recognizer
let tap = UILongPressGestureRecognizer(target: self, action: #selector(tapHandler))
tap.minimumPressDuration = 0
myView.addGestureRecognizer(tap)
}
// called by gesture recognizer
@objc func tapHandler(gesture: UITapGestureRecognizer) {
// handle touch down and touch up events separately
if gesture.state == .began {
// do something...
print("tap down")
} else if gesture.state == .ended { // optional for touch up event catching
// do something else...
print("tap up")
}
}
}
发布于 2016-02-21 19:00:12
这是另一种解决方案。创建UIControl的子类。你甚至可以在故事板中像UIView一样使用它,因为UIControl是UIView的子类。
class TouchHandlingView: UIControl {
}
并对其执行addTarget:
@IBOutlet weak var mainView: TouchHandlingView!
...
mainView.addTarget(self, action: "startAction:", forControlEvents: .TouchDown)
...
然后,指定的操作将像UIButton一样被调用:
func startAction(sender: AnyObject) {
print("start")
}
https://stackoverflow.com/questions/15628133
复制相似问题