iOS-如何分层图像以创建化身

iOS-如何分层图像以创建化身,ios,objective-c,uiimageview,uiimage,avatar,Ios,Objective C,Uiimageview,Uiimage,Avatar,我正在开发一个应用程序,允许用户通过从提供的图像列表中选择各种身体/头发/衣服/眼睛等样式来创建自己的2D头像(类似于Bitmoji)。到目前为止,我是通过将几个UIImageView层叠在一起来实现这一点的,每个UIImageView代表一个特定的可定制元素。用户可以通过首先从两个集合视图中选择元素类型,然后选择元素图像,来选择要分配给每个UIImageView的图像。例如,如果用户单击一个集合视图中的“头发类型”类别,则可以从另一个集合视图中的数字列表中进行选择,以更改hairTypeIma

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

我认为这种方法的问题是显而易见的:它需要大量的UIImageView,这似乎会大大降低应用程序的速度。此外,除此之外,我们还要求用户能够更改每个元素的基色,而无需更改其着色或边框。到目前为止,我唯一能做到这一点的方法是让应用商店为每个元素提供两个图像,一个用于底层填充颜色,另一个用于顶层着色和边框,然后使用

fillColorImageView.image = [fillColorImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[fillColorImageView setTintColor:color];
更改填充颜色。这个解决方案是可行的,但它使应用程序的效率更低,因为这意味着我现在必须拥有双倍的UIImageView(每个可定制元素两个),另外我必须创建双倍的艺术品,应用程序必须存储双倍的图像


有没有更好的方法来实现这一点,我还没有找到?

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

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

对我来说,这个决定很可能取决于你需要做多少图像处理。如果只是将不同的图像“堆叠”在一起并改变一些颜色,我可能会选择UIImageView子类


对于这两种方法中的任何一种,看看

我实际上也发现了一些类似的方法:迭代UIImage数组,在UIGraphicsImageContext中绘制它们,然后将生成的上下文保存为新的UIImage。这解决了除颜色编辑之外的所有问题,我认为我无法解决。