【问题标题】:Best and fastest way to round UIView's corners?最好和最快的方式来绕过 UIView 的角落?
【发布时间】:2011-12-26 01:06:57
【问题描述】:

我目前正在重写一个调整(在 SpringBoard 本身内部运行),因此(当然)流畅性、速度和效率对我来说是最重要的事情,因为即使是最轻微的不必要的延迟也会花费远离用户体验。

所以我的问题是如何以最小的延迟绕过视图的角落。

显而易见的是:

view.layer.cornerRadius = value;
view.layer.masksToBounds = YES;

但是我听说使用 layer.mask 设置 CALayer 蒙版更快?如果是这样,这两种解决方案中哪一种最好?:https://stackoverflow.com/a/4930166/458205

这段代码使用了遮罩,但是遮罩层也使用了cornerRadius,所以这实际上更快吗?

CALayer *maskLayer = [CALayer layer];
maskLayer.cornerRadius = radius;
// set the mask
self.view.layer.mask = maskLayer;

或者上述链接的解决方案 1 或 this answer 会更有效吗?

我知道我多次引用另一个问题,但是该问题是关于仅掩盖 2 个角(这会引发一些不同的解决方案),但我要求最有效的方法是让 0.6 屏幕大小的视图滚动为圆角尽可能平滑(如此图)。

【问题讨论】:

  • 它刚刚从我的脑海中浮现,但你不能只继承 UIView 吗?
  • @Ravi 是的,但是我将在子类中使用哪种方法?这是我的问题。

标签: iphone objective-c ios performance calayer


【解决方案1】:

您需要设置 rasterizationScale 以及 view.layer.shouldRasterize。

我通常这样做:

view.layer.shouldRasterize = YES;
view.layer.rasterizationScale = [[UIScreen mainScreen] scale];

如果您不设置 rasterizationScale,它将始终默认为 1 的比例(在这种情况下为非视网膜)以进行光栅化。

对我来说,这通常使我的滚动性能与 UITableView 的相当。

【讨论】:

    【解决方案2】:

    第一个 sn-p 效率更高,因为圆角本身就是一个掩码。 要提高圆角的性能,请使用: view.layer.shoudRasterize = YES;

    【讨论】:

    • 试过这个,但它并没有提高性能,它只是让视图非高清
    • JomanJi 你也需要设置CALayer的rasterizationScale属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2020-08-15
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多