每当我变换框时,边框宽度就会变得不均匀。
我尝试在每次转换后重画框架,但问题仍然存在。这是相关代码:
@objc func pinchedView(_ sender:UIPinchGestureRecognizer){
box.transform = box.transform.scaledBy(x: 1.0, y: sender.scale)
box.frame = CGRect(x: box.frame.minX, y: box.frame.minY, width: box.frame.width, height: box.frame.height)
box.layer.borderWidth = 1
sender.scale = 1
}
那么变换后如何保持恒定的边框宽度?
答案 0 :(得分:2)
如果使用transform
缩放视图,则将缩放所有内容,包括边界。相反,您只需要调整视图的frame
。
例如,如果您直接定义了视图的frame
(并且没有使用约束),那么您将:
var oldHeight: CGFloat = 0
@objc func handlePinch(_ gesture: UIPinchGestureRecognizer) {
switch gesture.state {
case .began:
oldHeight = subview.frame.height
case .changed:
subview.frame = CGRect(x: subview.frame.minX, y: subview.frame.minY, width: subview.frame.width, height: oldHeight * gesture.scale)
default:
break
}
}
或者,如果您使用约束,则可以设置高度约束@IBOutlet
,例如,然后执行以下操作:
@IBOutlet var heightConstraint: NSLayoutConstraint!
var oldHeight: CGFloat = 0
@objc func handlePinch(_ gesture: UIPinchGestureRecognizer) {
switch gesture.state {
case .began:
oldHeight = heightConstraint.constant
case .changed:
heightConstraint.constant = oldHeight * gesture.scale
default:
break
}
}