UIView圆角处理的最佳和最快方法是什么?

7

我目前正在重写一个插件(在SpringBoard中运行),因此(当然)流畅度,速度和效率对我来说非常重要,因为即使是最微小的不必要的延迟也会影响用户体验。

所以我的问题是如何在最小的延迟下圆角视图。

显而易见的方法是:

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

然而,我听说使用layer.mask设置CALayer遮罩会更快?那么这两种方案中哪个最好?:https://dev59.com/2m445IYBdhLWcg3wdqEL#4930166 此代码使用遮罩,但是遮罩层也使用cornerRadius,所以这实际上是否更快?
CALayer *maskLayer = [CALayer layer];
maskLayer.cornerRadius = radius;
// set the mask
self.view.layer.mask = maskLayer;

那么,上面链接中的解决方案1或this answer哪个更有效呢?

我知道我引用了另一个问题多次,但是那个问题只涉及遮盖2个角落(这会产生几种不同的解决方案),但我正在询问如何以最有效的方式使0.6屏幕大小的视图尽可能平滑地滚动并具有圆角(就像这张图片一样)。 CardSwitcher Screenshot


这只是我脑海中的想法,但您不能仅从UIView中创建子类吗? - Ravi
1
@Ravi 是的,但是我在子类中应该使用哪种方法?这就是我的问题。 - Kyle Howells
2个回答

3

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

我通常会这样做:

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

如果您不设置rasterizationScale,则始终默认为1倍比例(在这种情况下为非Retina),用于光栅化。对我来说,这通常使我的滚动性能与UITableView的性能相当。

1

第一个代码片段更高效,因为圆角本身就是一个遮罩。

要提高圆角的性能,请使用:

view.layer.shouldRasterize = YES;


尝试过这个,但它并没有提高性能,只是使视图变得非高清。 - JomanJi
JomanJi,你还需要设置CALayer的“rasterizationScale”属性。 - Kyle Howells

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接