首页 > 解决方案 > 视图转换后如何修复不均匀的边框宽度?

问题描述

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

在此处输入图像描述. 在此处输入图像描述

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

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

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

标签: iosswifttransformation

解决方案


如果您使用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
    }
}

推荐阅读