所以我想在我的应用程序的视图之间进行转换,这些视图包含一个特殊的动画。简而言之,所述动画一个接一个地淡出您所在页面的每个子视图,然后继续下一个。显而易见的问题是,如果我在某些时候使用UIScrollView,我的动画会淡出整个滚动视图的内容,这将花费太长时间,而不仅仅是你在屏幕上看到的内容。这让我想到了我的问题:
是否可以获取当前在屏幕上可见的UIView的所有子视图?
提前致谢
答案 0 :(得分:1)
您可以使用以下内容检查滚动视图的可见区域中的哪些视图:
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),其中所有的视图都与滚动视图的可见rect相交。然后,您可以仅为所述数组中的视图设置动画。
PS。我没有测试那段代码,但它应该给你一般的想法。
答案 1 :(得分:0)
循环遍历动画中的所有子视图并从superview中删除它们,然后在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];