2008-10-26 21 views
69

Şu anda böyle bir UIViewController görüntülüyorsunuz:Bir model UIViewController'ın animasyon stilini nasıl değiştirebilirim?

[[self navigationController] presentModalViewController:modalViewController animated:YES]; 

ve bunu şöyle gizlemek:

[self.navigationController dismissModalViewControllerAnimated:YES]; 

Animasyon "aşağıdan yukarı doğru" ... sonra geri kaydırın. Animasyon stilini nasıl değiştirebilirim? İçeri girip çıkabilir miyim?

Şerefe!

cevap

60

Marcus Zarra SDK posta listesindeki bu büyük bir çözüm yayınladı:

UIViewController *controller = [[[MyViewController alloc] init] autorelease]; 
UIViewAnimationTransition trans = UIViewAnimationTransitionCurlUp; 
[UIView beginAnimations: nil context: nil]; 
[UIView setAnimationTransition: trans forView: [self window] cache: YES]; 
[navController presentModalViewController: controller animated: NO]; 
[UIView commitAnimations]; 

saygısız ve sayfa curling için geçişler vardır.

UIViewController *controller = [[[MyViewController alloc] init] autorelease]; 
controller.view.alpha = 0.0; 
[navController presentModalViewController: controller animated: NO]; 
[UIView beginAnimations: nil context: nil]; 
controller.view.alpha = 1.0; 
[UIView commitAnimations]; 

Ancak, ne muhtemelen istediğiniz bir crossfade olduğu ya da en azından bir zincirleme geçiş: Eğer solma ayarlanır varsa, yeni görünümün alfa ayarlamayı deneyebilirsiniz. UINavigationController yeni bir görünüme geçtiğinde, eski olanı kaldırır. Bu etki için, mevcut UIViewController'ınıza yeni bir görünüm eklemekten ve alfalarını zamanla düşürmekten daha iyi olur.

Not: Uygulamanızda değilseniz, [kendi pencere] temsilci çalışmaz. Self.view.window'u kullanın, buna işaret etmek için user412500'ün gönderdiği teşekkürler.

iPhone 3.0+ için
+5

Bu eski! Aşağıdaki Simo Salminen cevabına bakınız! MrDatabase bu –

194

, temel bir crossfade böyle yapmanın en kolay olduğu: kod en azından öyle olduğunu yoldur (

çalışması için

modalViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[[self navigationController] presentModalViewController:modalViewController 
               animated:YES]; 
+2

Works mükemmel değiştirmelisiniz! Geçişin, sunulmakta olan ve kendiliğinden olmayan viewController'a uygulanması gerektiğini farketmem birkaç saniye sürdü. – looneydoodle

+0

Bunu, Arabirim Oluşturucu'da, bir modal segue ekleyerek ve örneğin 'Çapraz Çözme'ye geçişi ayarlayarak yapabilirsiniz. – paulvs

2

Sipariþte [self.view.window] olmalıdır ios 3.2) içinde

8

iOS 4'te solma alfa için güncellemek için:

modalController.view.alpha = 0.0; 
[self.view.window.rootViewController presentModalViewController:modalController animated:NO]; 
[UIView animateWithDuration:0.5 
       animations:^{modalController.view.alpha = 1.0;}]; 
+1

Bu benim için harika çalıştı. – zekel

İlgili konular