我有UIImageView
我正在动态设置图片(来自网址)。图像可以具有任意尺寸/纵横比。我将contentMode
设置为Aspect Fill,并将图层的clipsToBounds
设置为YES
,并且显示正确。但是,我还想在图像视图下显示阴影。当我在图像视图的图层上设置阴影时,我需要将clipsToBounds
设置为NO
以显示阴影,这会导致视图中图像的出血部分被显示。如何保持图像视图大小不变(纵横填充)并同时启用阴影?
一个选项可能涉及创建图形上下文并将图像重新绘制到该上下文中,获得具有所需宽高比的图像并将该图像设置为我的图像视图的图像,但这会额外处理/浪费CPU / GPU和正常世界时间(特别是如果我有大量具有大图像的图像视图)。
另一个选项可能涉及创建与我的图像视图大小相同的空白视图,将其插入我的超视图中的视图下方,使用约束动态地将其附加到我的视图,以及在该视图的图层上启用阴影。这还涉及为阴影创建额外的视图。可能是比第一个更好/更有效的解决方案,但仍然是额外的工作(CPU方式)。
是否有任何选项不需要额外的工作,可以在我的条件下启用阴影和纵横拟合?
答案 0 :(得分:1)
我相信与您的第二种选择相比最优的一种解决方案是,
如果您希望仅显示图像并且没有任何userInteraction。您可以使用两个CALayer
实例来实现它。
如果您还想要用户互动,那么一个UIView
和一个CALayer
。
使用两个CALayer实例 - >
contents property
。以上是Apple建议的。用他们自己的话说 - >
如果你想要一个阴影但又想使用边界遮罩,你可以使用两层而不是一层。将蒙版应用于包含内容的图层,然后将该图层嵌入到与启用阴影效果完全相同的第二层内。
检查link。并搜索上述术语。