只动画只是在屏幕上的视图

问题描述:

所以我想在我的应用程序的视图,包括一个特殊的动画组成的过渡。简而言之,所述动画在继续下一步之前逐渐淡化您所处页面的每个子视图。显而易见的问题是,如果我在某个时候使用UIScrollView,我的动画只会淡出整个滚动视图的内容,这会花费太长时间,而不仅仅是您在屏幕上看到的内容。这使我想到我的问题:只动画只是在屏幕上的视图

是否有可能获得当前在屏幕上可见的UIView的所有子视图?

由于在动画提前

你可以检查哪些视图滚动视图的像这样的东西可视区域:

CGRect visibleArea = CGRectMake(scrollView.contentOffset.x, scrollView.contentOffset.y, scrollView.view.frame.size.width, scrollView.view.frame.size.height); 
NSMutableArray *visibleViews = [[NSMutableArray alloc] init]; 
for(UIView *view in scrollView.subviews){ 
    if(CGRectIntersectsRect(visibleArea, view.frame) 
    [visibleViews addObject:view]; 
} 

的结果将是,你有一个数组(visibleViews)与各方面的意见,其是Rects与滚动视图的可见Rect相交。然后您可以只动画数组中的视图。

PS。我没有测试该代码,但它应该给你一个总体思路。

+0

谢谢,我会试试! – kopproduction

遍历所有子视图,并从上海华删除它们,和commitAnimations之前,然后更改VC:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:1.0f]; 
for (UIView *view in self.view.subviews) { 
    [view removeFromSuperview]; 
} 
[UIView commitAnimations]; 
[self.navigationController performSelector:@selector(pushViewController:) withObject:viewControllerToSwitchTo afterDelay:1.0f]; 
+0

谢谢你的回答,但是在写我的问题时我犯了一个错误......重要的一点是,它并不是一次动画子视图,而是一个接一个地动画,这就是为什么它会花费太长时间UIScrollView的。编辑。但如果您仍然有任何建议,我会很高兴听到他们! – kopproduction

+0

哦,我明白你的意思了。我认为你不能这样做。我认为你需要手动删除其超级视图中的所有视图,方法是为每个视图键入'[view ... removeFromSuperview]'一次。 –