Как сделать анимацию переворота между более чем двумя UIView?

У меня есть код анимации в классе, который расширяет UIView:

// Start Animation Block
CGContextRef context = UIGraphicsGetCurrentContext();
[UIView beginAnimations:nil context:context];
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:[self superview] cache:YES];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:1.0];

//int nextView = currentView + 1;
// Animations
[[self superview] exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
//And so I would do: [[self superview exchangeSubviewAtIndex:currentView withSubviewAtIndex:nextView];
//Doesn't work because curentView is not global... with each instance of a class it's reset to what it's instanciated to. 
//currentView++;

// Commit Animation Block
[UIView commitAnimations];

Этот код анимации отлично работает для двух представлений. Но я пытаюсь сделать это для многих просмотров. Я попытался добавить глобальную переменную (индекс nextview и индекс currentView), однако это не работает, поскольку каждый пользовательский класс представления имеет свой собственный экземпляр, и эти переменные не используются совместно.

Кто-нибудь знает, как я могу выполнить то, что я хочу сделать?

Спасибо!

Редактировать: я бы смог сделать это, если бы я мог использовать [self superview] для доступа к индексу текущего представления и следующего представления. Есть ли способы сделать это?


person rksprst    schedule 26.10.2008    source источник


Ответы (4)


У Apple есть неплохой учебник по переходам между представлениями здесь. Помимо того, как они их реализуют, вы также можете посмотреть на использование UINavigationController, который управляет кучей представлений и переходом между ними.

По сути, вам нужно управлять переходом в суперпредставлении, а не в представлении — суперпредставление может знать, кто в данный момент отображается, а кто следующий.

person Max Stewart    schedule 26.10.2008

Если у вас есть указатели на представления, между которыми вы пытаетесь переключиться, просто вызовите -removeFromSuperview для представления "от" и -addSubview:(представление "к") для суперпредставления. Переход не зависит от вызова какого-либо конкретного метода; более или менее любая форма подхода «поменять местами два вида» будет правильно анимирована.

person Noah Witherspoon    schedule 26.10.2008

Для тех, кто находит этот вопрос, кто поддерживает iOS 4.0 и выше, Apple предоставила встроенный API для этой задачи:

См.: transitionFromView:toView:duration:options: завершение:

person Matt James    schedule 04.03.2012

Я думаю, что связанный список представлений может быть тем, что вам следует подумать о реализации.

person Nick Stinemates    schedule 26.10.2008
comment
У меня есть массив представлений, которые я создаю в appdelegate, и я добавляю разные массивы в каждый контроллер представления вкладок. Затем контроллер использует этот массив для создания uiview с анимацией для переключения между ними. У меня проблемы с переключением анимации... - person rksprst; 27.10.2008
comment
Нет необходимости реализовывать связанный список. NSArray отлично подходит для этого. Если вас действительно беспокоит производительность, прочтите эту статью. - person Colin Barrett; 27.10.2008