7

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

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

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

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

4

1 回答 1

2

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

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

如果您还希望用户交互也超过它,那么 oneUIView和 one CALayer

有两个 CALayer 实例->

  • 创建两个图层。使用 maskToBounds=YES 存储和显示图像的一层。您使用它的contents property.
  • 并将上面的图层作为 subLayer 添加到第二个 CALayer,您将在其上添加阴影和 clipToBounds=YES。

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

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

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

于 2014-03-20T12:54:20.563 回答