3

나는 UIBezierPathUIView 안에 그렸습니다. 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은 UIBezierPath가에 affineTransform 적용 대상입니다)하지만, 난 몰라 경로가 같은 장소에 있도록 번역 값을 찾는 방법을 알아야합니다.

답변

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

Swift 3 extension on UIBezierPath : https://stackoverflow.com/a/46020842/44964 – sabiland