淡入/淡出除一个子视图外的整个视图

时间:2012-02-09 17:46:28

标签: iphone objective-c ios

我尝试在路径应用中重新创建一个效果:当您点按照片/视频时,所有视图都会淡入,但您刚拍过的视图会全屏显示。

我想知道如何完成这样的效果,因为如果更改主视图的alpha,所有子视图都会受到影响,包括您想要保持可见的子视图。如果你做一个for循环来改变照片的所有子视图的alpha,背景将保持其颜色。

我能想到的唯一方法是在所有子视图中执行for循环并将背景颜色设置为黑色。但在我看来,它并不是真正干净的代码。

您怎么看?

4 个答案:

答案 0 :(得分:4)

为了便于讨论,让我们考虑两个视图,包含较小图像网格的“缩略图”视图,以及填充屏幕的动画大小和位置的“细节”视图。

通过分别考虑这些视图,动画变得更容易管理。单击“缩略图”视图中的项目会使该视图淡出,并且包含所单击项目副本的新“详细信息”视图将显示在同一位置并显示为全屏幕。

答案 1 :(得分:2)

如果将UIView放在具有0.5 alpha的白色背景的前面(这可以从0-> 0.5动画以获得您想要的淡入淡出效果)。

然后,移动你不想褪色的照片,这样就不会受到影响。

答案 2 :(得分:1)

以下是我将如何解决这个问题。

  1. 确保仅在滚动视图不滚动(可选)时才能执行操作
  2. 禁用滚动视图上的滚动
  3. 使用UIView坐标转换方法(“convertRect:fromView:”和 “convertRect:toView:”)来计算图像视图的新帧。新目标超级视图可以是应用程序的keyWindow,也可以是其他全屏子视图(如果您愿意)。有很多方法可以做到这一点,因为涉及多个视图(框架视图,可能的表格单元格内容视图,滚动视图等),所以我建议您计划一个可以帮助您快速了解的测试当预期和实际坐标翻译是。
  4. 从超级视图中删除图片视图
  5. 将转换后的rect中的图像视图添加到全屏视图或keyWindow
  6. 添加动画(背景为alpha = 0,图像视图调整大小(并可选择旋转))。只要在其后面有另一个带有黑色背景的视图,以前保持图像视图的视图控制器的动画alpha = 0就会淡化为黑色。您还可以在视图控制器中托管2个视图,一个是纯黑色UIView,另一个(在黑色顶部)将托管您想要淡化的所有视图。然后,您只需要更改该视图上的alpha并且其所有子视图都将淡出。

答案 3 :(得分:0)

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