繁体   English   中英

手势识别器,异常行为(乘数效应)iOS

[英]gesture recognizer, strange behavior (Multiplier effect) iOS

我正在尝试向视图添加手势识别器。 当我同时添加平移(用于移动)和捏合(用于缩放)时,我得到一些奇怪的行为。

缩放视图(恰好包含imageView)后,平移手势识别器似乎会增加移动效果。 还是仍然假设原始比例,因此移动速度比预期的要快?

这是移动和缩放方法的代码:

//ivars for gesture recognizers/transforms
CGFloat scale;
CGFloat rotation;
CGPoint translatedPoint;
CGFloat _lastScale;
CGFloat _lastRotation;  
CGFloat _firstX;
CGFloat _firstY;

-(void)scale:(id)sender {
    if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
        _lastScale = 1.0;
    }
    scale = 1.0 - (_lastScale - [(UIPinchGestureRecognizer*)sender scale]);
    CGAffineTransform currentTransform = gestureView.transform;
    CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);
    [gestureView setTransform:newTransform];
    _lastScale = [(UIPinchGestureRecognizer*)sender scale];
    NSLog(@"gestureView origin x: %f, y: %f", gestureView.frame.origin.x, gestureView.frame.origin.y);
    NSLog(@"gestureView center x: %f, y: %f",[gestureView center].x, [gestureView center].y);
    NSLog(@"gestureView scale x: %f, scale y: %f", gestureView.frame.size.width, gestureView.frame.size.height);

}

-(void)move:(id)sender {
    translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:gestureView];
    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
        _firstX = [gestureView center].x;
        _firstY = [gestureView center].y;
    }
    translatedPoint = CGPointMake(_firstX+translatedPoint.x, _firstY+translatedPoint.y);
    [gestureView setCenter:translatedPoint];
    NSLog(@"gestureView origin x: %f, y: %f", gestureView.frame.origin.x, gestureView.frame.origin.y);
    NSLog(@"gestureView center x: %f, y: %f",[gestureView center].x, [gestureView center].y);
}

这是项目: owolf.net/uploads/StackOverflow/GestureRecognizerTest.zip

谢谢阅读!

您需要在gestureView中进行翻译,这将为您提供缩放后的翻译。 如果将手势视图缩小到50%,则沿x轴移动10像素将使平移点值达到x = 20,这是因为“缩小”的手势视图(“高分辨率”)上的“外部” 10像素增加了一倍。

然后,将其应用于gestureView的框架(center是将框架设置为center.x - frame.size.width/2, center.y - frame.size.height/2, frame.size的便捷方法),这意味着它受规模的影响。

您可能想要做的就是更改translationInView:调用,以在gestureView.superviewgestureView.superview ,而不是在gestureView本身中gestureView

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM