Различия между [UIView transitionWithView ...] и [UIView transitionFromView ...] - PullRequest
4 голосов
/ 21 ноября 2011

В настоящее время у меня есть представление, которое содержится в представлении. Контроллер основного представления (родительское представление) имеет свойство, которое подключается в конструкторе интерфейса к подпредставлению. Подвид содержит кнопку. Я хочу, чтобы кнопка перевернула подпредставление, оставив основной вид неподвижным. В данный момент у меня в IBAction есть следующий код для кнопки:

[UIView transitionWithView: self.subViewFront
                  duration: 1.0
                   options: UIViewAnimationOptionTransitionFlipFromTop
                animations: nil
                completion: nil];
[UIView commitAnimations];
[[self view] addSubview: self.subViewBack;

Этот код прекрасно работает, однако я заметил следующее при просмотре справки по API от Apple:

Использование методов в этом разделе не рекомендуется в iOS 4 и более поздних версиях. Вместо этого используйте методы анимации на основе блоков.

Следуя этому совету, я попытался использовать следующий код:

[UIView transitionFromView: self.subViewFront
                    toView: self.subViewBack
                  duration: 1.0
                   options: UIViewAnimationOptionTransitionFlipFromTop
                completion: nil];

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

1 Ответ

4 голосов
/ 08 мая 2012

У меня была та же проблема (вместо анимирования родительского элемента), но она была решена путем добавления двух представлений (subViewFront и subViewBack) вместо представления контейнера.

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

UIView *container = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease];
[self.view addSubview:container];

...

[container addSubview:self.subViewFront];
[container addSubview:self.subViewBack];
...