【问题标题】:UIImageView shadow and aspect-filling togetherUIImageView 阴影和方面填充在一起
【发布时间】:2014-03-27 13:23:33
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ios uiview uiimageview calayer contentmode


    【解决方案1】:

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

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

    如果您还希望通过它进行用户交互,那么一个UIView 和一个CALayer

    有两个 CALayer 实例->

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

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

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

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

    【讨论】:

    • 不错的解决方案,但我实际上需要进行交互。这将是拖动视图的效果(通过阴影将被拖动的视觉提示“覆盖”其他视图)
    猜你喜欢
    • 2018-10-14
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 2022-07-23
    相关资源
    最近更新 更多