6

UITableViewController (UINavigationController のルート) を作成し、これを別のビュー コントローラーの上にモーダルで表示しています。ビューが読み込まれ、viewDidAppear が呼び出されると、視覚効果が良く見えるように、ある程度機能しています。しかし、viewDidAppear の直後に視覚効果がなくなり、テーブルビューの背景が白くなります。

提示された UITableViewController で、これを viewDidLoad に追加しました。

if (NSClassFromString(@"UIVisualEffectView") && !UIAccessibilityIsReduceTransparencyEnabled()) {
    self.tableView.backgroundColor = [UIColor clearColor];
    UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
    UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
    [blurEffectView setFrame:self.tableView.frame];

    self.blurView = blurEffectView;
    self.tableView.backgroundView = self.blurView;
}

セルの背景が明確になるように、これも実装します。

- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
    if (NSClassFromString(@"UIVisualEffectView") ) {
        cell.backgroundColor = [UIColor clearColor];
    }
}

私もcell.backgroundColor = [UIColor clearColor]tableViewに設定しましcellForRowAtIndexPath:たが、それも役に立ちません。

繰り返しますが、ビューが読み込まれると正しい効果が得られますが、画面に表示されるとすぐに背景のぼかしが失われます。何がうまくいかないのでしょうか?また、ビュー コントローラーで blueEffectView をプロパティとして保持しようとしましたが、うまくいきませんでした

4

2 に答える 2

6

ストーリーボードを使用していますか?

モーダルに使用されているビュー コントローラーを選択し (または、別の VC にラップされている場合はラッパーを選択し)、[プレゼンテーション] コンボ ボックスを [全画面表示] または [現在のコンテキスト] に設定します。(実際には違いが何であるかはわかりませんが、どちらも同じことをしているようです。)

Xcode のスクリーンショット

それを行った後、ぼかし効果は Just Work™ になるはずです。また、これは iOS 8 の新機能だと思います。iOS 7 ではまだテストしていません。

于 2014-10-06T19:39:11.257 に答える
3

問題は、View Controller をデフォルト設定でモーダルに表示すると、画面の引き継ぎが完了すると、下にある View Controller が本質的に消去されているように見えることです。これが、プレゼンテーション アニメーションが完了するまで、つまり下にあるビューが消えるまで、ぼかし効果が見栄えがする理由です。

目的の動作を実装するには、セグエ プレゼンテーション スタイルを、既定のフル スクリーンではなくオーバー フル スクリーンなど、基になるビュー コントローラーを保持するものに変更する必要があります。

このモーダル プレゼンテーションを閉じるviewDidAppearと、現在は常に表示されているため、表示側のビュー コントローラーでは呼び出されないことに注意してください。解雇時に何らかの機能を実行するためにそのメソッドに依存していた場合、それはあなたを噛む可能性があります.

于 2014-10-04T03:05:42.680 に答える