视图转换后如何解决边框宽度不均匀的问题?

时间:2019-07-17 23:22:08

标签: ios swift transformation

每当我变换框时,边框宽度就会变得不均匀。

enter image description hereenter image description here

我尝试在每次转换后重画框架,但问题仍然存在。这是相关代码:

@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
}

那么变换后如何保持恒定的边框宽度?

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
    }
}
相关问题