Swift UILabel UIView等切半角或圆角遇到的问题

项目中遇到一个小小的问题,给一个UIView的左上和右上角分别添加圆角,其他角不动。


本来是写个方法传入角度和要切的哪个角就行了

/// 部分圆角
    /// - Parameters:
    ///   - corners: 需要实现为圆角的角,可传入多个
    ///   - radii: 圆角半径
    func corner(byRoundingCorners corners:UIRectCorner, cornerRadii: CGFloat) {
        let maskPath = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: cornerRadii, height: cornerRadii))
        let maskLayer = CAShapeLayer()
        maskLayer.frame = self.bounds
        maskLayer.path = maskPath.cgPath
        self.layer.mask = maskLayer
    }
whiteView.corner(byRoundingCorners: [UIRectCorner.topLeft,UIRectCorner.topRight], cornerRadii: 10)

然而,上面的whiteView是xib上拖出来的,死活看不到想要的效果,出来的效果就是上面那张图,少切了一个角!

真是太诡异了

在设置圆角的View里又重新调用了一下

 self.layoutIfNeeded()

然而,还是没用

继续尝试,寻思着切圆角的方法跟画图有关,难道要写在DrawRect方法里?

于是添加如下代码:

override func draw(_ rect: CGRect) {
        super.draw(rect)
        whiteView.corner(byRoundingCorners: [UIRectCorner.topLeft,UIRectCorner.topRight], cornerRadii: 10)
    }

运行出来了效果,两个角都切了。

思考:为什么调用layoutIfNeeded方法没有效果而重写draw方法有效?

原因:layoutIfNeeded方法刷新视图并重新加载layoutSubViews方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值