2011-01-14 11 views
7

Bir animasyona animasyon uygulamak amacıyla 50 resim eklemek istediğimi varsayalım. Ve düşünelim ki "UIView" animasyonu yerine Çekirdek Animasyon (örn., CABasicAnimation) kullanmayı planlıyorum.iOS: Animasyon için UIViews veya CALayer ekle mi?

50 alt görüntü veya 50 alt katman ekleyerek bunu uygulamaktan daha iyi olur muyum? Fark yaratıyor mu?

Teşekkürler.

cevap

16

here tanımladığım gibi, animasyonlarda hem UIViews hem de CALayer kullanıyorum ve bunlar arasında önemsiz bir performans farkı buldum. UIViews, katmanların etrafında çok hafif paketleyicilerdir. Ayrıca, ihtiyacınız olan katman tabanlı animasyonlar, UIView'in destek katmanına kolayca uygulanabilir.

Çapraz platform (Mac/iOS) kullanıcı arabirimi öğeleri oluşturmak istediğim durumlarda CALayers'ı doğrudan kullandım çünkü CALayer'lar her iki platformdaki uygulamalarında hemen hemen aynıydı (önemli ölçüde farklı NSView'lar ve UIView'lerin aksine). CALayer'ların kutudan herhangi bir dokunmatik işleme rutini yoktur, ancak ihtiyacınız varsa bu özelliği ekleyebilirsiniz.

Ayrıca, katmanlarla sınırlı 3-D manipülasyonu yapmaya çalışırken (bir CoverFlow efektinde olduğu gibi) veya parçacık efektleri üretmek için bir CAReplicatorLayer kullanıldığında olduğu gibi, doğrudan katmanlarla çalışmak isteyebileceğiniz bazı kenar durumları da vardır.

+0

UIViews ile devam ettim çünkü öncelikle UIView animasyonu ile animasyonları çalıştırmak/ardı ardına eylemleri gerçekleştirmek önemli olduğu durumlarda çok daha kolay. (Bu tamamlama blokları çok temiz ve bir delege 'animationDidStop' çağrısı benim durumumda uygulamak için bir kabus olacaktı.) –

+1

@Greg - Evet, yeni blok tabanlı UIView animasyonları oldukça temiz. Ancak, CATransaction'ın '+ setCompletionBlock:' komutunu kullanarak CAAnimations ile benzer bir blok tamamlama geri bildirimi elde edebilirsiniz. Bu işlem, bu işlemde bulunan tüm animasyonların tamamlanmasında bir blok yürütür. Bu şekilde gitmek isteyip istemediğini düşünecek bir şey. –

1

UIView'ler alt katmanları içerir, bu nedenle bunlar daha ağırdır ve muhtemelen olay ve dokunma işleyicileri/değişkenleri gibi tüm 50 görüntü için gerek duymadığınız şeyler içerir. Bu yüzden katmanları kullanmak muhtemelen biraz daha verimli olur ve her görüntü için görünümleri kullanmaktan biraz daha az bellek kullanır.

1

Bu kadar az sayıda görüntü için fark önemsizdir. En uygun olanı kullan.

+0

Denemelerimde, iPhone 4 üzerinde biraz kekemelik yapmadan önce, yaklaşık 50 resmin canlandırılabileceğini buldum. (Sadece bu sayının, görüntülerin içeriğine/boyutuna, aşağıdaki yarı saydam katmanların sayısına bağlı olarak büyük ölçüde değişebileceğini söyleyebilirim) animasyonlu görüntüler, vb.) –

+0

Ve telefon modeli: D – BallpointBen

0

Animasyon (henüz :-) yapmadım ama okumayı hatırladığım şeyler, üzerinde tırtıklanan tüm 50 ile bir görüntü oluşturmayı ve çizim yaparken yalnızca doğru görüntüyü telafi etmeyi önerir. Bu sayede sadece bir katmana veya UIImage'a ya da onu görüntülemek için ne gerekiyorsa ihtiyacınız var. Hız hakkında bilmiyorum, ama sanırım hafızayı kurtarırdı ve yönetmesi ve kodlaması daha kolay olurdu.

+0

Bu genellikle bir "hareketli" olarak adlandırılır ve OpenGL animasyonları için geçerlidir, ancak CoreAnimation için geçerli değildir. –