UIGestureRecognizers (iPhone, Cocos2d)的多重手势



我使用Cocos2d来渲染精灵,使用UIGestureRecognizers来允许用户平移、旋转和缩放精灵。

我已经让每个工作在隔离使用如下代码:

UIPinchGestureRecognizer *pinchRecognizer = [[[UIPinchGestureRecognizer alloc] initWithTarget:layer action:@selector(handlePinchFrom:)] autorelease];
[viewController.view addGestureRecognizer:pinchRecognizer];
UIRotationGestureRecognizer *rotationRecognizer = [[[UIRotationGestureRecognizer alloc] initWithTarget:layer action:@selector(handleRotationFrom:)] autorelease];
[viewController.view addGestureRecognizer:rotationRecognizer];

然而,如果用户在旋转时将手指捏在一起,我希望同时缩放和旋转精灵(例如,照片应用程序就是这样做的)。不幸的是,识别器似乎在"旋转"或"缩放"模式中卡住了,并且不会同时调用两个处理程序:(

基本上,我想知道这是否意味着我不能使用UIGestureRecognizers?我可以结合两个识别器和做所有的动作在一个单一的处理程序?我是否需要子类化UIGestureRecognizer为"PinchAndRotateRecognizer"

感谢帮助:)

在你的委托中实现gestureRecognizer: shouldrecognizesimultanlywithgesturerecognizer:。

我设置了一个UIPinchGestureRecognizer,一个UIPanGestureRecognizer和一个UIRotationGestureRecognizer,我希望它们同时工作。我也有一个UITapGestureRecognizer,我做想同时被识别。我所做的就是:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if (![gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] && ![otherGestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
        return YES;
    }
    return NO;
}

同时只能有一个手势识别器处于"活动"状态。最先触发的人获胜。这意味着你不能结合UIPinchGestureRecognizer和urotationgesturerecognizer来达到预期的效果。

你可以像你说的那样尝试子类化UIGestureRecognizer。阅读文档中的子类化说明!

最新更新