ios - UIView 上的自定义圆角

标签 ios

所以我已经在这个问题上停留了一段时间,在线阅读并尝试了许多不同的解决方案,但无法弄清楚我做错了什么。我想要完成的事情应该非常简单:我有一个 UIView,我想将它的左下角和右下角圆化,以便它们被剪裁而不是被绘制。

这是我目前所拥有的(vwView 是我在屏幕上自定义 View 的导出):

var layerTest = CAShapeLayer()

var bzPath = UIBezierPath(roundedRect: vwView.bounds, byRoundingCorners: [.BottomLeft, .BottomRight], cornerRadii: CGSizeMake(10, 10) )
layerTest.path = bzPath.CGPath

vwView.layer.mask = layerTest;

我做错了什么?另外:这只是我的原型(prototype),因为我真的想在 UITableViewCell 上执行此操作,所以如果我需要采用不同的方法,那也会有所帮助。

谢谢

詹姆斯

最佳答案

问题是 vwView 稍后会调整大小以适合屏幕,但您没有更新其新大小的路径。对此没有特别简单的修复。您基本上需要将 vwView 设为自定义类(如果还没有)并更新 layoutSubviews 中的掩码。示例:

public class RoundedBorderView: UIView {

    public var roundedCorners: UIRectCorner = [ .BottomLeft, .BottomRight ] {
        didSet { self.setNeedsLayout() }
    }

    public var cornerRadii: CGSize = CGSizeMake(10, 10) {
        didSet { self.setNeedsLayout() }
    }

    public override func layoutSubviews() {
        super.layoutSubviews()
        updateMask()
    }

    private func updateMask() {
        let mask = maskShapeLayer()
        mask.path = UIBezierPath(roundedRect: bounds, byRoundingCorners: roundedCorners, cornerRadii: cornerRadii).CGPath
    }

    private func maskShapeLayer() -> CAShapeLayer {
        if let mask = layer.mask as? CAShapeLayer {
            return mask
        }
        let mask = CAShapeLayer()
        layer.mask = mask
        return mask
    }

}

vwView的类更改为RoundedBorderView,它将维护自己的 mask 层。

关于ios - UIView 上的自定义圆角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36092304/

相关文章:

ios - 图像未在 UItableViewCell 中设置 :

ios - 选择行时显示自定义 UIView

c# - 将 C# 函数转换为 Swift 4.2

ios - 尝试为 UITableViewCell 绘制虚线边框

ios - 从 UITapGestureRecognizer 中排除 subview

ios - CAShapeLayer,使用事务设置动画路径

ios - UISwitch 无法快速正常工作

ios - 从 ABAddressBookRequestAccessWithCompletion() 获取联系人数组给出 nil

ios - 如何禁用 ckcalendar 中的过去日期?

ios - 如何将数组元素放在表格 View 单元格上