UIImageView阴影和方面填充在一起

时间:2014-02-25 11:02:37

标签: ios uiview uiimageview calayer contentmode

我有UIImageView我正在动态设置图片(来自网址)。图像可以具有任意尺寸/纵横比。我将contentMode设置为Aspect Fill,并将图层的clipsToBounds设置为YES,并且显示正确。但是,我还想在图像视图下显示阴影。当我在图像视图的图层上设置阴影时,我需要将clipsToBounds设置为NO以显示阴影,这会导致视图中图像的出血部分被显示。如何保持图像视图大小不变(纵横填充)并同时启用阴影?

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

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

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

1 个答案:

答案 0 :(得分:1)

我相信与您的第二种选择相比最优的一种解决方案是,

如果您希望仅显示图像并且没有任何userInteraction。您可以使用两个CALayer实例来实现它。

如果您还想要用户互动,那么一个UIView和一个CALayer

使用两个CALayer实例 - >

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

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

  

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

检查link。并搜索上述术语。