Перевернуть iPhone

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

Я хочу переключаться между двумя UIViews.

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

Перевороты запускаются кнопками на самих представлениях.

- (IBAction)showMoreInfo:(id)sender
{
    UIView *moreInfo = self.flipView;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:2.0];
    [UIView setAnimationBeginsFromCurrentState:NO];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];

    UIView *parent = self.view.superview;
    [self.view removeFromSuperview];

    [parent addSubview:moreInfo];

    [UIView commitAnimations];

}



- (IBAction)showLessInfo:(id)sender
{
    UIView *lessInfo = self.view;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:2.0];
    [UIView setAnimationBeginsFromCurrentState:NO];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.flipView cache:YES];

    UIView *parent = self.flipView.superview;
    [self.flipView removeFromSuperview];

    [parent addSubview:lessInfo];

    [UIView commitAnimations];

}

person Community    schedule 09.05.2009    source источник


Ответы (3)


Вероятно, это связано с тем, что вы не используете представление контейнера в качестве представления перехода. См. документацию на странице setAnimationTransition:forView:cache:

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

  1. Начните блок анимации.
  2. Установите переход на представление контейнера.
  3. Удалите подпредставление из представления контейнера.
  4. Добавьте новое подпредставление в представление контейнера.
  5. Зафиксируйте блок анимации.

Попробуйте использовать self.view.superview в представлении перехода анимации showMoreInfo:

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

person Jason Harwig    schedule 09.05.2009
comment
Уважаемый Джейсон, когда я выполняю self.view.superview, он отлично переворачивается в showMoreInfo:, но перелистывание назад (с использованием showLessInfo:) теперь ведет себя неправильно: он просто показывает начальный вид без анимации. Помещение self.view.superview в этот метод не помогает. Я уверен, что я просто очень глуп, но просто дайте мне еще одну строчку кода, и я был бы очень благодарен. - person ; 11.05.2009
comment
Прости за глупость. Я вставил self.flipView.superview, и теперь все в порядке! - person ; 11.05.2009

Можете ли вы использовать свой MainWindow (UIWindow) в качестве представления контейнера как наследственность UIWindow от UIView?

Также в iPhone 3.0 появилась транзакция flip с помощью метода presentModalViewController:

CustomViewController *vc = [[CustomViewController alloc]
    initWithNibName:@"CustomViewController" bundle:nil];

vc.delegate = self;

// The magic statement. This will flip from right to left.
// present the modal view controller then when you dismissModalViewController
// it will transition flip from left to right. Simple and elegant.
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

[self presentModalViewController:vc animated:YES];

[vc release];
person Sukima    schedule 21.01.2010
comment
чтобы удалить контроллер представления с помощью этого метода, используйте: - person Alex; 25.08.2010

После iOS 4.0 вы можете переключаться между представлениями следующим образом:

[UIView transitionFromView:sourceView toView:destinationView duration:0.35f options:UIViewAnimationOptionTransitionFlipFromRight completion:^(BOOL finished) {
    NSLog(@"I just flipped!");
}];

Как упомянул Джейсон, вам нужно, чтобы это происходило в представлении контейнера.

person Ben Flynn    schedule 07.08.2013