UIViewController yöntemleri döndürmek

oy
17

Ne nesne dipatching sorumludur UIViewControllerrotasyon yöntemi çağrıları, yani:

  • shouldAutorotateToInterfaceOrientation:
  • willRotateToInterfaceOrientation:duration:
  • willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:
  • willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:
  • didRotateFromInterfaceOrientation:

Ben öyle hayal UIApplication(ama belki AppDelegate veya UIWindow).

Bir sonraki soru, nesne hangi biliyor nasıl UIViewControllerkonuşacak?

Nasıl ki biliyor UIViewControllerpencerenin subview onun görünümü vardır?

Aktif setleri Gönderebileceğiniz bir mesaj ya da (bazı nesnenin) ayarlayabileceğiniz bir özellik var mı UIViewControlleruygulaması için?

Oluştur 14/02/2009 saat 00:50
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
13

O görünüyor UIApplicationetkin görünüm denetleyicisi bir mesaj gönderdiği için.

Ama nasıl View Controller örneği bu mesajları alır?

Mesaj, görünüşüdür eklenmiştir birinci görünümü denetleyicisi iletilir UIWindowörneği.

Bu 3 temel senaryolar aşağı kaynar:

  1. Olan görünüşüdür doğrudan ilave edilir ViewController UIWindow örneği (tek görünüşüdür uygulaması)

  2. Navigasyon göre uygulama navigasyon Kontrol, daha sonra seyir kontrolörü aktif görünümlere mesaj denetleyicisine aktarır.

  3. bir sekme çubuğu göre uygulamasında sekme çubuğu Kontrol daha sonra sekme çubuğu kontrol aktif görünümlere mesaj düğmeyi (veya aktif gezinti kontrol) görüntülemek iletir.

Birden manzaralı bir uygulama geliştirmenin, ancak Navigasyon denetleyicisi veya Sekme Bar denetleyicisi KULLANMAYIN eğer olacak sorundur. İçinde ve dışında görüşlerini takas olursa UIWindowelle Örneğin, güvenilir bir bu mesajları almaz. Bu bunun gibi nakleder benzer: iPhone viewWillAppear kovmuyorum

Sadece çoklu görünümler için Apple'ın kuralları kullanmak ve yoluna girecek. Bu biraz bir veya iki saat kaydeder Umut

Cevap 19/02/2009 saat 05:49
kaynak kullanıcı

oy
4

Nasıl UIViewController penceresinin subview onun bir görünümü olan biliyor?

UIViewController sınıf görüşlerinin ve bakış denetleyicileri arasındaki statik harita tutar. Bu harita CocoaTouch içindeki birkaç önemli yerlerde sorgulanır. Özel olarak, [UIView nextResponder] o sorgular ve bulunan kontrolör döndürür.

Ben UIWindow için rotasyon olayları iletmek için hangi kontrolör bilmek kök görünümü ile aynı arama yapar sanırım. Ben sökme şey ararken olacak bu sefere kontrol edecek. (Orada durumun nasıl çalıştığını anlamak için biraz zaman ters mühendislik CocoaTouch harcadım.)

Cevap 06/05/2009 saat 12:15
kaynak kullanıcı

oy
4

Bu You Ever Endişe etmeyin hepsi Magic. Camın önüne senin kontrolörün kök görünümü eklemek - veya bir sekme çubuğunu ya da sizin için bunu yapmak için navigasyon kontrolörü olsun - ve bu mesajları alırsınız.

(Eğer debugger ile etrafında karıştırmak Ama eğer ben aynı sonuca olabilir. Orada iç masaya denetleyiciye geri her kontrolörün görünümü haritalama çeşit ve mesajlar bu bağlantı dayanarak sevk edilmesi)


Güncelleme: Bu benim ilk bu cevabı yazdığında 2009 yılında gerçekten özel sihirli, ama iOS sonradan yapılacak değişiklikler kamu arkasında API'leri yaptık. Kök görünümü kontrolörü sayesinde artık erişilebilir UIWindow.rootViewControllermülkiyet ve soyundan görünüm denetleyicilerin ağaç kullanılarak oluşturulur UIViewController.childViewControllersözelliği.

Veli görünüm kontrolörleri oryantasyon değişiklikleri çocuklarını bildiren sorumludur. (Ben kök görünümü denetleyicisi bildirilir emin değilim, ama bir kesme noktası ayarlamak ve kendini bulabilirsin.) -shouldAutomaticallyForwardRotationMethodsYöntemi UIViewController sizin için yapacaktır karar verir. O döndürürse NO, kendi içinde ve bu konuda sorumluluk haline -willRotateToInterfaceOrientation:duration:, -willAnimateRotationToInterfaceOrientation:duration:ve -didRotateFromInterfaceOrientation:yöntemlerle.

Cevap 14/02/2009 saat 01:42
kaynak kullanıcı

oy
1

Ben de benzer bir sorun var.

Bir oyun yatay yön (sol ve sağ manzara her ikisi de) çalışan var.

Ben alkolsüz UIViewController kullanmak bir çok görüntülü uygulamasını yönetmek için, hiçbir şey yapmaz bir UIView ile bir kukla UIViewController yani. Sonra bir subview kendisine her UIView ekleyin.

Uygulamayı başlatırken, emülatör hızla dikey yönde döner ve ben 's çerçeve özelliği (0, -80320480) gibi bakarak benim görüş her biri olsun. görünümünde bu sonuçlar sağ tarafında bir 160 X 320 dikdörtgen kırpılmasını gösterir.

Her subview yöntemi yalnızca bir kez denir ve bu kök görünümüne eklendiğinde olur: shouldAutorotateToInterfaceOrientation - Ben fark ettik. Cihazı döndürürken Daha sonra, yalnızca kök görünümü yöntemi denir bulunuyor alır.

Şaşırtıcı değil, herhangi biri - willAnimate * yöntemler aramaları sadece subviews bu yöntemlerden herhangi anlamsızdır tanımlayan, kök görünümüne gönderilen eder, bu yüzden.

Bu yöntemler, her yönlendirme kabul gören bir yönelime değiştirilir denir - shouldAutorotateToInterfaceOrientation: yöntemi. bu yüzden orada benim subviews' çerçeve özelliği chnage düşündüm.

Bunu başarmak için, benim rootViewController sınıfında aşağıdaki yöntemi tanımlanır:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
    subview1_ViewController.view.frame = CGRectMake(0,0,480,320);
    subview2_ViewController.view.frame = CGRectMake(0,0,480,320);
        ...
}

Çerçeve özelliği güncelleştirilir neden anlamıyorum, ama bu geçici çözüm çalıştığını biliyorum.

Bu yardımcı olur umarım....

Cevap 25/03/2010 saat 05:20
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more