2011-07-19 9 views
10

Başlangıçta bulanık olduğu bir şeyi canlandırmaya çalışıyorum. Tamam çalışıyor, ama animasyon bittiğinde hala biraz bulanık. Bunu yanlış mı yapıyorum?Çekirdek animasyonunu kullanarak bir gauss bulanıklığı mı oluşturuluyor?

CABasicAnimation* blurAnimation = [CABasicAnimation animation]; 
CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"]; 
[blurFilter setDefaults]; 
[blurFilter setValue:[NSNumber numberWithFloat:0.0] forKey:@"inputRadius"]; 
[blurFilter setName:@"blur"]; 
[[self layer] setFilters:[NSArray arrayWithObject:blurFilter]]; 

blurAnimation.keyPath = @"filters.blur.inputRadius"; 
blurAnimation.fromValue = [NSNumber numberWithFloat:10.0f]; 
blurAnimation.toValue = [NSNumber numberWithFloat:1.0]; 
blurAnimation.duration = 1.2; 

[self.layer addAnimation:blurAnimation forKey:@"blurAnimation"]; 
+0

Sadece iOS'ta bunu yapmak isteyen herkes için bir FYI ... maalesef henüz desteklenmiyor. Umarım gelecekte bu işlevselliği alırız. – user3344977

cevap

9

Sorununuz, animasyonun durması ve otomatik olarak kaldırılmasıdır; ancak filtre, uygulanan en küçük bulanıklıkla kalmaktadır.

Yapmak istediğiniz şey, animasyon tamamlandığında bulanıklık filtresini kaldırmaktır. CABasicAnimation örneğine bir temsilci eklemeniz ve -[id<CAAnimationDelegate> animationDidStop:finished:] yöntemini uygulamanız gerekir.

Eğer katmana animasyon eklemeden önce bu satırı ekleyin self oldukça basit olmalıdır bu durumda temsilci olsun edin:

blurAnimation.delegate = self; 

Ve callback'inde eşit basittir:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag { 
    [[self layer] setFilters:nil]; 
} 
2

Bir bulanıklaştırmayı canlandırmanın en iyi yolunu arıyorsanız, görünümünüzün tek bir bulanık görüntüsünü oluşturmanızı ve ardından, orijinal görüntünüzün üst kısmındaki alfa 0'dan 1'e kadar bulanık görüntüyü silmenizi öneririm. Testlerde güzel ve hızlı görünüyor.

İlgili konular