gpt4 book ai didi

ios - iOS上的圆形头像和性能问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:50:32 24 4
gpt4 key购买 nike

有没有什么方法可以绘制圆形的UIImage而无需执行以下任何操作?

  • Blending(Core Animation Instruments中的红色)
  • 屏幕外渲染(Core Animation Instruments中的黄色)
  • drawRect

  • 我试过了

    带有剪切路径的
  • drawRect。这太慢了。 (请参阅:http://developer.apple.com/library/ios/#qa/qa1708/_index.html)
  • 带maskLayer的
  • CALayer内容。这引入了屏幕外渲染。
  • UIImageView并设置cornerRadius和masksToBounds。这与#2具有相同的效果。

  • 我最后的选择是直接修改图像。有什么建议?

    最佳答案

    我使用blog.sallarp.com's rounded corners algorithm的变体。我将我的代码修改为仅在某些特定的角落,这是无缝集成的类别,但是该链接为您提供了基本概念。我认为这可以称为“屏幕外渲染”,这是您拒绝使用的技术之一,但我不确定。我从未见过任何可观察到的性能问题,但也许您遇到了一些特殊情况。

    您是否可以在图像视图的顶部叠加只有角的图像视图以显示圆角?

    或者,如果您担心由于圆角而导致的性能下降,那么为什么不让您的应用保存带有圆角的图像副本,那样您才第一次获得性能下降?这等效于您的“直接修改图像”的概念,但是要及时进行。

    更新:

    最重要的是,我不知道任何其他解决方案(除了我的笨拙想法之外,下面的第二点)。但是我做了一些实验(因为我正在处理类似的问题),并得出以下结论:

  • 如果在3GS或更高版本的设备上具有四舍五入的性能,则问题可能出在四角的舍入上。我发现,虽然它对3G上的UI产生了实质性影响,但在3GS上几乎没有引起注意,而在以后的设备上则是不可察觉的。如果您从圆角看到性能问题,请确保这是四舍五入而不是其他问题。我发现,如果对先前缓存的图像进行即时的角四舍五入,则该四舍五入的影响可忽略不计。 (当我在缓存之前进行四舍五入时,UI就像丝绸一样光滑。)
  • 蒙版的替代方法是创建一个图像,该图像是圆角的倒置(即,它与角上的背景匹配,在要显示图像的位置透明),然后将此图像放在tableviewcell的前面图片。我发现,要使其正常工作,我必须使用一个自定义单元格(例如,创建自己的主图像视图控件,我自己的标签以及此角罩图像视图控件),但是它绝对比即时更好圆角取整算法的调用。如果您试图在分组表中倒圆角,则此方法可能无法很好地工作,但是如果您只希望圆角的外观而不实际倒圆,这是一个可爱的小技巧。
  • 如果您由于使用分组表格视图而倒圆角,并且不喜欢将图像溢出到圆角上,则只需将第一行图像的左上角和最后一行图像的左下角四舍五入图片。这将减少对角取整逻辑的调用。看起来也不错。
  • 我知道您没有问这个问题,但是关于表视图中图像的其他可能的性能问题包括:
  • 如果您在imageWithContentsOfFile中使用类似cellForRowAtIndexPath(不缓存)的方法,则肯定会遇到性能问题。如果您不能利用imageNamed缓存(无论如何,有些人会抱怨),您可以自己缓存图像,既可以及时存储,也可以预先在辅助线程上预先加载它们。如果您的表格视图引用了以前加载的图像,并且您会看到性能上的巨大改进,那么此时圆角的圆角可能还是可能不会成为问题。
  • 其他导致性能问题的原因包括使用的图像尺寸不适合表视图的图像视图。大图像会对性能产生巨大影响。
  • 底线,
  • 在这里杀死自己之前,请确保舍入是唯一的性能问题。如果您在现代硬件上遇到问题,则尤其如此,因为根据我的经验,影响可以忽略不计。另外,如果有一个更广泛的解决方案会更好,那么为此放松太多睡眠将是一种耻辱。使用未优化大小的缩略图的图像,无法缓存图像等都会对性能产生重大影响。
  • 如果可能的话,请提前将图像的各个角落弄圆,并且UI将是最佳的,并且视图控制器代码将变得简洁而漂亮。
  • 如果您无法提前进行操作(例如,因为要实时下载图像),则可以尝试角落遮盖图像技巧,但这仅在某些情况下有效(尽管非分组表视图是其中之一)他们)。
  • 如果您必须随UI进行圆角处理,请在单独的队列中进行圆角处理,并且不要阻塞UI。
  • 关于ios - iOS上的圆形头像和性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11320858/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com