UIImageViewですりガラス効果を適用しようとしています。
この質問で見つけたものを実装しようとしましたが、結果は受け入れられませんでした。私はこのようなものが欲しかった:
また、iOS7は多くの場所でこの種の効果を使用していることがわかります。どうすれば再現できますか?
UIImageViewですりガラス効果を適用しようとしています。
この質問で見つけたものを実装しようとしましたが、結果は受け入れられませんでした。私はこのようなものが欲しかった:
また、iOS7は多くの場所でこの種の効果を使用していることがわかります。どうすれば再現できますか?
CoreImage に関する優れたチュートリアルがここにあり、フィルターの適用方法などを示しています。
http://www.raywenderlich.com/5689/beginning-core-image-in-ios-5
更新 1
そのため、少し調査した結果、ライブラリの OS X バージョンと比較すると、iOS の Core Image がまだ不完全であることがわかりました。それで私はよくグーグルで検索し、2 つの解決策を見つけました。1 つはより単純で、もう 1 つははるかに広範で複雑なライブラリです。
シンプルで短い解決策: https://github.com/esilverberg/ios-image-filters
この編集のすばらしさ、OpenGL で画像や動画を処理するためのライブラリ、 Brad Larsonによる GPUImage 。Core Image よりもはるかに高速で効率的です。はじめに: http://www.sunsetlakesoftware.com/2012/02/12/introducing-gpuimage-framework . GitHub: GPU イメージ
したがって、たとえば、数行で目的の結果を得ることができます (ここで、originalImage は効果を適用する UIImage です)。
GPUImageGaussianBlurFilter *blurFilter = [[GPUImageGaussianBlurFilter alloc] init];
blurFilter.blurSize = 2;
UIImage *blurImage = [blurFilter imageByFilteringImage:resizedImage];
更新 2
Apple が iOS 7 を発表した後、Apple がそのための API を提供していなかったため、一部の開発者は、Apple がデフォルトの iOS アプリで行ったのと同じ回避策を見つけました。私の意見では、最も簡単でより良い解決策はこれです。なぜそれが最高だと思うのですか?背後の一部のビューが移動しても、ブラーは更新された効果でうまく機能するため、期待どおりに機能するはずです. ただし、動作は iOS 7 SDK に依存しているため、Apple が UIToolbar を変更するとリスクが生じる可能性があることに注意してください。
更新 3
Apple は、WWDC 2013 (セッション 226 - iOS での魅力的な UI の実装) で、UIImage+ImageEffectsと呼ばれる UIImage のカテゴリ クラスを提供すると述べました(私はそれをグーグルで検索し、ここで見つけましたが、開発者ポータルで利用できます- で UIImageEffects を検索してください)。検索ボックス)。このカテゴリでは、いくつかの方法 (明るい、暗い、特定の色など) を使用して、静的 UIImage にぼかしを適用できます。また、昨日このコンポーネントを見て、(上記のカテゴリに基づいて) エフェクトをフレームに適用できるので、非常に興味深いと思いました。
更新 4
最後に、iOS 8 で、Apple はライブ ブラーを簡単に実行できる新しいクラスをリリースしました。UIVisualEffect
とを使用するとUIVisualEffectView
、アプリにライブ ブラーをすばやく追加できます。これらのクラスの使用方法に関する Ryan Nystrom の優れたチュートリアル (および一般的なぼかし) を次に示します。
CoreImage または CoreGraphics をまったく使用しない iOS 7 および 8 のソリューション:
- (void)addBlurToView:(UIView *)view {
UIView *blurView = nil;
if([UIBlurEffect class]) { // iOS 8
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight];
blurView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
blurView.frame = view.frame;
} else { // workaround for iOS 7
blurView = [[UIToolbar alloc] initWithFrame:view.bounds];
}
[blurView setTranslatesAutoresizingMaskIntoConstraints:NO];
[view addSubview:blurView];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[blurView]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(blurView)]];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[blurView]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(blurView)]];
}
(iOS 7 よりも古いバージョンをターゲットにしていないと仮定します。ターゲットにしている場合は、else
ブロック内の iOS バージョンをテストする必要があります)
このソリューションは、画像だけでなく、あらゆるビューに適用されます。
Core Image Programming Guideをご覧ください。スタイライズ フィルターとぼかしフィルターがニーズに合っているようです。私はこれまで Core Image と仕事をしたことがありませんが、それらを含む優れた WWDC セッションがいくつかあると思います。ドキュメントには、サンプル コードの基本的な部分が含まれています。