2014-08-28 28 views
5

Üç okun görünürden görünmez görünmesine alternatif olarak bir efekt oluşturmaya çalışıyorum.[UIView animateKeyframesWithDuration] kullanarak UIView'i canlandıran garip davranış

Her okun farklı bir alfa değerinden başlayacağı basit bir algoritma yaptım (eğer 3 ok varsa, birincisi alpha = 1, ikincisi alfa = 0.6667, alfa = üçüncü) 0,3337).

  • değiştirme 0 mevcut alfa den ok donukluk (süre hesaplanır)
  • 1 Değişim 1
  • anında ok opaklık ok şeffaflığını: Daha sonra bir anahtar çerçeve animasyon başlatmak bazı adım nedense atlanır görünüyor Ancak ilk değere

ayarlayın.

basit bir örnek: Bu durumda

[UIView animateKeyframesWithDuration:2 delay:0 options:UIViewKeyframeAnimationOptionCalculationModeLinear | UIViewKeyframeAnimationOptionRepeat animations:^{ 

    [UIView addKeyframeWithRelativeStartTime:0 relativeDuration:0 animations:^{ 
     _animatedView.alpha = 0.5; 
    }]; 

    [UIView addKeyframeWithRelativeStartTime:0 relativeDuration:0.5 animations:^{ 
     _animatedView.alpha = 0; 
    }]; 

    [UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0 animations:^{ 
     _animatedView.alpha = 1; 
    }]; 

    [UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.5 animations:^{ 
     _animatedView.alpha = 0.5; 
    }]; 

} completion:nil]; 

1 saniyede 0 anında 0.5, 0.5 gitmek gerekir, 1 saniyede 0.5 anında 1, 1 'e gidin. Bu nedenle, görünüşe benzeyen ve kaybolan görünüme benzeyen kesintisiz bir geçiş yapmalı, ancak animasyon birkaç kez alfa = 0.5 üzerinde sıkışmış gibi görünüyor.

aynı şekilde N görüşlerini animasyon istediğiniz durumda
[UIView animateKeyframesWithDuration:2 delay:0 options:UIViewKeyframeAnimationOptionCalculationModeLinear | UIViewKeyframeAnimationOptionRepeat animations:^{ 
    [UIView addKeyframeWithRelativeStartTime:0 relativeDuration:0 animations:^{ 
     _animatedView.alpha = 1; 
    }]; 
    [UIView addKeyframeWithRelativeStartTime:0 relativeDuration:1 animations:^{ 
     _animatedView.alpha = 0; 
    }]; 
} completion:nil]; 
+0

bu anahtar kare animasyon kullanarak sanki

Teorik olarak, etki aynı olmalıdır Bunu yapmak, göreli animasyon başlatma ve süre ofseti ile animasyon gruplarının kullanılmasına benzer. Aynı şeyi bir kez daha yapmaya çalıştım. Bir şekil katmanı içindeki 4 farklı yol arasında kesintisiz geçişi canlandırmaya çalışmak. Benim deneyimim, bir nedenden dolayı düzgün çalışmadıklarıdır (çok denedim). Sonra katmanlarım için kendi tamamlama blok mantığımı yazdım ve bunun içinde bir animasyonu diğerini tamamladıktan sonra tetikledim. Kod biraz aptal görünüyordu, ama animasyon cazibe gibi çalıştı :). Yani belki aynı çizgileri deneyebilirsiniz. – croyneaus4u

cevap

0

: Eğer çalıştığınız Ne

CGFloat count = [self.animatedViews count]; 
CGFloat period = 1.0f/count; 

__weak NSArray *weakViews = self.animatedViews; 

[UIView animateKeyframesWithDuration:2.0f delay:0 options:UIViewKeyframeAnimationOptionCalculationModeLinear | UIViewKeyframeAnimationOptionRepeat animations:^{ 

    for (NSUInteger index = 0; index < count; ++index) { 
     UIView *animatedView = weakViews[index]; 

     CGFloat startDelay = period * index; 

     [UIView addKeyframeWithRelativeStartTime:0 relativeDuration:0 animations:^{ 
      animatedView.alpha = startDelay; 
     }]; 

     [UIView addKeyframeWithRelativeStartTime:0.0f relativeDuration:startDelay animations:^{ 
      animatedView.alpha = 0.0f; 
     }]; 

     [UIView addKeyframeWithRelativeStartTime:startDelay relativeDuration:0.0f animations:^{ 
      animatedView.alpha = 1.0f; 
     }]; 

     [UIView addKeyframeWithRelativeStartTime:startDelay relativeDuration:(1.0f - startDelay) animations:^{ 
      animatedView.alpha = startDelay; 
     }]; 
    } 
} completion:nil]; 
+0

Bu, yaptığım tam bir uygulama ve bazı nedenlerden dolayı doğru çalışmıyor. İlk ok diğerlerinin düzgün çalışmaz. Tüm oklardaki etki biraz farklı olsa da, okların her birine bakarsanız, bazılarının 1'den 0'a kesintisiz bir alfa geçişi yapmadığını göreceksiniz. – rFlex

+0

Tüm okların animasyonu (ilk hariç) yeterli değil dikişsiz? Tek sorun bu mu? –

+0

Evet, yakından bakarsanız, bazı görüşler hiçbir zaman 0'a ulaşmaz ve bir kaç kez başlangıç ​​alfalarına yapışmaz. – rFlex

İlgili konular