在 Swift 中显示不规则形状哪个更好?

Which is a better option for displaying irregular shapes in Swift?

首先让我展示一下我在 ViewController:

中设置了这个 UIImageView

每一行都包含一个 UIButton 作为 body 部分。如果我 select 一个特定的按钮,它会适当地搜索我。

我想做的是,当用户点击(但不释放)按钮时,我希望适当的 body 部分显示如下:

我可以使用 2 个选项来实现:

  1. UIBuzierPath class 进行绘制,但每个 body 部分需要大量的反复试验和许多重叠的形状才能像上一个问题中那样很好地拟合:
  2. 从原始图像中裁剪出突出显示的 body 部分,并将其放置在 UIImageView 上,具体取决于哪个 UIButton selected。然而,每个 body 部分只有一张图片,但仍然比选项 1 更简单。

现在,我的问题不是如何去做,而是在 cpu 处理和内存分配方面哪个是实现此目标的更好选择?

换句话说,我只是担心我的应用程序滞后以及占用应用程序大小的存储空间。我不关心完成它需要多少时间,我只想确保我的应用程序在尝试绘制所有形状时不会卡顿。

谢谢。

Xcode 内置了测试功能(还有性能测试),所以最好的方法是对一个 body 部分尝试两种方法并比较结果。

您可能会发现第二种方法有点慢,但不足以引起用户注意,同时更容易实现。

快速开始测试here

性能测试here

这些方法中的任何一种都不太可能对 CPU 或内存产生任何重大影响。特别是如果在选项 2 中,您只需使用剪切图像的 alpha 通道并使它们成为半透明的有色叠加层。 CPU/GPU-wise,这两种方法都不会使您低于 60fps 的最大屏幕刷新率(这是用户会注意到性能问题的方式)。在内存方面,将十几个贝塞尔曲线路径或单通道图像加载到 RAM 中与您可用的相比应该是九牛一毛,特别是在过去 5 年发布的任何 iOS 设备上,除非是 Apple Watch .

记住"premature optimization is the root of all evil"。除非您已经看到性能问题或有充分的理由相信它们会存在,否则您的时间最好花在其他问题上,例如使代码更具可读性、简洁性、可重用性等。请参阅维基百科中 "When to Optimize" 上的这个简短部分: https://en.wikipedia.org/wiki/Program_optimization#When_to_optimize