【问题标题】:Why is making two corners round slower than make all corners round?为什么使两个角变圆比使所有角变圆慢?
【发布时间】:2013-03-04 01:06:16
【问题描述】:

编辑:语言更新以提高可读性。

我制作了一个带有 2 个圆角的图像视图,如下所示:

UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.photoImageView.bounds byRoundingCorners:UIRectCornerBottomLeft|UIRectCornerBottomRight cornerRadii:CGSizeMake(10, 10)];
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.path = maskPath.CGPath;
self.photoImageView.layer.mask = maskLayer;

但它比使用此代码制作所有角落要慢。

self.photoImageView.layer.cornerRadius = 10;

请问有人知道为什么以及如何改进我的“2 角”代码吗?

【问题讨论】:

    标签: ios layer


    【解决方案1】:

    您的代码正在向绘图添加另一个阶段。通常,背景会直接绘制(使用给定的cornerRadius)到目标,但在指定掩码的情况下,它会被绘制到临时表面,然后使用掩码复制到目标。

    没有任何内置功能仅用于将标准 CALayer 对象中的某些背景角倒圆。

    我确实想知道“慢”到底有多慢;这是过早的优化吗?

    【讨论】:

    • 实际上,我在 tableview 的单元格中使用了这些代码。所以,当我滚动我的表格视图时,我发现它看起来像是丢失了一些框架。所以我想修复它。
    • 在这种情况下,最好的解决方案可能是让图像放在角落上(特别是在与背景相匹配的纯色上四分之一圈的透明)。图像的渲染速度总是比矢量快。您也可以尝试 shouldRasterize,但我认为这对表格没有帮助(渲染时会做一些有趣的事情)
    猜你喜欢
    • 2011-05-13
    • 1970-01-01
    • 2013-02-15
    • 2016-01-26
    • 1970-01-01
    • 2021-07-24
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多