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

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

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

更改填充颜色。此解决方案有效,但它使应用程序效率更低,因为这意味着我现在必须将UIImageViews数量增加一倍(每个可自定义元素两个),再加上必须创建一倍的图稿,并且应用程序必须存储一倍的图像。

有没有更好的方法可以做到这一点,而我却错过了?

最佳答案

我将看一下如何制作一个覆盖drawRect:调用的UIImageView子类,以绘制化身的各个图层。这将允许有一个能够绘制整个头像的UIImageView实例。

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

对我来说,决定可能取决于您需要进行多少图像处理。如果仅是将各种图像彼此“堆叠”并更改几种颜色的问题,我可能会选择UIImageView子类。

对于这两种方法,请看看https://developer.apple.com/library/content/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/HandlingImages/Images.html

关于ios - iOS-如何对图像进行分层以创建头像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43811214/

10-12 00:32
查看更多