SORU
17 Temmuz 2012, Salı


Objective-C - CABasicAnimation değişiklikleri uygulamadan sonra animasyon?

CABasicAnimation taşımak ve bir resim görüntülemek yeniden boyutlandırmak için kullanıyorum. The superview eklenecek resim görüntülemek istiyorum, animasyon ve superview kaldırıldı.

Oredr benim temsilci aramak için dinliyorum bunu başarmak için CAAnimationGroup ve alır almaz aradım, superview görüntü görünümünü kaldırmak.

Sorun bazen görüntü superview kaldırıldı önce ilk konumda yanıp söner. Bu davranışı önlemek için en iyi yolu nedir?

CAAnimationGroup *animGroup = [CAAnimationGroup animation];
    animGroup.animations = [NSArray arrayWithObjects:moveAnim, scaleAnim, opacityAnim, nil];
    animGroup.duration = .5;
    animGroup.delegate = self;
    [imageView.layer addAnimation:animGroup forKey:nil];

CEVAP
17 Temmuz 2012, Salı


Bir katman için bir animasyon eklediğinizde, animasyon katman özelliklerini değiştirmez. Bunun yerine, sistem katmanın bir kopyasını oluşturur. Orijinal katman katman denir, ve sunu katmanı denir yinelenen. Sunu katman özelliklerine animasyon ilerledikçe değiştirmek, ama model katman özellikleri değişmeden kalır.

Sen animasyon kaldırdığınızda, sistemi Sunum Katmanı, model katmanı ve model katman özellikleri katman çizilir nasıl kontrol bırakarak yok eder. Eğer öyleyse modeli katman özellikleri sunum katman özellikleri son animasyon değer maç yok eğer doğru değilse, katman anında animasyon önce görünüşü için sıfırlanır.

Animasyonun son değerleri model katman özelliklerini ayarlamanız gerekir . bunu düzeltmek için, ^em>sonrakatman animasyon eklemek. Bu sırada katman özelliği değişen bir ekleme yapabilirsiniz, çünkü bunu yapmak istiyorumörtülüile açıkça eklemek istediğiniz animasyon çelişkiye düşecek özelliği, için animasyon. Açık animasyon örtülü animasyon geçersiz kılar emin olmak istiyorum.

Bütün bunları nasıl yapıyorsun? Temel tarifi şöyle:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.fromValue = [NSValue valueWithCGPoint:myLayer.position];
layer.position = newPosition; // HERE I UPDATE THE MODEL LAYER'S PROPERTY
animation.toValue = [NSValue valueWithCGPoint:myLayer.position];
animation.duration = .5;
[myLayer addAnimation:animation forKey:animation.keyPath];

Değiştirmek gerekebilir tam olarak bilmiyorum o yüzden bir animasyon grubu kullanmadım. Ben sadece bu katman için ayrı ayrı animasyon ekleyin.

Ben de daha kolay bir animasyon temsilci kullanmaya çalışmak yerine, bir veya birkaç animasyonlar için bir tamamlanma işleyicisi ayarlamak için [CATransaction setCompletionBlock:] yöntemi kullanın. İşlemin tamamlanmasını engellemek ayarlayın, animasyonlar ekleyin:

[CATransaction begin]; {
    [CATransaction setCompletionBlock:^{
        [self.imageView removeFromSuperview];
    }];
    [self addPositionAnimation];
    [self addScaleAnimation];
    [self addOpacityAnimation];
} [CATransaction commit];

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Arun Kumar

    Arun Kumar

    18 Mart 2010
  • hydejiaqi

    hydejiaqi

    12 Mart 2008
  • Matt Davis

    Matt Davis

    4 ŞUBAT 2006