【问题标题】:Pan gesture messes up direction based on rotation平移手势会根据旋转弄乱方向
【发布时间】:2012-01-08 22:21:56
【问题描述】:

我的手势识别器有一个小问题。

我有一个名为“Sprite”的类,它只是一个 UIImageView。 Sprite 有自己的手势识别器和处理方法,以便用户可以平移、旋转和调整图形大小。

这是我的代码:

    -(void)setup{ //sets up the imageview...
//add the image, frame, etc.
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
    UIRotationGestureRecognizer *rotateGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotate:)];

    [self addGestureRecognizer:panGesture];
    [self addGestureRecognizer:pinchGesture];
    [self addGestureRecognizer:rotateGesture];
}

//handling methods
-(void)handlePinch:(UIPinchGestureRecognizer *)recognizer{
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
    recognizer.scale = 1;
}

-(void)handleRotate:(UIRotationGestureRecognizer *)recognizer{
    recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);
    recognizer.rotation = 0;
}
-(void)handlePan:(UIPanGestureRecognizer *)recognizer{
    CGPoint translation = [recognizer translationInView:self];
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y);
    [recognizer setTranslation:CGPointMake(0, 0) inView:self]
}

所以基本上他们每个人都可以自己正常工作。但是,当我旋转或调整 imageView 大小时,平移会出现问题。例如,如果您将 imageView 倒置旋转,则平移手势将在相反方向移动图像(向上是向下,向左拖动将其向右移动等)。同样,调整大小的精灵不会以与以前相同的速度/距离平移。

关于如何解决此问题的任何想法?我更愿意将此代码保留在 Sprite 类中,而不是 ViewController 中(如果可能的话)。谢谢。

【问题讨论】:

    标签: iphone ios xcode ipad uigesturerecognizer


    【解决方案1】:

    试试 translationInView:self.superview,而不是 translationInView:self。

    【讨论】:

    • Txs @Jerry,很好的答案。这让我完全发疯了!
    猜你喜欢
    • 2018-03-15
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2018-07-17
    • 2017-11-30
    • 2018-02-01
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多