2011-07-19 8 views
10

私は最初にぼやけていてフォーカスが入っているものをアニメーション化しようとしています。私はそれが正常に動作すると思うが、アニメーションが完了したら、まだ少しぼやけている。私はこれを間違っているのですか?コアアニメーションを使用してガウスぼかしをアニメーション化しますか?

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

。うまくいけば、私たちは将来この機能を得るでしょう。 – user3344977

答えて

9

問題は、アニメーションが停止して自動的に削除されますが、フィルタが適用されているボケが最も少ないことです。あなたが何をしたいか

は、アニメーションが完了したときにぼかしフィルタを削除することです。 CABasicAnimationインスタンスにデリゲートを追加し、-[id<CAAnimationDelegate> animationDidStop:finished:]メソッドを実装する必要があります。

あなたのレイヤーにアニメーションを追加する前にこの行を追加し、selfが、それはかなり単純である必要があり、この場合の代理人であるとする場合:

blurAnimation.delegate = self; 

とコールバックも同様に簡単です:

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag { 
    [[self layer] setFilters:nil]; 
} 
あなたはぼかしをアニメーション化する最適化された方法を探しているなら
2

その後、私はあなたのビューの単一ぼやけた画像を作成し、元のビューの上に1アルファ0からぼやけた画像を退色をお勧めします。テストで素早く素早く見えます。ただ、FYI iOSの上でこれを行うために探している人のために...残念ながらそのまだサポートされていません

関連する問題