UIBezierPath:byRoundingCorners:不起作用

Posted

技术标签:

【中文标题】UIBezierPath:byRoundingCorners:不起作用【英文标题】:UIBezierPath: byRoundingCorners: doesn't work 【发布时间】:2015-08-10 12:02:46 【问题描述】:

我正在尝试将按钮的两个角变为圆形。这是我正在使用的代码。

let bezierSelectAllPath = UIBezierPath(roundedRect: selectAllButton.bounds, byRoundingCorners: UIRectCorner.BottomRight.union(UIRectCorner.TopRight), cornerRadii: CGSizeMake(4.0, 4.0))

        let maskSelectLayer = CAShapeLayer()
        maskSelectLayer.frame = selectAllButton.bounds
        maskSelectLayer.path = bezierSelectAllPath.CGPath
        selectAllButton.layer.mask = maskSelectLayer

我不明白为什么这不起作用。谁能给我解释一下?

【问题讨论】:

【参考方案1】:

最后这样做

[selectAllButton.layer addSublayer:maskSelectLayer];

而不是

selectAllButton.layer.mask = maskSelectLayer

您可以像这样设置按钮的角:

UIBezierPath * bezierSelectAllPath = [UIBezierPath bezierPathWithRoundedRect:button.bounds
                                            byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight
                                                  cornerRadii:CGSizeMake(4.0, 4.0)];

【讨论】:

如果我添加一个子层,我会得到一些奇怪的结果。按钮超出屏幕。我已经在做你在工会发布的第二件事了。出于某种原因,如果我使用 | 编译器会抛出错误运算符。

以上是关于UIBezierPath:byRoundingCorners:不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UIBezierPath 详解

UIBezierPath精讲

使用 UIBezierPath 时出错

UIBezierPath 阴影效果

iOS学习:CAShapeLayer与UIBezierPath动画

使用UIBezierPath绘制图形