【发布时间】:2018-08-12 10:43:19
【问题描述】:
我正在通过UIRotationGestureRecognizer 旋转UIView,但我有一个问题,旋转后的UIView 的帧大小将在旋转时改变。
targetView = UIView(frame: CGRect(x: self.view.center.x, y: self.view.center.y , width: 100, height: 100))
targetView.backgroundColor = .red
targetView.isUserInteractionEnabled = true
self.view.addSubview(targetView)
targetView.center = self.view.center
let rotate = UIRotationGestureRecognizer(target: self, action: #selector(rotatedView))
targetView.addGestureRecognizer(rotate)
这里是旋转功能:
@objc func rotatedView(_ sender: UIRotationGestureRecognizer) {
var originalRotation = CGFloat()
if sender.state == .began {
sender.rotation = lastRotation
originalRotation = sender.rotation
print("TargetView Frame Size: [START ROTATE] ", self.targetView.frame.size)
print("TargetView Bounse Size: [START ROTATE] ", self.targetView.bounds)
} else if sender.state == .changed {
let newRotation = sender.rotation + originalRotation
sender.view?.transform = CGAffineTransform(rotationAngle: newRotation)
print("TargetView Frame Size: [ROTATETING] ", self.targetView.frame.size)
print("TargetView Bounse Size: [ROTATING ROTATE] ", self.targetView.bounds)
}
}
大小会改变:
TargetView Frame Size: [START ROTATE] (100.0, 100.0)
TargetView Frame Size: [ROTATETING] (110.564206726133, 110.564206726133)
如何像开始旋转一样在旋转后保持帧大小?!
编辑:
我有这些手势:旋转、调整大小、移动。
移动运行良好,但旋转正在改变大小。我可以在这里使用边界,但如果我也调整大小,边界就不再有用了。
【问题讨论】:
-
是的,框架大小增加了,因为框架是包含所有内容的矩形,并且旋转的正方形比未旋转的正方形更宽更高。界限没有改变。为什么会出现这个问题?
-
@vacawama 因为我必须保存旋转和缩放的 UIView 大小和位置,并在以后生成相同的 UIView。我可以使用边界,但我也想添加缩放功能,并且在缩放时边界不会改变。 :-|
-
你能保存
transform吗?那和view应该是您以后重新创建它所需的一切。 -
我必须将旋转和大小转换为一般度量,并将主题发送到服务器,以便在其他设备(Android、电视、Web 等)上呈现它。问题是:旋转会改变帧大小。我也必须发送尺寸。 (已编辑)
-
其他设备需要什么规格?听起来您需要原始视图的大小、旋转角度和比例。
标签: swift uiview core-graphics