2012-12-12 16 views
16

Ne CAReplicatorLayer ile ilginç: o şekilde çoğaltılan için "yedekleme deposunu" yeniden kullanır gibiCAReplicatorLayer'ın ardındaki sihir nedir?

  • Çok verimli bir farklı dönüşümler ile CALayer birden çok kez görüntüleyebilir (nasıl?)
  • görünüyor tabaka ve hatta bazı renk tonları uygulamak (nasıl?)

ya kaynak koduna ellerini veya CAReplicatorLayer arkasında sihirli bazı bilgilere almak istiyorum. CAReplicatorLayer'e benzer bir CALayer sınıfına sahip olmak istiyorum, ancak daha fazla kontrol ile. numaralı dönüşümünün her bir çoğaltılmış örneği için tek başına denetimine sahip olmasını isterim.

Tamamen farklı bir şekilde sordu: bir CALayer için "destek deposu" almak mümkün ve bunu istiyorum, ancak istediğim kadar istiyorum?

("destek deposu" ile CALayer/UIView için oluşturulan doku anlamına gelir. CoreAnimation/QuartzCore başlıklarının altında neler olduğu hakkında fazla bir şey bilmiyorum).


Neden mesela alternatiflere bakmıyorum. Bir UIImage için CALayer render:

  • Performans
  • İçerik dinamiktir/geçişler
  • altında oldukça sık değişen O başka bir yol yapmak için eller aşağı harika olurdu!
+2

Bunu kendim merak ediyorum. Umarım bizden daha akıllı biri olursa haha ​​gelir. –

cevap

8

CAReplicatorLayer veya CAGradientLayer gibi özel amaçlı CALayer'lar (özel API'ler aracılığıyla) hızlı dolum veya kopyalama kullanarak çizimlerini doğrudan GPU üzerinde gerçekleştirebilirler. Bir anlamda, destek deposu normal RAM'de değil, doğrudan GPU'da olacak şekilde farklıdır.

+0

Yanıt için teşekkürler. Bu, umduğum şey için umut verici gelmiyor, ama aslında bazı yönlerini açıklığa kavuşturuyor. :) – hfossli

+0

Her zaman bir EAGLLayer kullanabilir ve bunu Shader'lı OpenGL ile çizebilirsiniz. Bu, özel çizim yapmak için oruç tutmanın yolu olurdu. – Cocoanetics

+0

Sanırım UIViews tarafından desteklenemez mi? Ya da benim durumumda: UIWebView'ı çoğaltmak kadar cesurca bir şey yapıyorum. CAReplicatorLayer'e benzer bir şeyden çok hoşlanırdım, ama her bir münferit değişimin kontrolü ile (bir CAReplicatorLayer teklifinin yerine). OpenGL/EAGLLayer, mutlu olmaktan daha fazlasını teklif ederse. – hfossli

İlgili konular