2012-05-28 13 views
5

# if ve # define deyiminin birçok tanımını okudum.
ama sadece hata aşağıda yorum olarak tanımlayan on line "bir önişlemci ifadesinde başında geçersiz simgesi" ile, okuduğum yolunu kullanmaya çalıştı:#define veya #if deyim hatası

#import <Foundation/Foundation.h> 
#import <UIKit/UIKit.h> 

#define is_ipad   (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
#define is_ipad_hd  ((is_ipad == 1 && [UIScreen mainScreen].bounds.size.width > 1024) ? YES : NO) 
#define is_iphone_hd ([UIScreen mainScreen].bounds.size.width > 480 ? YES : NO) 
#define device_width 480.0f 
#define device_height 320.0f 

#if (is_ipad_hd == YES) // Error here 
    #define device_width  = 2048.0f 
    #define device_height  = 1496.0f 
#endif 

o çalışır Neden basit öğreticiler ve daha karmaşık bir şey denediklerinde bu şeyler gerçekleşir!

+4

Üzerinde hızlı bir şekilde ulaşabileceğimden çok daha iyi biçimlendirme içerebilir .... Önişlemci yönergeleri derleme öncesi değerlendirilir; öyleyse çalışma zamanı bilgileri üzerinde çalışamazlar. (C nesnesini bilmiyorum ama [UIScreen ana ekran] .bounds.size.width 'bir çalışma zamanı gibi geliyor ...) –

+0

Tamam, şimdi anlıyorum. Cihazın ekran boyutunu nasıl belirleyebilirim? Yavaşlığım için özür dilerim, çünkü ingilizcede bazı araştırma teknikleri çevirmek zor ve hayal ettiğim gibi görünüyor. –

cevap

4

Bunlar, önişlemci yönergeleridir, bu nedenle [UIScreen mainScreen] yöntemlerine ve derlemede tanımlanan diğer tüm nesnelere erişiminiz yoktur!

1

Makro değerlendirme derleme zamanında gerçekleşir. Bununla birlikte, (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) veya [UIScreen mainScreen], ancak çalışma zamanında yorumlanabilir. Bunun ötesinde, sizin için kirli işinizi yapmak için ekran boyutuna güvenmemeniz gerekir. Hızlı bir googling bu geri geldi ben de C önişlemcisine usta değilim ancak

BOOL isiPad = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad; 
BOOL isHD = [[UIScreen mainScreen] scale] == 2.0; 

if (isiPad) { 
    if (isHD) { 
    // retina iPad 
    } else { 
    // non-retina iPad 
    } 
} else { 
    if (isHD) { 
    // retina iPhone/iPod touch 
    } else { 
    // non-retina iPhone/iPod touch 
    } 
} 
+0

Bu yüzden bir kez ayarlamak istiyorum, bu yüzden # define ve # if kullanmak istedim. Örnek olarak basit bir başlık kullanmanın ve her sahnede işlem yapmanın mümkün olup olmadığını bilmiyorum. Eğer bu konuda konuştuğum şey buysa. Teşekkür ederiz –

+0

Önerinizi takip ettim, fakat her zaman değişkenleri kontrol etmek ve ayarlamak her zaman yanılmıyor mu? Daha basit bir yolu var mı? –

0

burada başkalarıyla Katılıyorum: yerine kullanıcı arayüzü deyim güvenerek edilmeli ve ana ekranın ölçeği

ifade, sıkı kısıtlamalara tabi bir tamsayı türünde bir C ifadesidir. source.