ios - View 转换后如何修复不均匀的边框宽度?

标签 ios swift transformation

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

enter image description here . enter 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
}

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

最佳答案

如果您使用transform 来缩放 View ,那将缩放所有内容,包括边框。相反,您只需调整 View 的 frame

例如,如果您直接定义 View 的 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
    }
}

关于ios - View 转换后如何修复不均匀的边框宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57085154/

相关文章:

r - 将一列从分类转换为二进制,保留其余列

java - OpenCV getPerspectiveTransform 和 warpPerspective Java

iphone - 辅助线程的堆栈大小,DEBUG 和 RELEASE 版本之间的显着差异

android - AirWatch 浏览器 URL 方案

objective-c - NSVisualEffectView 上的 NSButton : Wrong Background Color

swift - 带有贴纸的 UIImageView 并在贴纸上添加手势

string - (swift) 从字符串中删除 "\"字符?

java - AffineTransform 修改的形状呈现出与预期相反的效果

ios - 在 URL 查询中使用俄语字符

ios - 用swift检查数字是否为十进制