1
我有一个触摸操作,它是调整大小类型的场景的触发器,其中操作在触摸移动时开始,并且需要在touchesEnded上结束。事情是,touchesEnd可能在不同的UI视图上,因为用户正在拖动手指。如何注册一个*全球” touchesEnded听众?TouchUp Inside的全局事件处理程序
我有一个触摸操作,它是调整大小类型的场景的触发器,其中操作在触摸移动时开始,并且需要在touchesEnded上结束。事情是,touchesEnd可能在不同的UI视图上,因为用户正在拖动手指。如何注册一个*全球” touchesEnded听众?TouchUp Inside的全局事件处理程序
你应该使用UIPanGestureRecognizer
。每次触发,检查手势识别的state
。如果是UIGestureRecognizerStateBegan
则认为是第一个被感动,如果它是UIGestureRecognizerStateChanged
,则用户正在移动他的手指,如果它是UIGestureRecognizerStateEnded
那么用户已经抬起他的手指
只要手势开始在您的视图上,即使在离开视图边界之后,它仍将继续(除非取消)不需要担心“使其成为全局”
将手势识别器初始化为:
UIPanGestureRecognizer *dragViewGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleDragView:)];
dragViewGestureRecognizer.maximumNumberOfTouches = 1;
[yourView addGestureRecognizer:dragViewGestureRecognizer];
然后填写以下方法与您需要的代码:
- (void)handleDragView:(UIPanGestureRecognizer*)panGestureRecognizer {
switch (panGestureRecognizer.state) {
case UIGestureRecognizerStateBegan: {
//Code when dragging starts
break;
} case UIGestureRecognizerStateChanged: {
//Code while dragging is happening (if needed)
break;
} case UIGestureRecognizerStateEnded: {
//Code when dragging ends
break;
}
default:
break;
}
}
这是伟大的!我如何获得手指当前所在的UIView? – user2453876
只有当您将手势处理程序添加到(上述代码中的“yourView”)时,才会触发初始触摸“捕获”该事件。如果在多个视图中有多个手势控制器访问同一方法,则可以通过从'handleDragView:'方法内访问'panGestureRecognizer.view'来获取触发事件的视图。 – Ander