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