iOS-如何为阿凡达创建图像分层



我正在使用一个应用程序,该应用程序允许用户从提供的列表中选择各种身体/头发/毛/衣服/眼睛/etctles来创建自己的2D化身(类似于Bitmoji(图片。到目前为止,我通过将几个UIimageView在彼此的基础上分层,每个UiimageViews都代表一个可自定义的元素。用户可以从两个集合视图中选择元素类型,然后选择元素图像,然后选择要分配给每个UIImageView的图像。例如,如果用户单击一个集合视图中的头发类型类别,则可以从另一个集合视图中的数字列表中选择以更改HairtypeimageView的照片。

我认为这种方法的问题很明显:它需要大量的uiimageViews,这似乎很慢。另外,最重要的是,我们要求用户能够更改每个元素的基本颜色,而无需更改其阴影或边框。到目前为止,我能够做到这一点的唯一方法是让App存储每个元素的两个图像,一个用于底层填充颜色,另一个用于顶层阴影和边框,然后使用

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

更改填充颜色。该解决方案有效,但是它使该应用程序的效率更低,因为这意味着我现在必须具有两倍的UIimageViews(每个可自定义元素(,此外,我必须创建两倍。

有一个更好的方法来做到这一点吗?

我会考虑制作一个覆盖 drawRect的UIImageView子类:调用以绘制阿凡达的各个层。这将允许具有能够绘制整个头像的单个UIImageView实例。

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

对我来说,这个决定可能取决于您需要做多少图像操作。如果这只是"堆叠"各种图像彼此之间的问题,并且更改了几种颜色,我可能会使用UIimageView子类。

对于这两种方法,请看一下https://developer.apple.com/library/content/documentation/2ddrawing/coneptual/drawingprintingios/handlingimages/handlingimages/images.htmages.html

最新更新