2017-05-10 23 views
2

iOS 10の時点で、連絡先アプリケーションの実装は非常に面白く、実装はUINavigationBarです。iOS 10の透明と半透明のUINavigationBar状態間の遷移

バーが正常に表示されますが、連絡先をタップすると、ナビゲーションバーの背景が完全に透明になるようにフェードアウトし、半透明効果も縮小されます同時に何もない。

移行が完了したら、戻るボタンとナビゲーションバーの他のコントロールはまだそこにあります。実際に隠されていないことを意味します。

接触・ビュー・コントローラがポップされた場合、アニメーションはバック逆に再生され、さらにはUINavigationControllerの「スワイプバック」機能を介して制御することができます。

Example of the effect

誰がどのように知っていますこの機能を実装しますか? UINavigationBarをサブクラス化し、バックグラウンドビューの状態を手動で制御することでこの効果を得ることができると思いますが、私はサードパーティのナビゲーションバーをステータスバーでうまくプレイすることを発見したので、それを避けることを本当に望んでいます。システムから無料で入手できる方法があるのだろうかと思っています。

+0

私の答えをチェックして、私はそれが動作を知ってみましょう。 – Joe

+0

コードが更新されました.... – Joe

答えて

0

あなたはUIGestureRecognizerUIVisualEffectを使用してtranslucentclearからnavigationBarビューの移行を達成することができます。 メインVC

詳細VC
override func viewWillAppear(_ animated: Bool) { 
    navigationController?.navigationBar.setBackgroundImage(nil, for: UIBarMetrics.default) 
} 

はあなたクラスUIGestureRecognizerDelegateを実装したコードの下に使用します。

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.navigationController?.interactivePopGestureRecognizer?.delegate = self 
} 

override func viewWillAppear(_ animated: Bool) { 
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) 
} 

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
    let navigationBarBlurView = UIView(frame: CGRect(x:0, y:0, width:view.frame.size.width, height: UIApplication.shared.statusBarFrame.height + (navigationController?.navigationBar.frame.height)!)) 
    let blurEffect = UIBlurEffect(style: .light) // Set any style you want(.light or .dark) to achieve different effect. 
    let blurEffectView = UIVisualEffectView(effect: blurEffect) 
    blurEffectView.frame = navigationBarBlurView.bounds 
    blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
    navigationBarBlurView.addSubview(blurEffectView) 
    view.addSubview(navigationBarBlurView) 
    return true 
} 

出力:

enter image description here

+0

ああうわー!あなたはそれが働いているように見えます!うーん、私はあなたのコードを試しましたが、 'statusBarView.addSubview(blurEffectView)'で失敗します。このインスタンスで 'statusBarView'とは何ですか? – TiM

関連する問題