2015-03-19 66 views
1

我知道改變基於屏幕大小的應用程序並不是一個好主意,但我試圖修改相機並使用自定義覆蓋圖像,因此我需要知道屏幕大小。有檢測到使用宏屏幕尺寸一堆解決方案等我用這:使用此代碼檢測iPhone屏幕大小可以嗎?

-(void)detectPhone{ 

    CGFloat width; 
    width= [[UIScreen mainScreen] bounds].size.width; 

    if(width==320) { 

     CGFloat height; 
     height = [[UIScreen mainScreen] bounds].size.height; 

     if(height==480) { 

      NSLog(@"iPhone 4/4s"); 
     } 

     else { 

      NSLog(@"iPhone 5"); 
     } 

    } 

    else if (width==375) { 


     NSLog(@"iPhone 6"); 

    } 


    else { 

     NSLog(@"iPhone 6+"); 

    } 



} 

這有什麼錯用此方法,或者它是行不通的任何情況呢?通過模擬器似乎很好。任何指針將不勝感激。由於

+0

您是否僅將屏幕尺寸用於計算圖像邊界或功能差異? – 2015-03-19 10:01:17

回答

3

其優良的這種方式,但你是比較浮動,所以我會盡量避免使用==爲,而是使用>

+0

即使這個提示在一般情況下也是有用的,浮點數的對象可以表示每個「小」整數值,所以OP的代碼應該與其相關。 – 2015-03-19 10:00:02

0

我認爲你將與iOS8上的問題。從iOS8 [UIScreen mainScreen] .bounds
是面向接口的(查看WWDC 2014的會話「View Controller Advancements in iOS 8」),這意味着在iOS8的橫向模式下,高度和寬度相反。

您可以創建一個幫助有類似的代碼如下:

CGRect bounds = [UIScreen mainScreen].bounds; 
if (([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) { 
    bounds.size = CGSizeMake(bounds.size.height, bounds.size.width); 
    //Your code to detect the device 
    ... 

} 
+0

我的應用程序僅限於肖像模式。 – Kex 2015-03-19 09:06:06

1

我用這個:

 
    #define IS_IPHONE [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone 
    #define PJ_SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width) 
    #define PJ_SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height) 
    #define PJ_SCREEN_MAX_LENGTH (MAX(PJ_SCREEN_WIDTH, PJ_SCREEN_HEIGHT)) 
    #define PJ_SCREEN_MIN_LENGTH (MIN(PJ_SCREEN_WIDTH, PJ_SCREEN_HEIGHT)) 
    #define IS_HEIGHT_GTE_568 PJ_SCREEN_MAX_LENGTH >= 568.0f 
    #define IS_RETINA ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0)) 
    #define IOS7_DELTA_HEIGHT (([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) ? 20:0) 
    #define IS_IOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) 
    #define DEVICE_SIZE [[[[UIApplication sharedApplication] keyWindow] rootViewController].view convertRect:[[UIScreen mainScreen] bounds] fromView:nil].size 

如果你想檢查設備型號,看看:Determine device (iPhone, iPod Touch) with iPhone SDK

0

你應該只有一次屏幕,然後你可以在整個應用程序中使用它(只要你需要)。爲此,您可以在AppDelegate.h具有可變CGSize deviceSize並在您的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsAppDelegate.m在這種方法的第一線,即可獲得該設備的大小是這樣,

deviceSize = [[UIScreen mainScreen] bounds].size; 

,你可以這樣定義,

功能
- (CGSize) sizeOfDevice { 
    return deviceSize; 
} 

它添加AppDelegate.h這樣,

- (CGSize) sizeOfDevice; 

那麼你可以使用它與你的委託對象。

+0

''你應該只有一次屏幕''這是不正確的。如果屏幕尺寸發生變化會怎樣?當你旋轉時它會。 – Popeye 2015-03-19 09:39:11

+0

是的,你是對的。但OP說[這](http://stackoverflow.com/questions/29140151/is-it-okay-to-use-this-code-to-detect-the-iphone-screen-size/29140998?noredirect=1 #comment46504722_29140442) – Hemang 2015-03-19 09:47:32

+0

雖然這個聲明仍然是錯誤的。你不需要考慮它是否在旋轉,因爲如果他們已經正確地設置了應用程序,它將被鎖定在肖像,如果他們只想要肖像,所以你不必擔心。 – Popeye 2015-03-19 09:51:13

相關問題