CALayer:在图层内容上维护cornerRadius

Posted

技术标签:

【中文标题】CALayer:在图层内容上维护cornerRadius【英文标题】:CALayer: Maintaining cornerRadius on layer's contents 【发布时间】:2012-09-18 17:35:08 【问题描述】:

我一直在查看CALayer's documentation,似乎cornerRadius 只影响图层的背景,而不影响contents

有没有办法将圆角半径应用于整个 CALayer 而不会对性能造成很大影响?

我看到了有关口罩的建议,但这听起来很昂贵。我还看到了有关手动绘制contents 的建议,但我真的不知道从哪里开始。我对在上下文中渲染图像有所了解,但我不知道我应该如何将其绘制到具有角半径的CALayer 的内容视图上。我知道的最好的方法是继承CALayer 并覆盖drawInContext 方法并使用CGContextDrawImage

非常感谢所有帮助,但重申问题:“有没有办法将圆角半径应用于整个CALayer 而不会对性能造成很大影响?”

【问题讨论】:

【参考方案1】:

cornerRadius 确实适用于整个 CALayer,并且不会对性能造成很大影响。如果您没有看到圆角的内容,那是因为您忘记将masksToBounds 设置为YES。

【讨论】:

Eesh。你是对的。我想我没有做足够的研究。谢谢!虽然,这让我对为某些事情绘制 CALayer 的上下文感到好奇。 好!绘图很容易,你应该学会使用它。我的书教你如何:apeth.com/iosBook/ch15.html。如果您想要这样做,您可以轻松地通过圆角矩形形状裁剪任何绘图。但在这种情况下没有必要。 请记住 maskToBounds 将删除您拥有的任何阴影效果。 @kabram 是的,但 OP 担心性能,在这种情况下,头脑简单的阴影无论如何都被排除在外。如果您想在圆角矩形后面显示阴影,有一些巧妙有效的方法,例如我的示例所示:github.com/mattneub/Programming-iOS-Book-Examples/blob/master/…

以上是关于CALayer:在图层内容上维护cornerRadius的主要内容,如果未能解决你的问题,请参考以下文章

CALayer动画

在核心动画中移除或隐藏图层时移除不透明度和时间间隔

如何控制动画

IOS图层Layer学习笔记—— CALayer(上)

CALayer 的 position和anchorPoint属性

CALayer 详解