【问题标题】:How can I swipe between view controllers?如何在视图控制器之间滑动?
【发布时间】:2016-11-16 15:53:55
【问题描述】:

我想为我的应用添加滑动操作。基本上我有 5 个视图控制器和我的主视图控制器。在我的主视图控制器上,我有一个视图,我正在将其他 5 个视图控制器的内容调用到该视图。我想刷这 5 个视图控制器。

我的代码:

import UIKit

class TabViewController: UIViewController {


    @IBOutlet var contentView: UIView!
    @IBOutlet var buttons: [UIButton]!
    @IBOutlet var backgroundView: UIImageView!


    var movingView = UIView()

    var rifleViewController: UIViewController!
    var pistolViewController: UIViewController!
    var shotgunViewController: UIViewController!
    var smgsViewController: UIViewController!
    var sniperViewController: UIViewController!

    var viewControllers: [UIViewController]!
    var selectedIndex: Int = 0

    override func viewDidLoad() {
        super.viewDidLoad()

        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        rifleViewController = storyboard.instantiateViewController(withIdentifier: "rifles")
        sniperViewController = storyboard.instantiateViewController(withIdentifier: "snipers")
        smgsViewController = storyboard.instantiateViewController(withIdentifier: "smgss")
        shotgunViewController = storyboard.instantiateViewController(withIdentifier: "shotguns")
        pistolViewController = storyboard.instantiateViewController(withIdentifier: "pistols")
        viewControllers = [rifleViewController,
                           pistolViewController,
                           shotgunViewController,
                           smgsViewController,
                           sniperViewController]

        buttons[selectedIndex].isSelected = true
        didPressTab(buttons[selectedIndex])

        let screenWidth = UIScreen.main.bounds.width
        movingView = UIView(frame: CGRect(x: 0, y: 80, width: screenWidth / 5, height: 5))
        movingView.backgroundColor = UIColor.white
        backgroundView.addSubview(movingView)


    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func didPressTab(_ sender: UIButton) {

        let previousIndex = selectedIndex

        selectedIndex = sender.tag

        buttons[previousIndex].isSelected = false
        let previousVC = viewControllers[previousIndex]

        previousVC.willMove(toParentViewController: nil)
        previousVC.view.removeFromSuperview()
        previousVC.removeFromParentViewController()

        sender.isSelected = true

        let vc = viewControllers[selectedIndex]

        addChildViewController(vc)

        vc.view.frame = contentView.bounds
        contentView.addSubview(vc.view)
        vc.didMove(toParentViewController: self)

        let newx = sender.frame.origin.x

        UIView.animate(withDuration: 0.2) {
            self.movingView.frame.origin.x = newx
        }


        }

}

【问题讨论】:

    标签: ios swift uiviewcontroller uistoryboard swipe


    【解决方案1】:

    你必须去UIPageViewController

    使用setViewControllers(_:direction:animated:completion:),您可以设置视图控制器数组,还可以自定义动画。

    【讨论】:

    【解决方案2】:

    在你所有的 viewController 上添加两个 Swipe Gesture Recognizer。注意你真的将它们拖放到层次结构中的View Controller,否则它可能不起作用(对于最左边和最右边的视图控制器,你只需添加一个swipe gesture recognizer)。在将Swipe Gesture Recognizerper 视图控制器之一的属性检查器中的Swipe 选项从标准Left 更改为Right 之后。
    从每个视图控制器创建到下一个 Showseague 和一个返回。给他们一个你能记住的Identifier。然后将类似的内容写入每个ViewController.swift 并将@IBAction 与每个相应视图控制器的两个Swipe Gesture Recognizer 链接:

     @IBAction func didSwipe(_ sender: UISwipeGestureRecognizer) {
          if sender.direction == UISwipeGestureRecognizerDirection.left {
              performSegue(withIdentifier: "identifierOfSegue", sender: nil)
          }
    
          if sender.direction == UISwipeGestureRecognizerDirection.right {
              performSegue(withIdentifier: "identifierOfOtheSegue", sender: nil)
          }
     }
    

    【讨论】:

      【解决方案3】:

      我不知道我是否理解了您的问题,但您可以(从 Interface Builder)添加 UIGestureRecognizer(用于滑动操作)到视图中,并在该手势的选择器中显示您想要的视图显示。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-02
        • 2013-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多