3

我在UIView内绘制了一个UIBezierPath。随着pinchGesture我试图扩大和缩小它。缩放UIBezierPath使其移动

缩放的作品,但我的问题是,UIBezierPath向下/向上移动(如果它增加大小,它会向下移动,如果大小减少,它会向上移动)。

如何设置缩放的定位点,以便UIBezierPath中心保持在同一位置?

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

(selectedObject是刚刚应用affineTransformUIBezierPath对象)

我想除了应用平移缩放将其移回到其原来的位置,但我不知道如何找到翻译的价值,所以路径停留在同一个地方。

回答

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

我希望这也会帮助别人。

+0

太棒了!这使我从头痛中解脱出来。 –

+0

UIBezierPath上的Swift 3扩展:https://stackoverflow.com/a/46020842/44964 – sabiland