当 UIImageView 接近 UIScrollView 的边缘时淡化它

Posted

技术标签:

【中文标题】当 UIImageView 接近 UIScrollView 的边缘时淡化它【英文标题】:Fade UIImageView as it approaches the edges of a UIScrollView 【发布时间】:2012-04-23 18:32:32 【问题描述】:

我的应用程序底部的图像上有一个 UIScrollView,它充当带有可以水平滚动的图标的停靠栏。而不是 UIScrollView 的粗糙边缘,我希望图标淡出以获得更美观的外观。作为 ios 开发的新手,我不知道这些选项是否有效:

    创建一个褪色的图像以用作滚动视图上的叠加层,以便 图标仅通过可见部分出现。 实际上改变 图像的 alpha 基于它们与中心的距离(或距 每个边缘)。

我怀疑第一个想法会是最简单的,但我想把它扔掉,以换取其他想法。

注意:我确实看过this 教程,但是该技术假定背景是纯色。如果我以编程方式执行此操作,我可能需要淡化单个图像。

【问题讨论】:

【参考方案1】:

您绝对可以按照 #2 的方式实现一些东西。这将类似于教程描述的内容。然而,alpha 过渡不会像使用教程中提到的渐变层或使用图像那样平滑,因为整个图标将具有相同的 alpha。差异的可辨别程度取决于图标的大小。较小的图标,很少有人能分辨出来。更大的图标区别会很明显。

你必须实现

(void)scrollViewDidScroll:(UIScrollView *)scrollView

滚动视图的委托类中的方法。每次滚动视图更改其内容的位置时,都会调用此方法。在此方法中,您可以调用其子视图并根据需要调整其 alpha。为了稍微优化它而不是调用所有元素的 alpha 调整,您可以只更新仍然部分/完全可见的子视图。

编辑:要确定要调整哪些视图,您将使用在上述方法中作为参数传递的 scrollView 的 contentOffset 属性。

【讨论】:

我最终得到了与你描述的类似的东西,所以我会给你分数。我最终使用了我发布的教程中的相同 CAGradientLayer,旋转了点,将边界设置为滚动视图,并将掩码应用于包含我所有图标的滚动视图中的容器。这最终完美地工作。我不需要触摸任何单独的图标 alpha 值。

以上是关于当 UIImageView 接近 UIScrollView 的边缘时淡化它的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 当文本字段在子视图内时,键盘上的 UIScroll 弹出到文本字段

以全分辨率从 UIScrollView 中捕获缩放的 UIImageView

使用 Swift、autolayout 和 SnapKit 使带有 UIImageView 的 UIScrollView 自动缩放内容

UIScroll 视图 + UIView + UITableview 问题

如何在滚动视图中将内容居中?

UIScroll 中心图像