仅为屏幕上的视图设置动画

时间:2011-09-30 18:22:36

标签: iphone objective-c animation screen subview

所以我想在我的应用程序的视图之间进行转换,这些视图包含一个特殊的动画。简而言之,所述动画一个接一个地淡出您所在页面的每个子视图,然后继续下一个。显而易见的问题是,如果我在某些时候使用UIScrollView,我的动画会淡出整个滚动视图的内容,这将花费太长时间,而不仅仅是你在屏幕上看到的内容。这让我想到了我的问题:

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

提前致谢

2 个答案:

答案 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];
相关问题