Swift中UIView的圆顶角落

时间:2017-09-12 15:00:30

标签: swift uitableview uitabbarcontroller uibezierpath cashapelayer

我正在使用下面的代码

来绕过顶角
func roundCorners(corners:UIRectCorner, radius: CGFloat) {
        let path = UIBezierPath(roundedRect: self.bounds,
                                byRoundingCorners: corners,
                                cornerRadii: CGSize(width: radius, height: radius))
        let maskLayer = CAShapeLayer()
        maskLayer.frame = self.bounds
        maskLayer.path = path.cgPath
        self.layer.mask = maskLayer
    }

使用myView.roundCorners(corners:[.topLeft, .topRight], radius: radius)

但它正在围绕观点的一面:
 enter image description here

这是在tableView sectionHeader中,如果我向下滚动然后使用相同的代码向上舍入:  enter image description here

并且使用相同功能对顶部折扣视角进行舍入。

谢谢你的帮助。

更新 如果我在视图上修复宽度,那么它可以正常工作。

1 个答案:

答案 0 :(得分:3)

在@Paolo的帮助下解决了这个问题,下面是工作代码。

Swift 3.2

extension UIView {

    func roundCorners(corners:UIRectCorner, radius: CGFloat) {

        DispatchQueue.main.async {
            let path = UIBezierPath(roundedRect: self.bounds,
                                    byRoundingCorners: corners,
                                    cornerRadii: CGSize(width: radius, height: radius))
            let maskLayer = CAShapeLayer()
            maskLayer.frame = self.bounds
            maskLayer.path = path.cgPath
            self.layer.mask = maskLayer
        }
    }
}

用于调用此函数使用下面的行并提及要舍入的角落

self.myView.roundCorners(corners: [.topLeft, .topRight, .bottomLeft, .bottomRight], radius: 8.0)