UIView анимация не работает - PullRequest
4 голосов
/ 27 марта 2010

У меня есть следующий код для анимации UIView:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelegate:self];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:mapView.view cache:NO];
[self addSubview:detailView];
[mapView removeFromSuperview];
[UIView commitAnimations];

Это работает, когда я не добавляю detailView. То, что на самом деле происходит, является эквивалентом этого:

[self addSubview:detailView];
[mapView removeFromSuperview];

Ответы [ 4 ]

1 голос
/ 11 апреля 2010

Этот код не будет работать. Из документации Apple:

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

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

Таким образом, переход должен применяться к себе, а не к mapView, а ваши операции добавления / удаления выполняются в обратном порядке.

1 голос
/ 10 апреля 2010

Я видел ваш код в учебниках все время и никогда не работал на меня.Я всегда использую это:

UIViewController *mainViewController = [[YourMainViewController alloc] init];
UIViewController *viewControllerToSwitchTo = [[ViewControllerToSwitchTo alloc] init];

[mainViewController presentModalViewController:viewControllerToSwitchTo animated: YES];

Вы можете установить стиль изменения вида с помощью:

[setModalTransitionStyle:WhateverModalTransitionStyleYouWant];

, но убедитесь, что это идет до метода перехода.

1 голос
/ 27 марта 2010

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

см. Ссылку для setAnimationTransition: forView: cache:

вы также можете использовать CATransition на слое вида. а затем использовать анимацию слоя.

если вы хотите перевернуть новое представление, вы также можете использовать метод presentalModalViewController в uiviewcontroller.

0 голосов
/ 28 марта 2010

Мне пришлось установить графический контекст на UIGraphicsGetCurrentContext()

...