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(如translationInViewvelocityInView )之前常规的一个会被解雇,而不会破坏任何现有的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 } }