SORU
16 EYLÜL 2012, Pazar


Nasıl iPhone 5 (geniş ekran cihazlar) tespit etmek için?

Sadece böyle büyük mükafat 4.5 GM geliştirdim ve şimdi '4"' görünümü denetleyicisi boyut film şeridinde. Retina uygulayabilirsiniz öğrendim

Şimdi istersem oluşturmak için bir uygulama üzerinde çalışan iPhone 4 ve 5, elbette inşa etmem gerek, her pencere iki kez, ama aynı zamanda var olup olmadığını algılamak için kullanıcı bir iPhone ile 3.5" ya da 4" ekran ve sonra da geçerli görünümü.

Nasıl böyle bir şey yapayım?

CEVAP
16 EYLÜL 2012, Pazar


Öncelikle tüm görüşlerini yeni bir ekran uyumu, ne de farklı ekran boyutları için farklı görünümlerini kullanmak için yeniden etmemelisin.

Kullanımıotomatik boyutlandırmaiOS, görüşleriniz çok özelliklerini ayarlamak ve herhangi bir ekran boyutuna uyum sağlayabilir.

Bu çok zor değil, okumak hakkında some documentation. Size çok zaman kazandıracak.

iOS 6 da bu konuda yeni özellikler sunuyor, ama bu şu anda hala NDA kapsamında değildir.< / ^ br . Eğer erişebiliyorsanız Apple Geliştirici API changelog web sitesi okuduğunuzdan emin olun.

Edit: İOS 6 şimdi olduğu gibi, AutoLayout yeni yetenekleri kontrol.

Eğer gerçekten iPhone sadece screen size güvenebileceğiniz 5, algılamak gerekiyor " dedi.

[ [ UIScreen mainScreen ] bounds ].size.height

İPhone 5 ekran 568 yüksekliğe sahiptir.< / ^ br . Bir makro, tüm bunları kolaylaştırmak için hayal:

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

Epsilon fabs kullanımı H2CO3 tarafından yapılan açıklamalarda işaret edildiği gibi hassas hataları önlemek için burada yüzen puan karşılaştırırken,,.

Üzerinde şimdi/else cümleleri standart olarak kullanabilmek için:

if( IS_IPHONE_5 )
{}
else
{}

Edit - daha İyi algılama

Bazı insanlar tarafından belirtildiği gibi, bu sadece yapargeniş ekran bir tespitgerçek bir iPhone 5 değil.

İPod touch sonraki sürümleri belki de böyle bir ekrana sahip olacak, makrolar başka bir set kullanabiliriz.

Diyelim ki ilk makro IS_WIDESCREEN Yeniden Adlandır:

#define IS_WIDESCREEN ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

Ve model tespiti makrolar ekleyelim:

#define IS_IPHONE ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPhone" ] )
#define IS_IPOD   ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPod touch" ] )

Bu şekilde, bir iPhone modeli var temin edebilirizVEbir geniş ekran ve IS_IPHONE_5 makro tanımlamak:

#define IS_IPHONE_5 ( IS_IPHONE && IS_WIDESCREEN )

Ayrıca unutmayın, belirtildiği gibi tarafından @LearnCocos2D, bu makrolar çalışmaz Eğer uygulama optimize iPhone 5 ekran (eksik Default-568h@2x.png resim), ekran boyutu yine de 320x480 böyle bir durumda.

Bu non-optimize app bir iPhone 5 tespit etmek için yeterli bir neden göremiyorum gibi bir sorun olabilir sanmıyorum.

ÖNEMLİ - 8 desteği iOS

İOS 8, UIScreen sınıfı bounds özelliği şimdi de yansıtırcihaz yönlendirme.
Yani açıkçası, önceki kod kutunun dışında çalışmaz.

Sipariş bunu düzeltmek için, sadece yeni nativeBounds emlak, yerine bounds gibi olmayacak değişim yönünü, ve bu temel üzerinde bir portre çekim modu.
nativeBounds boyutları piksel olarak ölçülür, iPhone 5 için yüksekliği olacak unutmayın1136yerine 568.

Ayrıca iOS 7 veya daha düşük bir hedef varsa, iOS 8 öncesinde nativeBounds arama uygulaması kilitlenmesine olarak algılama özelliği kullanmak için emin olun:

if( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] )
{
    /* Detect using nativeBounds - iOS 8 and greater */
}
else
{
    /* Detect using bounds - iOS 7 and lower */
}

Bir önceki makrolar şu şekilde uyarlayabilirsiniz:

#define IS_WIDESCREEN_IOS7 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
#define IS_WIDESCREEN_IOS8 ( fabs( ( double )[ [ UIScreen mainScreen ] nativeBounds ].size.height - ( double )1136 ) < DBL_EPSILON )
#define IS_WIDESCREEN      ( ( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] ) ? IS_WIDESCREEN_IOS8 : IS_WIDESCREEN_IOS7 )

Ve açıkçası, eğer iPhone 6 ya da 6 Artı tespit etmek gerekiyorsa, ilgili ekran boyutları kullanın.

Son bir not

Görüş ve önerilerinizi bu yazıya dahil edilmiştir.< / ^ br . Herkese teşekkürler.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MotoManTV

    MotoManTV

    10 Aralık 2009
  • TecNoob

    TecNoob

    15 AĞUSTOS 2013
  • The Brister

    The Brister

    10 ŞUBAT 2008