UIPanGestureRecognizer在触摸时立即执行某些操作
我是新来的ios,所以我提前道歉,如果我失去了一些明显的东西。
我正在创造一个谜题,我希望单个拼图在触摸时增加尺寸,减less放手。
目前我有:
-(IBAction)handlePan:(UIPanGestureRecognizer *)recognizer{ if(recognizer.state == UIGestureRecognizerStateBegan) else if(recognizer.state == UIGestureRecognizerStateEnded) }
当盘子开始时(这也是开始的时候),拼图块增加了尺寸,当盘子结束时(如所期望的),拼图块的尺寸减小。 我希望一旦用户触摸了这个棋子,拼图块移动之前,尺寸就会增加。 当select一个瓷砖时,这在Words With Friends中看到。
我努力了
-(IBAction)handleTap:(UITapGestureRecognizer *)recognizer{ if(recognizer.state == UIGestureRecognizerStateBegan) else if(recognizer.state == UIGestureRecognizerStateEnded) }
这只会在手指抬起之后才会增加拼图。
我的问题:
有一种方法可以在手指碰到拼图块后增加拼图的尺寸,然后继续平移手势。
先谢谢你。
我也需要这样做,杰克的build议对我来说是完美的。 以防万一以后遇到这种情况,下面是我的UIPanGestureRecognizer
子类实现(头文件保持不变):
#import "ImmediatePanGestureRecognizer.h" #import <UIKit/UIGestureRecognizerSubclass.h> @implementation ImmediatePanGestureRecognizer - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesBegan:touches withEvent:event]; self.state = UIGestureRecognizerStateBegan; } @end
这就是你所需要的一切 – 只要你将手指放在视图上,只要将手指向任意方向移动一个点就更新,并提供常规UIPanGestureRecognizer
的function(如translationInView
和velocityInView
)之前常规的一个会被解雇,而不会破坏任何现有的function。
我已经实施了George WS的答案。 通过一些testing,我意识到在初始触摸之后,但在初始触摸结束之前发生的其他触摸事件没有得到正确的处理。 这是我更新的实现。 这有点幼稚,但可以防止由UIGestureRecognizerStateBegan引起的奇怪行为多次发生。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if (self.state >= UIGestureRecognizerStateBegan) { return; } [super touchesBegan:touches withEvent:event]; self.state = UIGestureRecognizerStateBegan; }
根据文档 UIPanGestureRecognizer
只有在“允许的最小手指数量(minimumNumberOfTouches)移动到足以被视为平底锅”时才会进入UIGestureRecognizerStateBegan。 如果你想要触摸的时候发生什么事情,你可以尝试inheritanceUIPanGestureRecognizer,并通过touchesBegan:withEvent:
:。
感谢George WS&Derrick Hathaway
Swift 2.2
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent) { if (self.state == UIGestureRecognizerState.Began) { return } super.touchesBegan(touches, withEvent: event) self.state = UIGestureRecognizerState.Began; }
而且您必须添加到您的桥接头:
#import <UIKit/UIGestureRecognizerSubclass.h>
我试图做一个类似的事情,我一直在处理的解决scheme是使用视图的touchesBegan:withEvent:执行我想要发生的动作,即时用户触摸屏幕。 然后,一旦触摸成为手势,手势处理器就会接pipe。
Swift 3/4解决scheme
import UIKit.UIGestureRecognizerSubclass class InstantPanGestureRecognizer: UIPanGestureRecognizer { override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) { if (self.state == UIGestureRecognizerState.began) { return } super.touchesBegan(touches, with: event) self.state = UIGestureRecognizerState.began } }