缩放UIBezierPath使其移动

时间:2012-09-24 13:34:00

标签: core-graphics scale cgaffinetransform uibezierpath cgaffinetransformscale

我在UIBezierPath内画了UIView。使用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的对象)

我尝试在缩放之外应用翻译以将其移回原处之前的位置,但我不知道如何找到翻译的值以使路径保持在同一位置。

1 个答案:

答案 0 :(得分:8)

好了多次尝试后我设法解决了它,在缩放之后我需要添加一个翻译,因为我需要比较我的uibezier路径边界的转换距离并减去原点的变化和宽度增加的一半和高度在这里是相同的代码翻译:

- (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;
}

我希望这也可以帮助其他人。