2011-09-11 23 views
5

Alt görünümlerim dikey ve yatay yönde olduğunda farklı yerleşimlere sahip. Düzen, süper görüntünün çerçevesine dayanır ve önemsiz değildir (otomatikleştirme yayları ve dikmeler kullanılarak gerçekleştirilemez).İçinde doğru çerçeveyi alma willRotateToInterfaceOrientation

Sorun şu ki, willRotateToInterfaceOrientation sırasında subViews çerçevesini değiştiriyorsam, animasyon doğrudur, ancak frame superView hala eski yönelimin karesidir.

Eğer didRotateFromInterfaceOrientation sırasında subViews değiştiriyorsam, çerçeve superView gerçekten doğru olanı, ancak çerçeve değişikliği yalnızca dönen animasyondan sonra gerçekleşir ve iyi görünmüyor.

Yön değiştirirken altView'lerin çerçevelerini değiştirmenin doğru yolu nedir?

+0

Her alt sayfada çerçeve değiştirme bölümünü ele alacak bir yöntem yazarak bu sorunu çözdüm. Ana görünümün çerçevesini willRotateToInterfaceOrientation olarak ayarlayacak ve ardından CGFrameMake işlevini kullanarak yeni bir benzer çerçeve oluşturacak ve her bir alt Görünüme ileteceğim. Benim için çalıştı .... yardımcı olup olmadığını kontrol edin. – Mohammad

+0

Cevabınızı tam olarak anlamadım. WillRotateToInterface içinde rotasyon henüz gerçekleşmediği için superView çerçevesini hala bilmiyorum. Sorun bu. – adamsiton

+0

Alt görünümleri döndürmek için superView çerçevesini kullanmıyorum. Rotasyondan sonra superView'ın karesi için neyin değeri olacağını hesapladım ve sonra hesaplamaya dayanarak yeni bir CGRect yapıp bunu her bir SubView'ın handleOrientation yöntemine ilet. Eğer rotasyondan sonra superView'ın çerçevesi için neyin değeri olacağını hesaplayamıyorsanız, yukarıdakiler sizin için çalışmayacaktır. – Mohammad

cevap

3

layoutSubviews'u geçersiz kılmayı deneyebilirsiniz. Burada, altyazıları RotateFromInterfaceOrientation öğesini yapacak/kullanmadan uğraşmadan mevcut yönlendirmeye göre düzenleyebilirsiniz. Görünümler her eklendiğinde layoutSubviews çağrılır. Bu, çerçeve değişikliklerinizi animasyonla zamanlamanıza yardımcı olur.

HTH,

Akshay

+0

Ancak bu, tüm düzen mantığını ViewController'a değil View'a taşıdığım anlamına gelir. Şu anda subView düzeni UIViewController özelliklerine göre ayarlıyorum. Mantığı UIView'e taşımak UIView alt sınıfını almam ve tüm parametreleri bu özel alt sınıfa taşımam gerektiği anlamına gelir. Bu mantığın UIViewController'da değil UIView'de olması gerektiğinden emin değilim, ama deneyeceğim. – adamsiton

4

Bu fonksiyon görünümleri çerçeve rotasyondan değiştiği için gerekenler için çalışır ve özel animasyon durak yok.

-(void)willAnimateRotationToInterfaceOrientation (UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    float width = UIInterfaceOrientationIsPortrait(toInterfaceOrientation) ? [[UIScreen mainScreen] applicationFrame].size.width : [[UIScreen mainScreen] applicationFrame].size.height; 
//do something with the width now 
//or you can get the height the same way 
} 
İlgili konular