我正在为iPhone编写Objective-C程序.
我正在尝试实现UILongPressGestureRecognizer,并且无法让它按照我想要的方式运行.
我想做的很简单:
回应屏幕上按下的触摸.
无论何时触摸移动和触摸开始,UILongPressGestureRecognizer都能正常工作,但如果我在同一个地方按住触摸,则没有任何反应.
为什么?
我怎样才能处理触摸开始,而不是移动,并保持在完全相同的位置?
这是我目前的代码.
// Configure the press and hold gesture recognizer touchAndHoldRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(touchAndHold:)]; touchAndHoldRecognizer.minimumPressDuration = 0.1; touchAndHoldRecognizer.allowableMovement = 600; [self.view addGestureRecognizer:touchAndHoldRecognizer];
解决方法
您描述的行为,即手动识别器在您不移动时不会再接收到处理程序的调用,这是标准行为.移动时这些手势的状态属性是UIGestureRecognizerStateChanged类型,因此如果事情没有改变,则不会调用您的处理程序.
你可以
>在调用UIGestureRecognizerStateBegan状态的手势识别器时,启动重复计时器;
>在调用状态为UIGestureRecognizerStateCancelled,UIGestureRecognizerStateFailed或UIGestureRecognizerStateEnded的手势识别器时,然后使计时器无效并释放;
>确保手势识别器方法在某些类属性中保存您正在查找的任何值(例如,locationInView的值或其他)
所以,可能是这样的:
@interface ViewController () @property (nonatomic) CGPoint location; @property (nonatomic,strong) NSTimer *timer; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UILongPressGestureRecognizer *gesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; gesture.minimumPressDuration = 0.1; gesture.allowableMovement = 600; [self.view addGestureRecognizer:gesture]; } - (void)handleTimer:(NSTimer *)timer { [self someMethod:self.location]; } - (void)handleGesture:(UIGestureRecognizer *)gesture { self.location = [gesture locationInView:self.view]; if (gesture.state == UIGestureRecognizerStateBegan) { self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(handleTimer:) userInfo:nil repeats:YES]; } else if (gesture.state == UIGestureRecognizerStateCancelled || gesture.state == UIGestureRecognizerStateFailed || gesture.state == UIGestureRecognizerStateEnded) { [self.timer invalidate]; self.timer = nil; } [self someMethod:self.location]; } - (void)someMethod:(CGPoint)location { // move whatever you wanted to do in the gesture handler here. NSLog(@"%s",__FUNCTION__); } @end
原文地址:https://www.jb51.cc/iOS/332717.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。