IOS7のコントロールセンターに似たコントローラーを作成しようとしています。 WWDCセッション#226から、さまざまな効果でぼやけた画像を取得する方法を学びました
UIGraphicsBeginImageContextWithOptions(image.size, NULL, 0);
[view drawViewHierarchyInRect:rect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
lightImage = [newImage applyLightEffect];
つまり、いくつかの画像をキャプチャ(スクリーンショットを作成)し、ぼかし効果を実行し、必要に応じてこのぼかし画像を使用します。
ただし、一部の動的コンテンツの上でコントロールセンターを開くと、コンテンツと同様にコントロールセンターの背景がぼやけていることがわかります。
誰もこの行動を再現する方法を知っていますか?
私がそれを見る唯一の方法は、コンテンツをキャプチャし、一定の間隔(たとえば、0.5秒)でぼかし効果を作成することです。しかし、冗長に見えます。
ここに私が見つけた準備ができたソリューションがあります:
1。最も予期しないもの:UIToolBarを使用
- (id) initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame]))
{
[self setup];
}
return self;
}
- (id) initWithCoder:(NSCoder *)coder
{
if ((self = [super initWithCoder:coder]))
{
[self setup];
}
return self;
}
- (void) setup
{
if (iOS7OrLater)
{
self.opaque = NO;
self.backgroundColor = [UIColor clearColor];
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:self.bounds];
toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
toolbar.barTintColor = self.tintColor;
[self insertSubview:toolbar atIndex:0];
}
}
UIToolbarはこのニーズに使用できます。これは、彼の唯一の組み込みのぼかしメカニズムを備えているためです。このメカニズムは動的であり、優れています。しかし、悪いことは、何らかの理由で色を無視し、背景を永久に見た目にすることです...
更新:
色の破損を避けるために、barTintColorを使用しないでください。暗いスタイルのぼかしが必要な場合は、ツールバーのスタイルを変更することもできます(UIBarStyleBlackを使用)。
2。 FXBlurView 。
ツールバーとは異なり、より積極的ですが、動的なメカニズムはまだまれであり、実際には静的な背景にのみ使用できます。 (動的= NO)。
IOS8では、 IVisualEffect クラスを使用してビューにぼかし効果を実装できます。
以下のコードを使用して、ビューにぼかし効果を適用できます。
UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame = MYview.bounds;
[MYview addSubview:visualEffectView];
LiveFrostは、ライブブラー用の優れた統合しやすいプロジェクトであることがわかりました。
ナビゲーションバーを使用してぼかしを提供することは、iOS 7を実行している古いデバイスでは機能しません。