缩放UIBezierPath使其移动

Ara*_*nir 3 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;
}
Run Code Online (Sandbox Code Playgroud)

(selectedObject是一个只应用于affineTransform它的对象UIBezierPath)

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

Ara*_*nir 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;
}
Run Code Online (Sandbox Code Playgroud)

我希望这也能帮助别人.