淡入/淡出整个视图除了一个子视图

3
我试图在Path应用程序中重新创建一种效果:当你点击照片/视频时,除了你刚才点击的那个视图变成全屏外,所有视图都会逐渐淡出。
我想知道这样的效果是如何实现的,因为如果你改变主视图的alpha值,所有子视图都会受到影响,包括你想保持可见的那个视图。如果你使用for循环来改变除照片之外的所有子视图的alpha值,那么背景色将保持不变。
我所能想到的唯一方法是遍历所有子视图并将其背景颜色设置为黑色。但我认为这不是非常干净的代码。
你觉得呢?
4个回答

4

为了讨论方便,我们考虑两个视图,一个是包含小图像网格的“缩略图”视图,另一个是在大小和位置上动画变化以填满屏幕的“详细信息”视图。

将这些视图分开考虑,动画变得更容易管理。在“缩略图”视图中点击一个项目会导致该视图逐渐消失,并在同一位置出现一个新的“详细信息”视图,其中包含被点击项目的副本,并动画变化至全屏。


严格来说,要获得路径效果,您需要删除图像视图并将其添加在顶部(而不是另一个副本)。它与框架分离,留下了原来“安装”图片的灰色背景。 - Prometheus

2

怎么样在所有的元素前面放置一个白色背景为0.5透明度的UIView(可以从0到0.5进行动画来实现你想要的淡入效果)。

然后,把你不想淡出的照片移到这个UIView的前面,这样它就不会受到影响。


1

这是我处理这个问题的方法。

  1. 确保在滚动视图不滚动时才能执行该操作(可选)
  2. 禁用滚动视图的滚动
  3. 使用UIView坐标转换方法("convertRect:fromView:"和"convertRect:toView:")计算图像视图的新框架。新的目标父视图可以是应用程序的keyWindow,或者如果您愿意,可以是另一个全屏子视图。由于涉及到几个视图(框架视图、可能的表格单元格内容视图、滚动视图等),因此有多种方法可以实现这一点,建议规划一个测试,以帮助您快速了解预期和实际坐标转换。
  4. 从其父视图中删除图像视图
  5. 将图像视图添加到转换后的矩形中,以便添加到全屏视图或keyWindow中
  6. 添加动画效果(背景透明度为0,图像视图进行调整大小(可选旋转))。对于先前持有图像视图的视图控制器,将alpha = 0进行动画处理将会淡出到黑色,只要有另一个具有黑色背景的视图即可。您还可以在视图控制器中托管2个视图,一个是纯黑色的UIView,另一个(在黑色视图上方)将托管您想要淡出的所有视图。然后,您只需要更改该视图的alpha值,所有子视图都会淡出。

0
也许你可以放一个小拇指,当用户点击它时,改变所有视图的 alpha 值,并添加一个具有相同图像的新视图,分辨率最高。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接