UIVisualEffectView が表示されたときに奇妙なアーティファクトを引き起こしています。UIVisualEffectView は、iOS 7 では使用できないため、ビューの読み込み後にコードに追加されます。
ストリートビュー画像の上にぼやけたテキストの背景を見てください: http://s.swic.name/Z3UL
ぼかしが表示されるまでに 0.1 秒かかります。それ以前は、ぼかしがまだ計算されていないように、低解像度の背景が透けて見えます。
何が起こっているのですか?このコードを使用して awakeFromNib にぼかしを追加しています
- (void)addBlurWithColor:(UIColor *)color andStyle:(UIBlurEffectStyle)style andVibrancy:(BOOL)vibrancy
{
if (UIDevice.supportsVisualEffects && NSClassFromString(@"UIVisualEffectView") && !UIAccessibilityIsReduceTransparencyEnabled()) {
self.backgroundColor = color;
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:style];
UIVisualEffectView *visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame = self.bounds;
visualEffectView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
NSArray *subviews = self.subviews;
[self addSubview:visualEffectView];
[self sendSubviewToBack:visualEffectView];
if (vibrancy) {
UIVibrancyEffect *vibrancyEffect = [UIVibrancyEffect effectForBlurEffect:blurEffect];
UIVisualEffectView *vibrancyEffectView = [[UIVisualEffectView alloc] initWithEffect:vibrancyEffect];
[vibrancyEffectView setFrame:self.bounds];
vibrancyEffectView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
for (UIView *subview in subviews) {
[vibrancyEffectView.contentView addSubview:subview];
}
[[visualEffectView contentView] addSubview:vibrancyEffectView];
}
}
}
編集: ビデオではスロー アニメーションが有効になっているだけで、トランジションは通常のプッシュ セグエです。
Edit2:Interface Builderで「UIVisualEffectView with Blur」をドラッグドロップすると、同じ奇妙な動作が発生するため、上記のコードが原因ではありません。