2017-05-05 63 views
1

我正在开发一个应用程序,允许用户通过从提供的列表中选择各种身体/​​头发/服装/眼睛/等样式来创建自己的2D头像(类似于Bitmoji)的图像。到目前为止,我通过将多个UIImageView叠加在一起,每个代表一个可定制的元素。用户可以选择要分配给每个UIImageView的图像,方法是首先从两个集合视图中选择元素类型,然后选择元素图像。例如,如果用户在一个集合视图中单击头发类型类别,则他们可以从另一个集合视图中的数字列表中选择以更改hairTypeImageView的照片。iOS - 如何为图像创建图层

我认为这种方法的问题很明显:它需要大量的UIImageViews,这似乎使应用程序变慢了很多。此外,除此之外,我们还要求用户能够更改每个元素的基本颜色,而不更改其阴影或边框。到目前为止,我已经能够做到这一点的唯一方法是让应用程序为每个元素存储两个图像,一个用于底层填充颜色,另一个用于顶层图层和边框,然后使用

fillColorImageView.image = [fillColorImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 
[fillColorImageView setTintColor:color]; 

更改填充颜色。这种解决方案的工作原理,但它使应用程序效率更低,因为这意味着我现在必须有UIImageViews的数量的两倍(每个可定制的元素两个),另外我必须创建双倍的艺术品,应用程序必须存储双倍的图像。

有没有更好的方法来做到这一点,我失踪了?

回答

1

我想看看如何创建一个UIImageView子类来覆盖drawRect:调用绘制化身的各个层次。这将允许有一个能够绘制整个头像的单个UIImageView实例。

第二种选择是使用核心图形渲染你的头像。如果您需要更好地控制输出,这是一个不错的选择,因为Core Graphics框架提供了丰富的渲染工具和功能套件。

对我来说,这个决定很可能会归结为你需要做多少图像处理。如果只是将各种图像“叠加”在一起并改变几种颜色,我可能会使用UIImageView子类。

对于这些方法的执行,看看https://developer.apple.com/library/content/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/HandlingImages/Images.html

+0

其实我刚刚发现类似的东西太多,其工作:遍历UIImages的阵列,在UIGraphicsImageContext吸引他们,然后将所得的情况下保存为新UIImage的。这解决了一切,但颜色编辑,我不认为我能解决。 – Grambo