我正在尝试实现三指捏合操作,但遇到了一些问题。
我之前使用的是两指捏合和两指旋转操作,分别执行(不需要或不希望同时手势),但问题是这两者非常相似,很多时候系统会识别错误的动作,因此我不得不移开手指再次按下,试图让系统识别旋转(通常它先识别捏合)。
我搜索了很多资料,想看看是否可以使用delayBegin
或者激活同时手势等方法解决,但都没有成功。所以我的想法是,不再使用两个手指捏合,而是使用三个手指(因为捏合比旋转更容易)。
然而,问题在于,如你所知,捏合只能用两个手指完成。因此,我决定对UIPinchGestureReconizer
进行子类化,并仅允许其在屏幕上放置三个手指时工作。其余部分可以像标准捏合操作一样工作,甚至忽略第三个手指(用于计算缩放比例),但必须确保第三个手指仍在屏幕上。
因此,我尝试了以下实现方式:ThreeFingerPinchRecognizer
(它是UIPinchGestureRecognizer
的子类)。
@implementation GRThreeFingerPinchRecognizer
-(id)initWithTarget:(id)target action:(SEL)action
{
self = [super initWithTarget:target action:action];
if(self){
}
return self;
}
- (void)reset
{
[super reset];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
int numberOfTouches = event.allTouches.count;
if (numberOfTouches == 3)
{
[super touchesBegan:touches withEvent:event];
}
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
int numberOfTouches = event.allTouches.count;
if (numberOfTouches == 3)
{
[super touchesMoved:touches withEvent:event];
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesEnded:touches withEvent:event];
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesCancelled:touches withEvent:event];
}
所以,正如您所看到的,我正在尝试通过仅调用
[super]
函数来获得2指捏合的相同功能,并在touchesBegan
和touchesMoved
函数中测试屏幕上是否有3个手指(通过查看event.alltouches.count
)。使用这种方法,旋转与两个手指完美配合,但是捏合不太容易激活,而且即使激活了,也不能像两个手指捏合一样工作...
我知道我可能做错了,所以任何帮助都会很好!
非常感谢!