[英]iOS Custom Gesture Recognizer works only first time
我正在尝试使用文档中的复选标记手势识别器示例,但它仅在我第一次进行手势时才起作用。 在识别之后,它不再起作用。
我正在使用以下代码:
CheckmarkGestureRecognizer.h
#import <UIKit/UIKit.h>
#import <UIKit/UIGestureRecognizerSubclass.h>
@interface Checkmark2GestureRecognizer : UIGestureRecognizer {
BOOL strokeUp ;
}
- (void)reset;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
@property (nonatomic,readwrite) UIGestureRecognizerState state;
@property (nonatomic,assign) CGPoint midPoint;
@end
CheckmarkGestureRecognizer.m
#import "Checkmark2GestureRecognizer.h"
@implementation Checkmark2GestureRecognizer
@synthesize state;
@synthesize midPoint;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
NSLog(@"began");
strokeUp = NO;
if ([touches count] != 1) {
self.state = UIGestureRecognizerStateFailed;
return;
}
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesMoved:touches withEvent:event];
if (self.state == UIGestureRecognizerStateFailed) return;
CGPoint nowPoint = [[touches anyObject] locationInView:self.view];
CGPoint prevPoint = [[touches anyObject] previousLocationInView:self.view];
if (!strokeUp) {
// on downstroke, both x and y increase in positive direction
if (nowPoint.x >= prevPoint.x && nowPoint.y >= prevPoint.y) {
self.midPoint = nowPoint;
// upstroke has increasing x value but decreasing y value
} else if (nowPoint.x >= prevPoint.x && nowPoint.y <= prevPoint.y) {
strokeUp = YES;
} else {
self.state = UIGestureRecognizerStateFailed;
}
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesEnded:touches withEvent:event];
if ((self.state == UIGestureRecognizerStatePossible) && strokeUp) {
self.state = UIGestureRecognizerStateRecognized;
NSLog(@"Ended");
}
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesCancelled:touches withEvent:event];
self.midPoint = CGPointZero;
strokeUp = NO;
self.state = UIGestureRecognizerStateFailed;
NSLog(@"cancelled");
}
- (void)reset {
[super reset];
NSLog(@"reset");
self.midPoint = CGPointZero;
strokeUp = NO;
}
@end
关于我做错了什么的任何想法?
谢谢
我有自己的手势识别器的类似问题。 似乎UIGestureRecognizer不会调用您的类的“重置”方法,也不会将“state”属性设置为UIGestureRecognizerStatePossible。
我知道有两种方法可以使它工作:
看看这段代码。 它适用于我。 https://github.com/shahidnasrullah/CustomZGestureIOS.git
尝试删除@synthesize state;
你的实现中的行。 这已经在超类中完成了。
您也不UIGestureRecognizerSubclass.h
所有定义复制到头文件中。 最好是删除它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.