سؤال

ولدي تطبيق إدخال البيانات التي تحتوي على المستخدم إدخال حوالي 6 قطع من المعلومات عن على وجهات نظر مختلفة في وحدة تحكم الملاحة. هذا يعمل بشكل جيد، ولكن بمجرد يعتاد المستخدم إلى طلب الوقت الذي يستغرقه الشاشة التالية لتظهر تباطؤ المستخدم إلى أسفل.

وحاولت التطبيق دون الرسوم المتحركة، لكنه لا يشعر حق تماما. هل هناك طريقة للحصول على الرسوم المتحركة أن يحدث بشكل أسرع؟ أنا في المقام الأول باستخدام وحدة تحكم الملاحة، وجهات النظر الجدول، والآراء منقار.

هل كانت مفيدة؟

المحلول

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

ويمكنك أيضا إضافة كل عرض بمثابة subview نفسك في هذه الحالة لديك السيطرة على مدة الرسوم المتحركة من بين أمور أخرى. وهذا الرمز نفعل ذلك لك، على الرغم من الحذر وأنا فقط كتبت عليه ولم اختباره (نمط الانتقال والمعلمات منطقية يمكن إزالتها لأنها لا تفعل شيئا الآن).

وUIViewControllerExtendedPresentModalViewController.h

#import <Foundation/Foundation.h>

typedef enum _ExtendedModalTransitionStyle
{
    ExtendedModalTransitionStyleTopDown 
} ExtendedModalTransitionStyle;

@interface UIViewController ( ExtendedPresentModalViewController )
- (void)presentModalViewController: (UIViewController*)modalViewController 
               withTransitionStyle: (ExtendedModalTransitionStyle)style
                          animated: (BOOL)animated;

- (void)dismissModalViewController: (UIViewController*)modalViewController
               withTransitionStyle: (ExtendedModalTransitionStyle)style
                          animated: (BOOL)animated;
@end

وUIViewControllerExtendedPresentModalViewController.m

#import "UIViewControllerExtendedPresentModalViewController.h"
#import <QuartzCore/QuartzCore.h>

@implementation UIViewController ( ExtendedPresentModalViewController )

    - (void)presentModalViewController: (UIViewController*)modalViewController 
                   withTransitionStyle: (ExtendedModalTransitionStyle)style
                              animated: (BOOL)animated
    {
        [modalViewController retain]; // we'll need this for a little while, hang on to it.

        CATransition* transition = [CATransition animation];
        [transition setDuration: 0.4];
        [transition setTimingFunction: 
         [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear]];
        [transition setType: kCATransitionMoveIn];
        [transition setSubtype: kCATransitionFromBottom];
        [[[self view] layer] addAnimation: transition 
                                   forKey: nil];
        [[self view] addSubview: [modalViewController view]];
    }

    - (void)dismissModalViewController: (UIViewController*)modalViewController
                   withTransitionStyle: (ExtendedModalTransitionStyle)style
                              animated: (BOOL)animated
    {
        CATransition* transition = [CATransition animation];
        [transition setDuration: 0.4];
        [transition setTimingFunction: 
         [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear]];//kCAMediaTimingFunctionEaseInEaseOut]];
        [transition setType: kCATransitionReveal];
        [transition setSubtype: kCATransitionFromTop];
        [[[[modalViewController view] superview] layer] addAnimation: transition 
                                                              forKey: nil];
        [[modalViewController view] removeFromSuperview];

        [modalViewController release]; // all done, we can let this go.
    }
    @end

نصائح أخرى

هل إعادة استخدام الخلايا في عرض جدول؟ تأكد من إعادة حقا لهم، وبعبارة أخرى القيام بكل الإعداد للخلية داخل القضية إذا (خلية == لا شيء) وتنطبق فقط على البيانات في حالة المشتركة (التي تنطبق على كلا إعادة الاستخدام والتي تم إنشاؤها حديثا).

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

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

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

وكنت قد تنظر أيضا في اعتماد استراتيجية مات غالاغر لخلية معالجة - توقف cellForRowAtIndexPath بك تتحول إلى طويل، مجموعة واحدة سيئة من المحاذير

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top