Анимировать только те виды, которые на экране - PullRequest
0 голосов
/ 30 сентября 2011

Итак, я хочу, чтобы переход между представлениями моего приложения состоял из специальной анимации. В двух словах, указанная анимация затухает в каждом отдельном подпредставлении страницы, на которой вы находитесь, одна за другой, прежде чем переходить к следующей. Очевидная проблема заключается в том, что если в какой-то момент я использую UIScrollView, моя анимация просто затухнет в содержимом всего прокрутки, что займет слишком много времени, а не только в тех, что вы видите на экране. Что подводит меня к моему вопросу:

Возможно ли получить все подпредставления UIView, которые в данный момент видны на экране?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 30 сентября 2011

Вы можете проверить, какие виды находятся в видимой области представления прокрутки, с помощью чего-то вроде этого:

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) со всеми представлениями, которыепересечения пересекаются с видимым прямоугольником вида прокрутки.Затем вы можете анимировать только представления в указанном массиве.

PS.Я не тестировал этот код, но он должен дать вам общее представление.

0 голосов
/ 30 сентября 2011

Переберите все подпредставления в анимации и удалите их из суперпредставления и перед 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];
...