2017-09-23 4 views
1

ぼかし半径をアニメーション化でき、ブレンドモードでブレンドモード(CGBlendingModeまたはCIFilter)をスタックできるカスタムぼかしビューを実装しようとしています。バックグラウンドで発生するアニメーション/アクションを保存します。背景をダイナミックに保ちながらビューにアニメーション可能なぼかしを追加する

最初にUIVisualEffectViewを試しましたが、アプリの拒否につながる可能性が最も高いprivate APIsにアクセスすることなく、半径をアニメーション化することはできません。

スナップショットを撮ってエフェクトを適用すると、ビューが静的になり、背景の動きがぼかしビューで覆われるという問題があります。

私はFlexMonkey's Blurableも見ましたが、私はスナップショットと同様の結果がありました。

ガイダンスは本当に役に立ちます。 乾杯します

編集:私は何をしようとしているかを実証するためにgifを追加しました。左から右に移動する赤いビューは、その下のコンテンツをぼかして、その背後にある赤/青の四角形で発生するアニメーションを表示しながら拡大します。

enter image description here

+1

「UIViewEffectView」を試して、アルファをアニメーション化することをお勧めします。これは、半径をアニメートするのと同じではありませんが、まともな効果をもたらします(あなたの意図は、ぼかしからぼかしに変わることを前提としています)。 – Rob

+0

私はそれを最初に試みましたが、アルファを減らすことは、背景がぼやけずに霧のように見えるようにしました。理想的には、ぼかし半径とブレンディングモードを制御できるUIVisualEffectViewを再作成したいと考えています。 – elfanek

答えて

1

ブレンドモードは非常にトリッキーであり、私はそれがライブのUIView(GPUImageかもしれないここでヘルプ)が、(0とUIViewEffectViewのフルぼかし間)ぼかし半径をアニメーションに適用することが可能ですわからないんだけどthis methodを介して可能である:

私たちはアニメーションを追加し、その後、我々は層のTIMEOFFSETを調整することにより、効果の進行を制御することができ、レイヤのアニメーションを一時停止する場合は、そうUIBlurEffectStyleDarkのような効果にnil効果からアニメーション化することができます!

- (void) setupBlur { 
    // Setup the blur to start with no effect 
    self.blurredEffectView = [[UIVisualEffectView alloc] initWithEffect:nil]; 

    // Add animation to desired blur effect 
    [UIView animateWithDuration:1.0 animations:^{ 
     [self.blurredEffectView setEffect:[UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]]; 
    }]; 

    // Pause layer animations 
    self.blurredEffectView.layer.speed = 0; 
} 

0.0及び1.0(アニメーション時間)の間のボケの調整:

- (void) adjustBlur:(CGFloat)blurIntensity { 
    self.blurredEffectView.layer.timeOffset = blurIntensity; 
} 

注:をこのUIBlurEffectアニメーションがサポートされていないIOSの8で動作しません。

関連する問題