Cocoa touch 我如何告诉UIgestureRecognitor取消现有的触摸?
我有一个Cocoa touch 我如何告诉UIgestureRecognitor取消现有的触摸?,cocoa-touch,uigesturerecognizer,Cocoa Touch,Uigesturerecognizer,我有一个uipangestureerecognizer用于跟踪用户手指下方的对象(UIImageView)。我只关心X轴上的运动,如果触摸偏离Y轴上对象帧的上方或下方,我希望结束触摸 我已经掌握了确定触摸是否在对象的Y边界内所需的一切,但我不知道如何取消触摸事件。翻转识别器的cancelsTouchesInView属性似乎无法满足我的要求 谢谢 这个小把戏对我有用 @implementation UIGestureRecognizer (Cancel) - (void)cancel {
uipangestureerecognizer
用于跟踪用户手指下方的对象(UIImageView
)。我只关心X轴上的运动,如果触摸偏离Y轴上对象帧的上方或下方,我希望结束触摸
我已经掌握了确定触摸是否在对象的Y边界内所需的一切,但我不知道如何取消触摸事件。翻转识别器的cancelsTouchesInView
属性似乎无法满足我的要求
谢谢 这个小把戏对我有用
@implementation UIGestureRecognizer (Cancel)
- (void)cancel {
self.enabled = NO;
self.enabled = YES;
}
@end
从uigesturecognizer@enabled
文档中:
禁用手势识别器,以便
不接受触摸。默认值
价值是肯定的。如果你改变这个
属性设置为“否”,同时执行手势
识别器当前正在识别一个
手势识别器
转换到取消状态
您有几种处理方法:
-ignoreTouch:withEvent:
轻松完成此操作translationView:
或locationInView:
返回值的Y值,并将其适当夹紧禁用手势识别器,使其不接收触摸。默认值为“是”。如果在手势识别器当前识别手势时将此属性更改为“否”,则手势识别器将转换为取消状态。@matej在Swift中的回答
extension UIGestureRecognizer {
func cancel() {
isEnabled = false
isEnabled = true
}
}
Obj-C:
Swift 3:
recognizer.isEnabled = false
recognizer.isEnabled = true
根据文档,您可以将手势识别器分为以下子类: 在YourPanGestureRecognizer.m中:
#import "YourPanGestureRecognizer.h"
@implementation YourPanGestureRecognizer
- (void) cancelGesture {
self.state=UIGestureRecognizerStateCancelled;
}
@end
在YourPanGestureRecognizer.h中:
#import <UIKit/UIKit.h>
#import <UIKit/UIGestureRecognizerSubclass.h>
@interface NPPanGestureRecognizer: UIPanGestureRecognizer
- (void) cancelGesture;
@end
Ref:只需将
识别器设置为。在手持面板(u.recognizer:ui-pangestrerecognizer)
方法中声明。结束或。取消OP似乎在询问取消手势中的个人触摸,不完全终止该手势。非常好的最小解决方案中建议使用此技术。这将在UIGestureRecognitzerState开始并终止该平移手势后立即调用UIGestureRecognitzerState Cancelled。问题是如何忽略识别器并在其操作中将触摸事件传递给其他人?
#import "YourPanGestureRecognizer.h"
@implementation YourPanGestureRecognizer
- (void) cancelGesture {
self.state=UIGestureRecognizerStateCancelled;
}
@end
#import <UIKit/UIKit.h>
#import <UIKit/UIGestureRecognizerSubclass.h>
@interface NPPanGestureRecognizer: UIPanGestureRecognizer
- (void) cancelGesture;
@end
YourPanGestureRecognizer *panRecognizer = [[YourPanGestureRecognizer alloc] initWithTarget:self action:@selector(panMoved:)];
[self.view addGestureRecognizer:panRecognizer];
[...]
-(void) panMoved:(YourPanGestureRecognizer*)sender {
[sender cancelGesture]; // This will be called twice
}