うるおいらんど

UITabBarController上をスワイプで画面遷移する方法【Swift】

追記があります。

UITabBarControllerを久々に見ると??って感じなんですが、スワイプで遷移する方法はわりと簡単でした。通常のタップで遷移はストーリーボード上で行っていますが正直あんまり覚えてないです。また最初から付けるときがあったら記事にしたいと思います・・・・。

 

まずUITabBarというのはこういう下のボタンをタップすると画面遷移するやつ

 

Simulator Screen Shot 2016.03.03 22.15.32

よくみるやつです。

これをスワイプで画面切り替えする方法です。

(ちなみに画像は私のアプリpocket時間割ですぞ)

 

まずUISwipeGestureRecognizerを用意します。

var swipe:UISwipeGestureRecognizer?

そして適当にviewDidLoadの中にでも書いていきましょう

override func viewDidLoad() {
       super.viewDidLoad()        
     swipe = UISwipeGestureRecognizer()
       //スワイプの方向を決める
       swipe!.direction = .Right
       //スワイプするときの指の本数
       swipe!.numberOfTouchesRequired = 1
       //スワイプしたときのアクション
       swipe!.addTarget(self, action: "swipeRight")
       //viewにスワイプジェスチャーを配置
       self.view.addGestureRecognizer(swipe!)
}

後はスワイプしたときのアクションを書きます

func swipeRight(){
    self.tabBarController!.selectedIndex = 1
}

 

このself.tabBarController.selectedIndexはUITabBarControllerに設定した配列の順だそうで。

ストーリーボード上のBarItemのタグの番号ではないですので注意です

スクリーンショット-2016-03-03-23.00.46

普通に横並びで0,1,2で番号がついていると思われるのですが、とりあえずどこに飛ぶか試してみると良いと思います!

 

それぞれのViewControllerに右スワイプで移動、左スワイプで移動を付け足せば遷移するようになります。

 

全体のコード

class ViewController:UIViewController{
     var swipe:UISwipeGestureRecognizer?
     override func viewDidLoad() {
          super.viewDidLoad()
          swipe = UISwipeGestureRecognizer()
          swipe!.direction = .Left
          swipe!.numberOfTouchesRequired = 1
          swipe!.addTarget(self, action: "swipeLeft")
          self.view.addGestureRecognizer(swipe!)
     }
   func swipeLeft(){
        print("swipeLeft")
        self.tabBarController!.selectedIndex = 1
    }
}

 

LeftとRightが先ほどと入れ替わっているので少し注意です。。。

 

スワイプで移動できるんだーってわかりやすくするにはアニメーションとかつけた方がいいとは思います(頑張ります)

 

参考リンク

Additional Notes追記

Swift4で

おきかえ〜

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let swipe = UISwipeGestureRecognizer()
        swipe.direction = .left
        swipe.numberOfTouchesRequired = 1
        swipe.addTarget(self, action: #selector(self.swipeLeft(sender:)))
        self.view.addGestureRecognizer(swipe)
    }
    
    @objc func swipeLeft(sender:UISwipeGestureRecognizer) {
        self.tabBarController?.selectedIndex = 1
    }

selectedIndexするだけで遷移できるもんだっけ。記憶ないや。

最近はこういうやり方ではなくUIPageViewControllerと組み合わせて使ってます。

Comments

コメントはありません。

現在コメントフォームは工事中です。