iphone-5 حل - تطبيقات iOS 6-كيفية التعامل مع حجم شاشة iPhone 5؟




برنامج التلفزيون (8)

ممكن تكرار:
كيفية تطوير أو ترحيل التطبيقات لدقة شاشة iPhone 5؟

كنت أتساءل فقط كيف يجب أن نتعامل مع حجم شاشة آيفون 5 الأكبر.

بما أن لديها المزيد من البيكسل في الارتفاع ، فإن أشياء مثل GCRectMake التي تستخدم إحداثيات (وتضاعف فقط بكسل مع مشكلة شبكية العين / غير شبكية العين) لن تعمل بسلاسة بين الإصدارات ، كما حدث عندما حصلنا على Retina .

وهل سيتعين علينا تصميم لوحتي قصص ، تمامًا مثل iPad؟

أنا شخصياً لا أعتقد أن Apple ستطلب منك التحقق من حجم الشاشة في كل مرة يجب عليك فيها رسم شيء ما ، كما تقول العديد من الإجابات. هل هذا يحدث مع iPad؟


Answers

لقد انتهيت للتو من تحديث وإصدار إصدار iOS 6.0 لإحدى تطبيقاتي إلى المتجر. هذا الإصدار متوافق مع نظام التشغيل iOS 5.0 ، لذا احتفظت shouldAutorotateToInterfaceOrientation: وأضفت الجديد كما هو موضح أدناه.

اضطررت للقيام بما يلي:

تغيير shouldAutorotateToInterfaceOrientation: في نظام التشغيل iOS 6. في نظام iOS 6 ، يجب أن يتم shouldAutorotateToInterfaceOrientation: طريقة shouldAutorotateToInterfaceOrientation: . في مكانها ، يجب عليك استخدام supportedInterfaceOrientationsForWindow: ويجب أن shouldAutorotate الأساليب. وبالتالي ، أضفت هذه الأساليب الجديدة (وحافظت على التوافق مع iOS 5):

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAllButUpsideDown;    
}
  • استخدم طريقة viewWillLayoutSubviews طريقة عرض وحدة التحكم وضبط التنسيق باستخدام مستطيل حدود العرض.
  • وحدات التحكم في العرض willRotateToInterfaceOrientation:duration: ،
    willAnimateRotationToInterfaceOrientation:duration: و
    didRotateFromInterfaceOrientation: لم يعد يتم استدعاء الأساليب على أي جهاز تحكم في العرض يجعل عرض تقديمي كامل الشاشة
    نفسها - على سبيل المثال ، presentViewController:animated:completion:
  • ثم قمت بإصلاح autolayout للآراء التي تحتاج إليها.
  • نسخ الصور من جهاز محاكاة لعرض بدء التشغيل وآراء متجر iTunes في PhotoShop وتصديرها كملفات png.
  • اسم الصورة الافتراضية هو: [email protected] وحجمه هو 640 × 1136. يسمح أيضًا بتزويد 640 × 1096 لنفس وضع الصورة (إزالة Statusbar). يمكن توفير أحجام مماثلة أيضًا في الوضع الأفقي إذا كان تطبيقك يسمح فقط بتوجيه أفقي على iPhone.
  • لقد أسقطت التوافق مع الإصدارات السابقة لنظام التشغيل iOS 4. السبب الرئيسي لذلك هو أنه تم إسقاط دعم رمز armv6 . وبالتالي ، يمكن ترقية جميع الأجهزة التي يمكنني دعمها الآن (تشغيل armv7 ) إلى iOS 5.
  • أنا أيضا رمز armv7s جيل لدعم iPhone 5 وبالتالي لا يمكن استخدام أي أطر طرف ثالث (مثل Admob وغيرها) حتى يتم تحديثها.

كان هذا كل شيء ولكن تذكر فقط لاختبار autorotation في دائرة الرقابة الداخلية 5 و iOS 6 بسبب التغيرات في الدوران.


@ تعليق باسكال على سؤال OP هو الصحيح. بمجرد إضافة الصورة ، فإنها تزيل الحدود السوداء وسيستخدم التطبيق الارتفاع الكامل.

ستحتاج إلى إجراء تعديلات على أي CGRects من خلال تحديد أن الجهاز يستخدم العرض الأكبر. أي إذا كنت بحاجة إلى شيء الانحياز إلى الجزء السفلي من الشاشة.

أنا متأكد من أن هناك طريقة مدمجة ، لكنني لم أر أي شيء والكثير لا يزال تحت NDA لذا فإن الطريقة التي نستخدمها في تطبيقاتنا هي ببساطة وظيفة عالمية. أضف ما يلي إلى ملف .pch الخاص بك ثم قم بإجراء if( is4InchRetina() ) { ... } بسيطة if( is4InchRetina() ) { ... } لإجراء تعديلات على CGRects الخاصة بك إلخ.

static BOOL is4InchRetina()
{
    if (![UIApplication sharedApplication].statusBarHidden && (int)[[UIScreen mainScreen] applicationFrame].size.height == 548 || [UIApplication sharedApplication].statusBarHidden && (int)[[UIScreen mainScreen] applicationFrame].size.height == 568)
        return YES;

    return NO;
}

@interface UIDevice (Screen)
typedef enum
{
    iPhone          = 1 << 1,
    iPhoneRetina    = 1 << 2,
    iPhone5         = 1 << 3,
    iPad            = 1 << 4,
    iPadRetina      = 1 << 5

} DeviceType;

+ (DeviceType)deviceType;
@end

. م

#import "UIDevice+Screen.h"
@implementation UIDevice (Screen)

+ (DeviceType)deviceType
{
    DeviceType thisDevice = 0;
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
    {
        thisDevice |= iPhone;
        if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)])
        {
            thisDevice |= iPhoneRetina;
            if ([[UIScreen mainScreen] bounds].size.height == 568)
                thisDevice |= iPhone5;
        }
    }
    else
    {
        thisDevice |= iPad;
        if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)])
            thisDevice |= iPadRetina;
    }
    return thisDevice;
}

@end

بهذه الطريقة ، إذا كنت تريد اكتشاف ما إذا كان مجرد جهاز iPhone أو iPad (بغض النظر عن حجم الشاشة) ، فأنت تستخدم فقط:

if ([UIDevice deviceType] & iPhone) 

أو

if ([UIDevice deviceType] & iPad)

إذا كنت تريد اكتشاف iPhone 5 فقط ، فيمكنك استخدامه

if ([UIDevice deviceType] & iPhone5)

بدلا من الإجابة على مالكومس حيث تحتاج إلى التحقق لمعرفة ما إذا كان جهاز iPhone ،

if ([UIDevice currentResolution] == UIDevice_iPhoneHiRes || 
    [UIDevice currentResolution] == UIDevice_iPhoneStandardRes || 
    [UIDevice currentResolution] == UIDevice_iPhoneTallerHiRes)`

لا يمتلك أي منهما ميزة كبيرة على الآخر ، بل هو مجرد تفضيل شخصي.


أعتقد أنه يمكنك استخدام [UIScreen mainScreen].bounds.size.height وحساب الخطوة [UIScreen mainScreen].bounds.size.height . عند حساب الخطوة ، يمكنك تعيين إحداثيات لدقيقتين.

أو يمكنك الحصول على ارتفاع مثل أعلاه ، if(iphone5) then... else if(iphone4) then... else if(ipad) . شيء من هذا القبيل.

إذا كنت تستخدم القصص المصورة ، فعليك إنشاء آيفون جديد.


لا.

if ([[UIScreen mainScreen] bounds].size.height > 960)

على iPhone 5 غير صحيح

if ([[UIScreen mainScreen] bounds].size.height == 568)

تحتاج إلى إضافة صورة PNG 640x1136 بكسل ( [email protected] ) كصورة افتراضية 4 بوصة للمشروع الخاص بك ، وستستخدم مسافات إضافية (بدون بذل جهود على التطبيقات القائمة على الجدول البسيط ، ستتطلب الألعاب المزيد من الجهود) .

لقد قمت بإنشاء فئة UIDevice صغيرة من أجل التعامل مع جميع قرارات الشاشة. يمكنك الحصول عليه هنا ، ولكن الرمز هو كما يلي:

ملف UIDevice + Resolutions.h :

enum {
    UIDeviceResolution_Unknown           = 0,
    UIDeviceResolution_iPhoneStandard    = 1,    // iPhone 1,3,3GS Standard Display  (320x480px)
    UIDeviceResolution_iPhoneRetina4    = 2,    // iPhone 4,4S Retina Display 3.5"  (640x960px)
    UIDeviceResolution_iPhoneRetina5     = 3,    // iPhone 5 Retina Display 4"       (640x1136px)
    UIDeviceResolution_iPadStandard      = 4,    // iPad 1,2,mini Standard Display   (1024x768px)
    UIDeviceResolution_iPadRetina        = 5     // iPad 3 Retina Display            (2048x1536px)
}; typedef NSUInteger UIDeviceResolution;

@interface UIDevice (Resolutions)

- (UIDeviceResolution)resolution;

NSString *NSStringFromResolution(UIDeviceResolution resolution);

@end

ملف UIDevice + Resolutions.m :

#import "UIDevice+Resolutions.h"

@implementation UIDevice (Resolutions)

- (UIDeviceResolution)resolution
{
    UIDeviceResolution resolution = UIDeviceResolution_Unknown;
    UIScreen *mainScreen = [UIScreen mainScreen];
    CGFloat scale = ([mainScreen respondsToSelector:@selector(scale)] ? mainScreen.scale : 1.0f);
    CGFloat pixelHeight = (CGRectGetHeight(mainScreen.bounds) * scale);

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
        if (scale == 2.0f) {
            if (pixelHeight == 960.0f)
                resolution = UIDeviceResolution_iPhoneRetina4;
            else if (pixelHeight == 1136.0f)
                resolution = UIDeviceResolution_iPhoneRetina5;

        } else if (scale == 1.0f && pixelHeight == 480.0f)
            resolution = UIDeviceResolution_iPhoneStandard;

    } else {
        if (scale == 2.0f && pixelHeight == 2048.0f) {
            resolution = UIDeviceResolution_iPadRetina;

        } else if (scale == 1.0f && pixelHeight == 1024.0f) {
            resolution = UIDeviceResolution_iPadStandard;
        }
    }

    return resolution;
 }

 @end

هذه هي الطريقة التي تحتاج إلى استخدام هذا الرمز.

1) إضافة ملفات UIDevice + Resolutions.h و UIDevice + Resolutions.m أعلاه إلى المشروع الخاص بك

2) أضف السطر #import "UIDevice + Resolutions.h" إلى ViewController.m

3) أضف هذا الرمز للتحقق من إصدارات الجهاز التي تتعامل معها

int valueDevice = [[UIDevice currentDevice] resolution];

    NSLog(@"valueDevice: %d ...", valueDevice);

    if (valueDevice == 0)
    {
        //unknow device - you got me!
    }
    else if (valueDevice == 1)
    {
        //standard iphone 3GS and lower
    }
    else if (valueDevice == 2)
    {
        //iphone 4 & 4S
    }
    else if (valueDevice == 3)
    {
        //iphone 5
    }
    else if (valueDevice == 4)
    {
        //ipad 2
    }
    else if (valueDevice == 5)
    {
        //ipad 3 - retina display
    }

ستستمر جميع التطبيقات في العمل على الشاشة الممددة رأسيًا مما يمكن أن أخبرك به في عرض اليوم. سوف تكون مربوطة بأحرف كبيرة أو بشكل أساسي فإن النقاط الإضافية التي يبلغ عددها 88 نقطة ستكون سوداء.

إذا كنت تخطط فقط لدعم iOS 6+ ، ففكر في استخدام Auto Layout. فهو يزيل كل معالجة التخطيط الثابت ويستخدم بدلاً من ذلك القيود لوضع الأمور خارجًا. لن يكون هناك شيء مشفر ، وستصبح حياتك أبسط بكثير.

ومع ذلك ، إذا كان عليك دعم نظام التشغيل iOS القديم ، فهذا يعتمد على التطبيق الخاص بك. يمكن لمعظم التطبيقات التي تستخدم شريط التنقل القياسي و / أو شريط علامات التبويب ، ببساطة توسيع المحتوى في الوسط لاستخدام هذه النقاط الإضافية. عيّن قناع التأييد للمحتوى المركزي للتوسيع في كلا الاتجاهين.

view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

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

إذا لم يكن هذا ممكنًا ، فالخيار الوحيد المتبقي هو أن يكون لديك وحدتي واجهة مستخدم (قبل iPhone 5 و iPhone 5).

إذا كان هذا يبدو قبيحًا ، فيمكنك الانتقال إلى نموذج letterboxed الافتراضي حيث تظهر النقاط الإضافية / البيكسلات باللون الأسود فقط.

تصحيح

لتمكين تطبيقاتك من العمل مع iPhone 5 ، تحتاج إلى إضافة إصدار شبكية من صورة المشغل. يجب أن يُسمى [email protected] . ويجب أن تكون جودة الشبكية - لا يوجد توافق خلفي هنا :)

يمكنك أيضًا تحديد هذه الصورة من داخل Xcode. انتقل إلى الهدف ، وتحت قسم الملخص ، ابحث عن صور الإطلاق. يجب أن يكون حجم الصورة 640x1136 بكسل. وهنا لقطة من مكان العثور عليه ، إذا كان ذلك يساعد.


ستعمل التطبيقات بشكل جيد. ولكن إذا كان لديك بعض عناصر واجهة المستخدم الصغيرة جدًا. قد ترغب في إعادة زيارتها نظرًا لانخفاض حجم الشاشة.







iphone ios iphone-5