سؤال

يجب تشغيل صغيرة مشكلة السرعة.على الحمل ، ط توليد CGMutablePath تحتوي على 1000 نقطة على الأقل.أريد أن انتقل هذا المسار على الشاشة ، لذلك يمكنني استخدام هذا النوع من التعليمات البرمجية :

-(void) drawRect:(CGRect)rect {

    /*
    Here, I have a timer calling drawRect 60 times per second.
    There's also code for the scale and currentTime, based on
    an MP3 playback (AVAudioPlayer);
    */

    CGContextRef ref = UIGraphicsGetCurrentContext();   
    CGContextClearRect(ref, [self frame]);

    CGContextSaveGState(ref);
    CGContextTranslateCTM(ref, s.width/2+currentTime, 1);
    CGContextScaleCTM(ref, scale, 1);
    CGContextAddPath(ref, myGraphPath);
    CGContextSetRGBFillColor(ref, .1, .1, .1, .8);
    CGContextFillPath(ref);
    CGContextRestoreGState(ref);
}

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

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

المحلول 2

بعد تجربة الكثير من الأشياء (مثل تقسيم بلدي ضخم 1000 نقطة المسار إلى أصغر 10 نقاط مسارات الخ...), لقد استدار كل شيء openGL باستخدام بسيطة قمة المصفوفات.استغرق مني حوالي 4 ساعات إلى ميناء كل شيء (حتى التحجيم المسار ، التمرير ، ... الخ) و الآن أنا الحصول على كامل 60fps الرسوم المتحركة في كل وقت عندما كنت أعاني فقط 22fps متوسط مع قمم في 28 عند استخدام CoreGraphics.

نصائح أخرى

ورسم مسار 1000 نقطة أو 10000 نقطة 60 مرة في الثانية الواحدة هو حقا لإبطاء التطبيق الخاص بك إلى أسفل، إذا كان من الممكن على الإطلاق. إذا كان المسار ثابت، كنت حقا ينبغي أن ننظر في الرسم مرة واحدة فقط داخل UIView الخاص بك، بحيث يتم تخزينها مؤقتا في غضون طبقة UIView، ووتحرك طبقة حولها. فإنه لا بد من الرسوم المتحركة، هل يمكن أن ننظر في CAShapeLayer الجديد، والذي يوفر القدرة على تحريك مسار بيزيه ببساطة من خلال تطبيق الرسوم المتحركة في الممتلكات طريقها.

ولكن، 10000 بكسل ستكون أكبر من الحد الأقصى لحجم الملمس على اي فون (2048 س 2048)، لذلك سيكون لديك مشاكل عرض التي قد تحتاج في أي طريقة العرض القياسية أو طبقة وإما تقسيمها إلى قطع أصغر أو استخدام CATiledLayer لجعله على الشاشة.

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