【问题标题】:Scaling UIBezierPath makes it move缩放 UIBezierPath 使其移动
【发布时间】:2012-09-24 13:33:59
【问题描述】:

我在UIView 中画了一个UIBezierPath。使用pinchGesture,我尝试将其放大和缩小。

缩放有效,但我的问题是UIBezierPath 向下/向上移动(如果它的尺寸增加,它会向下移动,如果尺寸减小它会向上移动)。

如何设置缩放的锚点以使UIBezierPath 中心保持在同一位置?

- (void)handlePinch:(UIPinchGestureRecognizer *)recognizer {
  CGAffineTransform transform = CGAffineTransformScale(recognizer.view.transform, 
                                                       recognizer.scale, 
                                                       recognizer.scale);
  [self.selectedObject applyAffineTransform:transform];
  recognizer.scale = 1;
}

(selectedObject 是一个仅将affineTransform 应用于其UIBezierPath 的对象)

除了缩放之外,我还尝试应用平移以将其移回原来的位置,但我不知道如何找到平移的值,因此路径保持在同一个位置。

【问题讨论】:

    标签: core-graphics scale cgaffinetransform uibezierpath cgaffinetransformscale


    【解决方案1】:

    好的,经过多次尝试,我设法解决了它,在缩放之后我需要添加一个平移,对于平移的距离,我需要比较我的 uibezierpath 的边界并减去原点的变化和宽度增加的一半这里的height和height在代码中的翻译是一样的:

    - (void)handlePinch:(UIPinchGestureRecognizer *)recognizer {
    CGRect originalBounds = self.selectedObject.bounds;
    
    CGAffineTransform scale = CGAffineTransformMakeScale(recognizer.scale, recognizer.scale);
    [self.selectedObject applyAffineTransform:scale];
    
    CGAffineTransform translate = CGAffineTransformMakeTranslation(-(self.selectedObject.bounds.origin.x - originalBounds.origin.x) - (self.selectedObject.bounds.size.width - originalBounds.size.width) * 0.5, -(self.selectedObject.bounds.origin.y - originalBounds.origin.y) - (self.selectedObject.bounds.size.height - originalBounds.size.height) * 0.5);
    [self.selectedObject applyAffineTransform:translate];
    
    recognizer.scale = 1;
    }
    

    我希望这对其他人也有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-04
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2012-11-02
      • 1970-01-01
      相关资源
      最近更新 更多