【发布时间】:2022-06-16 14:07:37
【问题描述】:
我正在尝试使用 CGAffineTransform 比例调整包含几个子视图的 UIView(父)的大小。 我通过使用平移手势从一个角落拖动父级来调整父级的大小。 调整大小按预期工作,但如果我再次尝试调整大小,它会跳回初始帧。就好像它从来不知道它被调整了大小。
这些是我目前正在做的步骤:
1.- 就在平移手势开始时,我在超级视图中获得初始帧和触摸位置:
if gesture.state == .began {
//We get all initial values from the first touch
initialFrame = self.frame;
touchStart = gesture.location(in: superview)
}
2.- 然后我转到要拖动的手柄(在本例中为右上角),设置锚点,计算增量(初始触摸 - 移动的手势距离),计算新帧、缩放并应用变换。
case topRight:
if gesture.state == .began {
self.setAnchorPoint(anchorPoint: CGPoint(x: 0, y: 1))
}
let deltaX = -1 * (touchStart.x - gesture.location(in: superview).x)
let deltaY = 1 * (touchStart.y - gesture.location(in: superview).y)
let newWidth = initialFrame.width + deltaX;
let newHeight = initialFrame.height + deltaY;
let scaleX:CGFloat = newWidth / initialFrame.width;
let scaleY:CGFloat = newHeight / initialFrame.height;
self.transform = CGAffineTransform.identity.scaledBy(x: scaleX, y: scaleY)
3.- 最后我将锚点重置到 UIView 的中间。
if gesture.state == .ended {
self.setAnchorPoint(anchorPoint: CGPoint(x: 0.5, y: 0.5))
}
我附上了一个 gif,您可以在其中看到 UIView 从右上角的句柄调整大小。当我再次尝试调整它的大小时,它会跳回初始帧。 (好像视频重启了,不过这是跳转)
我错过了什么?我需要更新其他东西吗? 谢谢大家!
【问题讨论】:
-
因为您将变换应用到初始帧,它永远不会改变。
-
如果你能发布一些非常有用的代码@matt 谢谢。
标签: ios swift uiview cgaffinetransform cgaffinetransformscale