我创建了一个名为UIGestureRecognizer
的{{1}}子类来模拟长按手势。 (是的,我知道已经存在的具体子类,我只是在学习Objective-c并尝试一下。)
我只覆盖了以下方法:
LongPressGestureRecognizer
并在我的视图控制器中使用属性- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
self.state = UIGestureRecognizerStatePossible;
[self performSelector:@selector(setState:) withObject:[NSNumber numberWithInt:UIGestureRecognizerStateRecognized] afterDelay:2];
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
[NSObject cancelPreviousPerformRequestsWithTarget:self];
self.state = UIGestureRecognizerStateCancelled;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[NSObject cancelPreviousPerformRequestsWithTarget:self];
self.state = UIGestureRecognizerStateFailed;
}
来存储手势识别器,我有以下代码:
recognizer
我的问题是- (LongPressGestureRecognizer *)recognizer
{
if (!_recognizer) {
_recognizer = [[LongPressGestureRecognizer alloc] init];
}
return _recognizer;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self.recognizer addTarget:self action:@selector(log:)];
[self.view addGestureRecognizer:self.recognizer];
}
- (IBAction)log:(LongPressGestureRecognizer *)recognizer
{
//blah blah blah
}
根本没有被调用...通过在控制台中记录log:
,我知道就状态而言,手势识别器正在按预期工作...
我在这里做错了什么?
答案 0 :(得分:0)
也可能有其他问题,但我可以告诉你,-performSelector:withObject:afterDelay:
电话不会像你希望的那样工作;您最终会将指针传递给NSNumber
对象而不是int
,因此state
将被设置为某种垃圾值。创建一个将self.state = UIGestureRecognizerStateRecognized
进行调用的方法。