只动画只是在屏幕上的视图
所以我想在我的应用程序的视图,包括一个特殊的动画组成的过渡。简而言之,所述动画在继续下一步之前逐渐淡化您所处页面的每个子视图。显而易见的问题是,如果我在某个时候使用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。我没有测试该代码,但它应该给你一个总体思路。
遍历所有子视图,并从上海华删除它们,和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];
谢谢你的回答,但是在写我的问题时我犯了一个错误......重要的一点是,它并不是一次动画子视图,而是一个接一个地动画,这就是为什么它会花费太长时间UIScrollView的。编辑。但如果您仍然有任何建议,我会很高兴听到他们! – kopproduction
哦,我明白你的意思了。我认为你不能这样做。我认为你需要手动删除其超级视图中的所有视图,方法是为每个视图键入'[view ... removeFromSuperview]'一次。 –
谢谢,我会试试! – kopproduction