Если вы используете iOS 4.0 или более позднюю версию, следующее будет делать именно то, что вы хотите (я только что проверил это)
NewView *myNewView = [[NewView alloc] initWith.....];
[UIView transitionFromView:self.view toView:myNewView.view duration:1 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];
//[self.navigationController pushViewController:myNewView animated:NO];
[myNewView release];
РЕДАКТИРОВАТЬ: я немного изменяю вышеуказанный код (ничего нового, просто закомментирую навигационный контроллер, потому что в этом нет необходимости).
Таким образом, есть несколько способов сделать это (чтобы отслеживать следующий вид), но это самый простой из всех, что я могу придумать. Вы уже можете переключиться с просмотра 1 на 2, поэтому я собираюсь объяснить, как получить от 2 до 10 (или сколько вам нужно).
По сути, переход представления длится слишком долго для viewDidLoad
, чтобы перехватить вызов, чтобы перейти к следующему представлению. Поэтому нам нужно настроить таймер, который ожидает и отправляет метод для переключения позднее. Так что это код, который вы видите в представлении 2 (и 3 и 4 и т. Д.).
- (void)viewDidLoad {
// this gets called before animation finishes, so wait;
self.navigationController.delegate = self;
// you will need to set the delegate so it can take control of the views to swap them;
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(switchView) userInfo:nil repeats:NO];
}
Я жду только 1 секунду, пока не вызову метод switch, но если вы много загружаете в свои представления, вы можете подождать немного дольше. 1,5 секунды должно быть более чем достаточно, но вы можете поиграть с этим, чтобы увидеть, где это работает и не работает.
Далее необходимо вызвать следующее представление в методе switchView
.
- (void)switchView {
NextView *myNextView = [[NextView alloc] initWith ... ];
[UIView transitionFromView:self.view toView:nextView.view duration:1 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];
[nextView release];
}
Это отлично сработало для меня. Просто чтобы убедиться, что я получаю новые представления, я назначил теги каждому представлению и добавил UILabels в качестве подпредставлений в методе viewDidLoad
каждого представления, и в каждом из них отображался номер его представления. Надеюсь, это то, что вам нужно. Я уверен, что у вас есть более сложные вещи, которые вам нужно будет сделать, но это даст вам анимацию и логику, необходимые для получения желаемого образа. (примечание: viewDidAppear
не вызывается при этом, поэтому может потребоваться вызвать его вручную с viewDidLoad
, если вам действительно нужно его использовать, но в остальном он работает нормально)