3

我画了一个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

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

4

1 回答 1

8

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

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

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

于 2012-09-25T06:39:05.573 回答