SORU
26 EKİM 2011, ÇARŞAMBA


Nasıl ekranın oryantasyon bağlı yükseklik ve genişlik için?

Program aracılığıyla başvurum geçerli yükseklik ve genişlik belirlemek için çalışıyorum. Ben bunu kullanın:

CGRect screenRect = [[UIScreen mainScreen] bounds];

Ama bu 320 genişliğinde ve 480, cihaz yatay veya dikey olup olmadığına bakılmaksızın yüksekliği verir. Nasıl belirleyebilirimmevcutbenim ana ekran genişliği ve yüksekliği (cihaz yönlendirmesini üzerine yani bağımlı)?

CEVAP
26 EKİM 2011, ÇARŞAMBA


UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation) gibi bir şey yönünü belirlemek için kullanın ve boyutlarına uygun şekilde kullanabilirsiniz.

ANCAK, bir yönlendirme sırasında değiştirmek gibi UİViewController

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
                                 duration:(NSTimeInterval)duration

Bu UİApplication. statusBarOrientation hala will bir olay işleyicisi içinde olduğun için () değişmemiş gibi eski yönü işaret edecektir beri oryantasyon toInterfaceOrientation geçirilen kullanın.

Özet

Bu birkaç ilgili yayınlar vardır, ama bunların her biri için size göstermek için bir şey gibi görünüyor

  1. [[UIScreen mainScreen] bounds] Boyutlar almaya bak
  2. Size ne olduğunu kontrol edin, ve
  3. Durum çubuğu yüksekliği için gösterilen (varsa) hesabı

Bağlantılar

Çalışma Kodu

Ben genelde bu kadar ileri gitme, ama benim ilgi kırılmak. Aşağıdaki kodu hile yapmak gerekir. UİApplication bir Kategoriye yazdım. Bu currentSize veya willRotateToInterfaceOrientation:duration: içinde UİViewController dediğiniz hangi belirli bir yönünü, boyutunu almak için sınıf yöntemleri ekledim.

@interface UIApplication (AppDimensions)
 (CGSize) currentSize;
 (CGSize) sizeInOrientation:(UIInterfaceOrientation)orientation;
@end

@implementation UIApplication (AppDimensions)

 (CGSize) currentSize
{
    return [UIApplication sizeInOrientation:[UIApplication sharedApplication].statusBarOrientation];
}

 (CGSize) sizeInOrientation:(UIInterfaceOrientation)orientation
{
    CGSize size = [UIScreen mainScreen].bounds.size;
    UIApplication *application = [UIApplication sharedApplication];
    if (UIInterfaceOrientationIsLandscape(orientation))
    {
        size = CGSizeMake(size.height, size.width);
    }
    if (application.statusBarHidden == NO)
    {
        size.height -= MIN(application.statusBarFrame.size.width, application.statusBarFrame.size.height);
    }
    return size;
}

@end

Kod kullanımı basit arama [UIApplication currentSize]. Ayrıca, yukarıdaki kodu çalıştırdım, çalışıyor diye biliyorum ve raporları tüm yönlerde doğru yanıtları. Ben durum çubuğunu faktör unutmayın. İlginç olan durum çubuğu yükseklik ve genişlik MİN çıkarmak zorunda kaldım.

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

Diğer düşünceler

Bu UİWindow at rootViewController emlak bakarak boyutlarını alma hakkında gidebilirsiniz. Geçmişte bu baktım ve bir dönüşüm döndürmek zorunda raporlar dışında, benzer şekilde dikey ve yatay olarak aynı boyutlara bildirildi

(gdb)[[[[UİApplication sharedApplication] keyWindow]po rootViewController] görüş

&; lt UİLayoutContainerView: 0xf7296f0; Kare = (0 0; 320 480); = [0, -1, , 0, 0, 0 1]dönüştürme; autoresize = W H; katman = <CALayer: 0xf729b80>>

(gdb)[[[[UİApplication po sharedApplication] keyWindow] rootViewController] görüş

&; lt UİLayoutContainerView: 0xf7296f0; Kare = (0 0; 320 480); autoresize W = H; katman = <CALayer: 0xf729b80>>

Değil emin nasıl app çalışır, ama değilsen kullanarak bir gezinti kontrol falan hiç bir UİView altında ana Görünüm ile maksimum yükseklik / genişlik üst ve büyür / küçülür ile üst. Yapabilirsin o zaman: [[[[[[[UIApplication sharedApplication] keyWindow] rootViewController] view] subviews] objectAtIndex:0] frame]. Oldukça yoğun bir hat üzerinde görünüyor, ama fikir olsun.

Ancak... hala Özet altında yukarıdaki 3 adımda yapmak daha iyi olurdu. UİWindows ile dalaşmaya ve garip şeyler, bir UİAlertView UİApplication bu UİAlertView oluşturulan yeni bir UİWindow noktaya keywindow değişeceğini gösteren gibi görürsün. Kim biliyordu? Bir hata keyWindow güvenerek ve bu şekilde değiştirdiğini keşfetmek bulduktan sonra yaptım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ampisound

    Ampisound

    12 Kasım 2006
  • David MeShow

    David MeShow

    10 EKİM 2006
  • EminemMusic

    EminemMusic

    9 ŞUBAT 2007