كيف يمكنني رسم العفريت على خلفية استخدام الكوارتز CGLayers?

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

سؤال

انا مبتدئ في الكوارتز و أنا أحارب أن نفهم هذه الأشياء أبل تقول من السهل جدا ومباشرة.

لقد خلق اثنين CGLayers:واحد ثابت الخلفية والأخرى العفريت.أريد هذا العفريت للتحرك.

سواء الخلفية السياق العفريت السياق يتم رسمها بعيدا عن الشاشة و أود أن كليهما ينظر إليه على الشاشة.

أن تفعل ذلك - وأنا لست متأكدا إذا كان هذا هو الطريق الصحيح - يجب فعل ما يلي:

  1. أنا خلقت UIImageView
  2. لقد استولت الطبقة محتويات باستخدام

    resultingImage = UIGraphicsGetImageFromCurrentImagecontext();
    myView.صورة = resultingImage;

هذا يظهر لي على الشاشة محتويات كل من الكوارتز طبقات.

الآن لدي مشكلتين:

  1. هذا النهج هو بطيء كما الجحيم
  2. عندما تتحرك طبقة يجب أن تكرار ذكر رمز حتى تقوم هذه الطبقة لا يتحرك!!!!

لذا رجاء اي فون معلمو هناك ، من فضلك قل لي إذا كان هناك طريقة أخرى للقيام بذلك مع الكوارتز و ما يجب القيام به لرؤية العفريت تتحرك!!!!

شكرا على أي مساعدة!

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

المحلول

السبب الرئيسي لاستخدام CALayers للحصول على GPU مركب مباشرة على شاشة الذاكرة.باستخدام UIGraphicsGetImageFromCurrentImageContext() النتائج في الصورة التي تتكون على GPU نقلها إلى الذاكرة الرئيسية ومن ثم العودة مرة أخرى إلى رسم على الشاشة والتي سوف تكون بطيئة حقا.ما يجب أن تقوم به بدلا من ذلك هو جعل طبقات جديدة الطبقات الفرعية من وجهة نظركم طبقة:

[self.view.layer addSublayer:myNewLayer];

من أجل مثال جيد على كيفية استخدام CALayers في لعبة انظر: GeekGameBoard

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