اي فون الاختلافات الأداء في الكوارتز رسم مقابل صور ما قبل خبز (التي أعتقد يبسط إلى الكوارتز مقابل الكوارتز)

StackOverflow https://stackoverflow.com/questions/1604341

سؤال

جديد لالكوارتز وأنا الغريب على سرعات رسم الأشكال البسيطة، التدرجات، والظلال. مقارنة تحديدا وظائف الرسم الكوارتز لالكوارتز رسم صورة على اي فون.

ويقول أنني بحاجة إلى رسم شغلها، القوية، ومظلل المستطيل. أفترض أن استيراد المستطيل خبز قبل باعتباره PNG ورسم باستخدام drawInRect: أو drawAtPoint: هو أسرع من استخدام وظائف الرسم الكوارتز لرسم الشيء نفسه، لأن هذا الأخير يتطلب حسابات واضحة. من ناحية أخرى، رسم صورة أفترض يزيد استخدام الذاكرة وحجم الطلب لأن لدي لاستيراد الصورة ثم الوك ذلك. هل هذا حق الصوت؟

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

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

المحلول

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

ومنطقة واحدة حيث لم نرى فوز الأداء الهامة هو التدرج شعاعي الكبير الذي أود أن ألفت كخلفية. في الشرق، كنت أرى أن الدعوة CGContextDrawRadialGradient () وتلتهم الكثير من الوقت وحدة المعالجة المركزية. عندما حل محل شعاعي الانحدار رسمها الكوارتز مع صورة ثابتة، ورأيت انخفاض ملحوظ في وقت بدء تشغيل التطبيق (يتم وضع هذه الخلفية أثناء بدء تشغيل التطبيق). الغريب، ورأيت أيضا انخفاض في استخدام الذاكرة تطبيق بنحو 0.5 MB، وهو ما لا يمكن أن تفسر بشكل كامل.

إذا كنت ترغب في اختبار هذا بنفسك، أنا غاية يوصي التقاط صورة المحرر التعتيم ، التي يمكن أن تولد كود الكوارتز لرسم (بما في ذلك UIView كامل أو فئة فرعية CALayer)، وكذلك إخراج PNG من نفس الرسم. وهذا يجعل من تافهة لتنفيذ كل مسارات داخل التطبيق الخاص بك واختبار بها.

نصائح أخرى

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

وهكذا، مثلا، عندما اللوحي أخيرا السفن (أي يوم الآن !!)، يمكنك إعادة صياغة المعلمات الرسم قليلا لتغطية جميع الأجهزة الممكنة، بدلا من توليد مجموعة من الصور الثابتة مختلفة.

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