【问题标题】:CALayer = Total lagCALayer = 总滞后
【发布时间】:2013-01-30 19:23:43
【问题描述】:

所以我有一个滚动视图,一侧有 10 个按钮。总是当我滚动到那个页面时,我会得到很多糟糕的表现。然后我注意到是 CALayer 造成了延迟!我用过

button.layer.cornerRadius = 25;
button.layer.clipsToBounds = YES;

上网一搜,发现可以用

button.layer.shouldRasterize = YES;

它应该工作得更好。但它只是降低了分辨率,并没有提高性能。所以我尝试在 GIMP 中剪掉边缘,但是当我将它们添加到 XCode 时,它​​们被填充为白色!所以,请告诉我,有没有什么方法可以让我在不表现不佳的情况下通过 CALayer 或不通过 CALayer,这并不重要。任何帮助表示赞赏!

(ps.如果你需要完整的代码或图片,告诉我,我会添加它)

更新:

它只适用于 iPhone 4 的性能不佳,我在我的 iPad Mini 上尝试过,效果很好!

【问题讨论】:

  • 当我开始对圆角和阴影图层进行光栅化时,我确实看到了性能的显着提升,所以我不确定你为什么没有。但是,我认为添加以下内容将解决您的分辨率较低的问题:button.layer.rasterizationScale = [UIScreen mainScreen].scale;
  • 你没有使用阴影,是吗?如果是,那么最大的性能提升将来自设置阴影路径。
  • 感谢您的回答@Mathew,我将添加比例以栅格化并检查我是否使用阴影(我明天会这样做,因为我现在在我的 iPad 上)
  • @Mathew 光栅化比例有效,但我不确定如何禁用阴影。
  • 好吧,除非您首先启用阴影,否则您可能不会使用阴影。据我所知,默认情况下它们永远不会打开。但是,相关的图层属性是layer.shadowOpacitylayer.shadowRadiuslayer.shadowOffsetlayer.shadowPath,以及您已经在使用的光栅化代码。要禁用阴影,您只需设置shadowOpacity = 0

标签: iphone uibutton calayer


【解决方案1】:

您可以按照您的建议使用 GIMP 创建这些图像。成功的关键是将视图的opaque值设置为NO,意思是开启透明。但请记住,将视图的 opaque 值设置为 NO 会导致性能损失,尤其是在像 UIScrollViewCell 这样快速变化的视图中。

在你的情况下它足够快,在其他情况下可能不是。如果背景是单一颜色,最好在图像处理程序中使用该颜色作为背景颜色。 (并设置opaque = YES;

【讨论】:

  • 哦,我也意识到图像需要是 .png 。 .jpg 不起作用
  • 是的,因为 jpg 不支持透明度 ;D
猜你喜欢
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 2012-05-15
相关资源
最近更新 更多