UIImageView阴影和方面填充在一起

Can*_*ğlu 6 calayer uiview uiimageview contentmode ios

我有一个UIImageView动态设置图像(从URL).图像可以具有任意尺寸/纵横比.我设置contentMode看点填充和视图的图层clipsToBoundsYES,它的正确显示.但是,我还想在图像视图下显示阴影.当我设置阴影图像视图的层上,我需要设置clipsToBoundsNO为阴影来显示,这会导致图像的出血部分从要被显示的视图.如何保持图像视图大小不变(纵横填充)并同时启用阴影?

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

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

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

san*_*thu 2

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

如果假设您只想显示图像而不对其进行任何用户交互。您可以使用两个CALayer实例来实现它。

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

有两个 CALayer 实例->

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

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

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

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