gpt4 book ai didi

core-graphics - 缩放 UIBezierPath 使其移动

转载 作者:行者123 更新时间:2023-12-03 18:30:32 25 4
gpt4 key购买 nike

我在 UIView 中绘制了一个 UIBezierPath。使用 pinchGesture 我尝试放大和缩小它。

缩放有效,但我的问题是 UIBezierPath 向下/向上移动(如果它的尺寸增加,它会向下移动,如果尺寸减小它会向上移动)。

如何设置缩放的 anchor ,使 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 的对象)

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

最佳答案

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

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

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

关于core-graphics - 缩放 UIBezierPath 使其移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12566159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com