UIImage查看阴影和方面填充在一起



我有一个UIImageView,我正在动态设置图像(从 URL)。图像可能具有任意大小/纵横比。我正在将contentMode设置为"方面填充",并将视图图层的clipsToBounds设置为YES,并且它显示正确。但是,我还想在图像视图下显示阴影。当我在图像视图的图层上设置阴影时,我需要将clipsToBounds设置为NO以显示阴影,这会导致显示视图中图像的出血部分。如何保持图像视图大小不变(宽高比填充)并同时启用阴影?

一种选择可能涉及创建图形上下文并将图像重新绘制到该上下文中,获取具有我所需纵横比的图像并将该图像设置为图像视图的图像,但这是额外的处理/浪费了 CPU/GPU 和正常世界的时间(特别是如果我有大量具有大图像的图像视图)。

另一种选择可能涉及创建与图像视图大小相同的空白视图,将其插入超级视图中的视图下方,使用约束将其动态附加到视图,并在该视图的图层上启用阴影。这也涉及为阴影创建一个额外的视图。可能比第一个更好/更有效的解决方案,但仍然是额外的工作(CPU 方面)。

在我的条件下,是否有任何不需要额外工作的选项可以同时启用阴影和方面拟合?

我认为与您的第二个选项相比,一个最佳解决方案是,

假设您只想显示图像并且没有任何用户交互。您可以使用两个CALayer实例来实现它。

如果您希望用户交互也超过它,那么一个UIView和一个CALayer

使用两个 CALayer 实例 ->

  • 创建两个图层。一个图层存储和显示您的图像,maskToBounds=YES。 您可以使用图像contents property将图像设置为此图层。
  • 并将上面的图层作为子图层添加到第二个 CALayer 上,您将在其上添加阴影和剪辑到边界 = YES。

以上是苹果公司建议的。用他们自己的话说——>

如果需要阴影,但又想使用边界遮罩,请使用两个图层而不是一个图层。将蒙版应用于包含内容的图层,然后将该图层嵌入到启用了阴影效果的完全相同大小的第二个图层中。

检查此链接。并搜索上述术语。

最新更新