1

アプリケーションで MMDrawerController を使用しようとしていますが、中央のビューでジェスチャを使用してサイド ドロワーを閉じることができません。アプリの別の場所で MMDrawerController を使用して大きな成功を収めましたが、この場合に機能しない理由がわかりません。

最上位のビュー コントローラーは UINavigationController であり、そのデフォルトのビュー コントローラーは MasterViewController (以下のソース) です。このクラスは MMDrawerController を拡張し、必要なビューを構成します (中央と右、クローズ ジェスチャ、最大幅)。中央のビューには、引き出しを開くボタンがあります。引き出しが開いたら、中央のビューでジェスチャーで閉じることができません。ドロワーにボタンを追加し、プログラムでドロワーを閉じることができますが、中央のビューでタブ/パンできるようにする必要があります。

class MasterViewController:MMDrawerController {

override func viewDidLoad() {
    let centerView = storyboard!.instantiateViewControllerWithIdentifier("CenterControllerName") as? CenterControllerType
    super.setCenterViewController(centerView, withCloseAnimation: false, completion: nil)
    let drawer = storyboard!.instantiateViewControllerWithIdentifier("Drawer") as? DrawerType
    super.rightDrawerViewController = drawer
    super.setMaximumRightDrawerWidth(200, animated: true, completion: nil)
    super.closeDrawerGestureModeMask = MMCloseDrawerGestureMode.PanningCenterView | MMCloseDrawerGestureMode.TapCenterView
}

}

引き出しを開く関数:

@IBAction func drawerButtonPressed(sender: AnyObject) {
    drawer?.openDrawerSide(MMDrawerSide.Right, animated: true, completion: nil)
}
4

2 に答える 2

0

わかりましたので、同じ問題に遭遇しました。これは次のことから来ているとほぼ確信しています。

guddrawing.png

OK、VC1 (星印付き) はアプリケーションのホーム、VC2 は左のドロワー、VC3 は DrawerController です。

長い間、ジェスチャー機能を VC1 と VC2 に入れようとしましたが、VC1 で開き、VC2 で閉じるしか動作しませんでした。VC1 で使用した関数:

let rightSwipe = UISwipeGestureRecognizer(target: self, action: Selector("showDrawer:"))

rightSwipe.direction = .Right
view.addGestureRecognizer(rightSwipe)

...

  func showDrawer(sender: UISwipeGestureRecognizer) {
    if let m = mmdc {
      if !m.isLeftDrawerOpen() {
        m.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil)
      }
    }
  }

VC2 の同じものですが、LeftSwipe と closeDrawer があります。

解決策は、これらの機能とジェスチャ認識エンジンの両方を VC3 (DrawerController) に配置することです。

問題は、ジェスチャが特定の VC に対して定義されているという事実から来ていますが、ドロワーを開くと、現在の VC が新しいものに変更され、以前の VC は表示されるだけで対話できません。VC1/VC2のparentVCに物を入れることで問題が解決します。

于 2016-01-13T08:58:33.540 に答える