iphone - وايفون - معلومات عن ايفون 5s




كيف للكشف عن اي فون 5(أجهزة عريضة)؟ (16)

لقد قمت بالترقية للتو إلى XCode 4.5 GM ووجدت أنه يمكنك الآن تطبيق حجم Retina '4' على جهاز العرض الخاص بك في لوحة العمل.

الآن ، إذا كنت أرغب في إنشاء تطبيق يعمل على كل من iPhone 4 و 5 ، بالطبع يجب أن أبني كل نافذة مرتين ، ولكن يتعين علي أيضًا معرفة ما إذا كان المستخدم لديه iPhone مع شاشة مقاس 3.5 أو 4 بوصات ثم قم بتطبيق رأي.

كيف أفعل ذلك؟


  1. أضف "ملف Swift جديد" -> AppDelegateEx.swift

  2. إضافة ملحق إلى AppDelegate

    import UIKit
    extension AppDelegate {
         class func isIPhone5 () -> Bool{
             return max(UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height) == 568.0
        }
        class func isIPhone6 () -> Bool {
            return max(UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height) == 667.0
        }
        class func isIPhone6Plus () -> Bool {
            return max(UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height) == 736.0
        }  
    }
    
  3. الاستعمال:

        if AppDelegate.isIPhone5() {
            collectionViewTopConstraint.constant = 2
        }else if AppDelegate.isIPhone6() {
            collectionViewTopConstraint.constant = 20
        }
    

أعتقد أنه يجب أن يكون جيدًا إذا كان هذا الماكرو يعمل في الجهاز والمحاكي ، فيما يلي الحل.

#define IS_WIDESCREEN (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)568) < DBL_EPSILON)
#define IS_IPHONE (([[[UIDevice currentDevice] model] isEqualToString:@"iPhone"]) || ([[[UIDevice currentDevice] model] isEqualToString: @"iPhone Simulator"]))
#define IS_IPOD   ([[[UIDevice currentDevice]model] isEqualToString:@"iPod touch"])
#define IS_IPHONE_5 ((IS_IPHONE || IS_IPOD) && IS_WIDESCREEN)

استخدم الرمز التالي:

CGFloat screenScale = [[UIScreen mainScreen] scale];

CGRect screenBounds = [[UIScreen mainScreen] bounds]; 

CGSize screenSize = CGSizeMake(screenBounds.size.width * screenScale, screenBounds.size.height * screenScale); 

if (screenSize.height==1136.000000)
{ 
    // Here iPhone 5 View

    // Eg: Nextview~iPhone5.Xib
} else {
   // Previous Phones 

   // Eg : Nextview.xib
}

اعتدت على الجواب hfossli وترجمت إلى سويفت

let IS_IPAD = UIDevice.currentDevice().userInterfaceIdiom == .Pad
let IS_IPHONE = UIDevice.currentDevice().userInterfaceIdiom == .Phone
let IS_RETINA = UIScreen.mainScreen().scale >= 2.0

let SCREEN_WIDTH = UIScreen.mainScreen().bounds.size.width
let SCREEN_HEIGHT = UIScreen.mainScreen().bounds.size.height
let SCREEN_MAX_LENGTH = max(SCREEN_WIDTH, SCREEN_HEIGHT)
let SCREEN_MIN_LENGTH = min(SCREEN_WIDTH, SCREEN_HEIGHT)

let IS_IPHONE_4_OR_LESS = (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
let IS_IPHONE_5 = (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
let IS_IPHONE_6 = (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
let IS_IPHONE_6P = (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

الاقتراض من إجابة Samrat Mazumdar ، وهنا طريقة قصيرة لتقدير حجم شاشة الجهاز. وهو يعمل مع أحدث الأجهزة ، ولكنه قد يفشل في الأجهزة المستقبلية (كما قد تكون جميع طرق التخمين). سيحصل أيضًا على حالة من الارتباك إذا كان الجهاز معكوسًا (يعرض حجم شاشة الجهاز ، وليس حجم الشاشة معكوسة)

#define SCREEN_SIZE_IPHONE_CLASSIC 3.5
#define SCREEN_SIZE_IPHONE_TALL 4.0
#define SCREEN_SIZE_IPAD_CLASSIC 9.7

+ (CGFloat)screenPhysicalSize
{
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        CGSize result = [[UIScreen mainScreen] bounds].size;
        if (result.height < 500)
            return SCREEN_SIZE_IPHONE_CLASSIC;  // iPhone 4S / 4th Gen iPod Touch or earlier
        else
            return SCREEN_SIZE_IPHONE_TALL;  // iPhone 5
    }
    else
    {
        return SCREEN_SIZE_IPAD_CLASSIC; // iPad
    }
} 

بهذه الطريقة يمكنك اكتشاف عائلة الجهاز.

    #import <sys/utsname.h>
    NSString* deviceName()
    {
        struct utsname systemInformation;
        uname(&systemInformation);
        NSString *result = [NSString stringWithCString:systemInformation.machine
                                              encoding:NSUTF8StringEncoding];
        return result;
    }

    #define isIPhone5  [deviceName() rangeOfString:@"iPhone5,"].location != NSNotFound
    #define isIPhone5S [deviceName() rangeOfString:@"iPhone6,"].location != NSNotFound

تم اختباره وتصميمه لأي مجموعة من SDK و OS:

سريع

وأضاف أنواع باد. أجهزة iPad 2 و iPad mini هي أجهزة iPad غير شبكية. في حين أن جهاز iPad Mini 2 والإصدارات الأحدث ، فإن iPad 3 و 4 و iPad Air و Air 2 و Air 3 و iPad Pro 9.7 لهما نفس الدقة المنطقية من 1024. يملك iPad Pro الحد الأقصى 1366.

import UIKit

public enum DisplayType {
    case unknown
    case iphone4
    case iphone5
    case iphone6
    case iphone6plus
    case iPadNonRetina
    case iPad
    case iPadProBig
    static let iphone7 = iphone6
    static let iphone7plus = iphone6plus
}

public final class Display {
    class var width:CGFloat { return UIScreen.main.bounds.size.width }
    class var height:CGFloat { return UIScreen.main.bounds.size.height }
    class var maxLength:CGFloat { return max(width, height) }
    class var minLength:CGFloat { return min(width, height) }
    class var zoomed:Bool { return UIScreen.main.nativeScale >= UIScreen.main.scale }
    class var retina:Bool { return UIScreen.main.scale >= 2.0 }
    class var phone:Bool { return UIDevice.current.userInterfaceIdiom == .phone }
    class var pad:Bool { return UIDevice.current.userInterfaceIdiom == .pad }
    class var carplay:Bool { return UIDevice.current.userInterfaceIdiom == .carPlay }
    class var tv:Bool { return UIDevice.current.userInterfaceIdiom == .tv }
    class var typeIsLike:DisplayType {
        if phone && maxLength < 568 {
            return .iphone4
        }
        else if phone && maxLength == 568 {
                return .iphone5
        }
        else if phone && maxLength == 667 {
            return .iphone6
        }
        else if phone && maxLength == 736 {
            return .iphone6plus
        }
        else if pad && !retina {
            return .iPadNonRetina
        }
        else if pad && retina && maxLength == 1024 {
            return .iPad
        }
        else if pad && maxLength == 1366 {
            return .iPadProBig
        }
        return .unknown
    }
}

شاهده في الإجراء https://gist.github.com/hfossli/bc93d924649de881ee2882457f14e346

ملاحظة: إذا كان iPhone 6 على سبيل المثال في وضع التكبير / التصغير ، فإن واجهة المستخدم هي نسخة مكررة من iPhone 5. هذه الوظائف لا تحدد نوع الجهاز ، ولكن وضع العرض ، وبالتالي فإن iPhone 5 هو النتيجة المرجوة في هذا المثال.

ج موضوعية

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))
#define IS_ZOOMED (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

الاستخدام: http://pastie.org/9687735

ملاحظة: إذا كان iPhone 6 على سبيل المثال في وضع التكبير / التصغير ، فإن واجهة المستخدم هي نسخة مكررة من iPhone 5. هذه الوظائف لا تحدد نوع الجهاز ، ولكن وضع العرض ، وبالتالي فإن iPhone 5 هو النتيجة المرجوة في هذا المثال.


حل بسيط حقا

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone Classic
    }
    if(result.height == 568)
    {
        // iPhone 5
    }
}

في Swift ، مشروع iOS 8+ ، أود تقديم امتداد على UIScreen ، مثل:

extension UIScreen {

    var isPhone4: Bool {
        return self.nativeBounds.size.height == 960;
    }

    var isPhone5: Bool {
        return self.nativeBounds.size.height == 1136;
    }

    var isPhone6: Bool {
        return self.nativeBounds.size.height == 1334;
    }

    var isPhone6Plus: Bool {
        return self.nativeBounds.size.height == 2208;
    }

}

(ملاحظة: nativeBounds في البكسل).

ومن ثم سيكون الرمز مثل:

if UIScreen.mainScreen().isPhone4 {
    // do smth on the smallest screen
}

لذا ، يوضح الرمز أن هذا هو فحص للشاشة الرئيسية ، وليس لطراز الجهاز.


لقد اتخذت الحرية لوضع الماكرو من قبل Macmade في وظيفة C ، وتسمية ذلك بشكل صحيح لأنه يكشف عن توافر شاشة عريضة وليس بالضرورة iPhone 5.

لا يكتشف الماكرو أيضًا التشغيل على iPhone 5 في حالة عدم احتواء المشروع على [email protected] . بدون الصورة الافتراضية الجديدة ، سيبلغ جهاز iPhone 5 حجم شاشة 480 × 320 عاديًا (بالنقاط). لذلك ، لا يقتصر التحقق على توفر الشاشة العريضة فقط ، بل يتم تمكين وضع الشاشة العريضة أيضًا.

BOOL isWidescreenEnabled()
{
    return (BOOL)(fabs((double)[UIScreen mainScreen].bounds.size.height - 
                                               (double)568) < DBL_EPSILON);
}

نحتاج الآن إلى حساب أحجام شاشات iPhone 6 و 6 Plus. وهنا إجابة محدثة

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    //its iPhone. Find out which one?

    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone Classic
    }
    else if(result.height == 568)
    {
        // iPhone 5
    }
    else if(result.height == 667)
    {
        // iPhone 6
    }
   else if(result.height == 736)
    {
        // iPhone 6 Plus
    }
}
else
{
     //its iPad
}

بعض المعلومات المفيدة

iPhone 6 Plus   736x414 points  2208x1242 pixels    3x scale    1920x1080 physical pixels   401 physical ppi    5.5"
iPhone 6        667x375 points  1334x750 pixels     2x scale    1334x750 physical pixels    326 physical ppi    4.7"
iPhone 5        568x320 points  1136x640 pixels     2x scale    1136x640 physical pixels    326 physical ppi    4.0"
iPhone 4        480x320 points  960x640 pixels      2x scale    960x640 physical pixels     326 physical ppi    3.5"
iPhone 3GS      480x320 points  480x320 pixels      1x scale    480x320 physical pixels     163 physical ppi    3.5"

هذا هو الماكرو لمشروعي cocos2d. يجب أن يكون هو نفسه للتطبيقات الأخرى.

#define WIDTH_IPAD 1024
#define WIDTH_IPHONE_5 568
#define WIDTH_IPHONE_4 480
#define HEIGHT_IPAD 768
#define HEIGHT_IPHONE 320

#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

//width is height!
#define IS_IPHONE_5 ( [ [ UIScreen mainScreen ] bounds ].size.height == WIDTH_IPHONE_5 )
#define IS_IPHONE_4 ( [ [ UIScreen mainScreen ] bounds ].size.height == WIDTH_IPHONE_4 )

#define cp_ph4(__X__, __Y__) ccp(cx_ph4(__X__), cy_ph4(__Y__))
#define cx_ph4(__X__) (IS_IPAD ? (__X__ * WIDTH_IPAD / WIDTH_IPHONE_4) : (IS_IPHONE_5 ? (__X__ * WIDTH_IPHONE_5 / WIDTH_IPHONE_4) : (__X__)))
#define cy_ph4(__Y__) (IS_IPAD ? (__Y__ * HEIGHT_IPAD / HEIGHT_IPHONE) : (__Y__))

#define cp_pad(__X__, __Y__) ccp(cx_pad(__X__), cy_pad(__Y__))
#define cx_pad(__X__) (IS_IPAD ? (__X__) : (IS_IPHONE_5 ? (__X__ * WIDTH_IPHONE_5 / WIDTH_IPAD) : (__X__ * WIDTH_IPHONE_4 / WIDTH_IPAD)))
#define cy_pad(__Y__) (IS_IPAD ? (__Y__) : (__Y__ * HEIGHT_IPHONE / HEIGHT_IPAD))

هنا هو الاختبار الصحيح للجهاز ، دون الاعتماد على الاتجاه

- (BOOL)isIPhone5
{
    CGSize size = [[UIScreen mainScreen] bounds].size;
    if (MIN(size.width,size.height) == 320 && MAX(size.width,size.height == 568)) {
        return YES;
    }
    return NO;
}

وقد تم الرد على هذا مائة مرة ولكن هذا الحل عمل أفضل بالنسبة لي. إنها وظيفة مساعد بسيطة ولا تتطلب توسيع فئة النظام.

سويفت 3 مساعد:

func phoneSizeInInches(defaultValue: Float = 4.7) -> Float {
    switch (UIScreen.main.nativeBounds.size.height) {
    case 960, 480:
        return 3.5
    case 1136:
        return 4
    case 1334:
        return 4.7
    case 2208:
        return 5.5
    default:
        return defaultValue
    }
}

هذا لأنه من السهل حفظ أحجام بوصة الهاتف ، مثل ، "5.5 بوصة" أو "4.7 بوصة" الجهاز ولكن من الصعب تذكر أحجام بكسل بالضبط.

if phoneSizeInInches() == 4 {
  //do something with only 4 inch iPhones
}

وهذا يمنحك أيضًا الفرصة للقيام بشيء كالتالي:

if phoneSizeInInches() < 5.5 {
  //do something all iPhones smaller than the plus
}

يضمن "defaultValue" التراجع دائمًا عن شفرتك إلى حجم آمن إذا قامت Apple بإصدار حجم جهاز جديد ولم تقم بتحديث تطبيقك بعد.

if phoneSizeInInches(defaultValue: 4.7) == 4 {
    //if a new iPhone size is introduced, your code will default to behaving like a 4.7 inch iPhone
}

لاحظ أن هذا خاص بتطبيقات الهاتف ، سيحتاج إلى بعض التغييرات للتطبيقات العامة.


+(BOOL)isDeviceiPhone5
{
    BOOL iPhone5 = FALSE;

    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    if (screenBounds.size.height == 568)
    {
        // code for 4-inch screen
        iPhone5 = TRUE;
    }
    else
    {
        iPhone5 = FALSE;
        // code for 3.5-inch screen
    }
    return iPhone5;

}

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

NSLog(@"screen soze is %f",height);

  if (height>550) {

          // 4" screen-do some thing
     }

  else if (height<500) {

        // 3.5 " screen- do some thing

     }




device