【问题标题】:Rounded UIScrollView Performance圆润的 UIScrollView 性能
【发布时间】:2011-05-18 20:19:28
【问题描述】:

这在 iPhone 4 和 3GS 上运行良好:

scrollView.layer.cornerRadius = 11;
scrollView.layer.masksToBounds = YES;

但在 iPhone 3G 和 iPod touch 2nd gen 上,滚动真的很生涩。我知道有一些技巧可以提高CALayer 阴影的性能,例如(将shouldRasterize 设置为YES 和shadowPath 属性),CALayer 的cornerRadius 有什么类似的方法可以做吗?

【问题讨论】:

  • hmm.. 我的理解是 cglayers 是在 GPU 上渲染的。可能是您的问题的根源。
  • 您是否建议任何解决方法?我很清楚旧设备的 GPU 速度要慢得多。难道没有办法获得相同的结果,但使用 CPU?
  • 我认为问题在于它是使用 CPU 而不是 GPU 来渲染圆角。据我所知,在旧设备上获得活泼圆角的唯一方法是避免cornerRadius,而是在drawRect: 中进行剪切绘图或在UIImage 中绘图。
  • 我很好奇,你试过让视图不透明吗?
  • 不确定这是否适合您,但值得一读 stackoverflow.com/questions/2595267/…

标签: iphone performance ios uiscrollview calayer


【解决方案1】:

滚动视图后面的内容(圆角下显示的内容)是纯色还是静态的?如果是这样,你应该能够通过在滚动视图的角上覆盖“角”图形——在它们的中心是半透明的,在它们的边缘是不透明的(用你的背景颜色或其他什么)来获得更好的性能。在您的内容上合成四个 11x11 图像的成本将大大低于剪辑它的成本。

【讨论】:

  • 就像我在问题的 cmets 中所说的,我在滚动视图后面的内容不仅是图像,而且是动态的。因此,每次更改背景图像时,我都必须在运行时生成 4 个圆角图像。没有办法使用 CGContextClip() 来处理 CoreGraphics 吗?
  • 对不起,我没有读完所有的 cmets。据我所知,CALayers 已经使用 Core Graphics 剪辑来渲染他们的角落。您可能必须在运行时生成四个角图像,可能是通过使用超层的-renderInContext: 方法,然后将其切割出来。
【解决方案2】:

CALayers 的渲染太慢了(尤其是在旧设备上),在游戏等中使用不是很好。你可以切换到 UIImages 或 cocos2d sprites,另一种选择是创建自己的图层类使用 OpenGL,虽然那不是那么简单。希望其中一个选项对您有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2011-11-28
    • 1970-01-01
    相关资源
    最近更新 更多