Как сделать анимацию переворачивания между более чем двумя UIViews? - PullRequest
5 голосов
/ 27 октября 2008

У меня есть код анимации в классе, который расширяет 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];

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

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

Спасибо!

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

Ответы [ 4 ]

5 голосов
/ 27 октября 2008

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

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

2 голосов
/ 27 октября 2008

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

1 голос
/ 04 марта 2012

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

См .: transitionFromView: toView: продолжительность: опции: завершение:

0 голосов
/ 27 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...