【问题标题】:Swipe direction PageViewController滑动方向 PageViewController
【发布时间】:2017-03-18 04:08:36
【问题描述】:

我的问题是我使用 pageViewController 实现时的滑动动作。我希望它是从右到左的,但它是从左到右的,这不适合 UI 体验!

当我使用 Xcode 7 和 Swift 2.2 时,它运行良好...... 因此,由于我复制/粘贴了我的代码并使用 Xcode 8 建议进行了修改,因此它具有这种奇怪的行为。

import UIKit

class FirstEventViewController: UIViewController {

    // FIXME: - The swipe gesture has to be from right to left when the view appears (PageControl not showing)
    var pageViewController: UIPageViewController!
    var titleEvents = [String]()
    var pageImages: NSArray!

    override func viewDidLoad() {
        super.viewDidLoad()

        pageImages = NSArray(objects: "supersmashbros","spiritodjsession","thomasdelortrio")
        titleEvents = ["supersmashbros","spiritodjsession","thomasdelortrio"]

        initiatePgVC()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


    // MARK: - Navigation

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        //TODO: CODE HERE
    }

    // MARK: - Private functions
    /**
     Function initializing the logic of the pageviewController
    */

    func initiatePgVC() {
        pageViewController = UIStoryboard(name:"Main", bundle:nil).instantiateViewController(withIdentifier: "PageViewController") as! UIPageViewController
        pageViewController.dataSource = self

        let startVC = viewControllerAtIndex(index: 0)
        let viewControllers = NSArray(object: startVC) as! [UIViewController]

        pageViewController.setViewControllers(viewControllers, direction: .forward, animated: true, completion: nil)

        //pageViewController.view.frame = CGRect(x:0, y:65, width:self.view.frame.width, height:self.view.frame.size.height - 140)
        pageViewController.view.frame = self.view.bounds

        addChildViewController(pageViewController)
        view.addSubview(pageViewController.view)
        pageViewController.didMove(toParentViewController: self)
    }

    /**
     Function associating the viewControllers
    */
    func viewControllerAtIndex(index: Int)->SecondEventViewController{
        if ((titleEvents.count == 0) || (index >= titleEvents.count)){
            return SecondEventViewController()
        }

        let vc:SecondEventViewController = storyboard?.instantiateViewController(withIdentifier: "SecondEventViewController") as! SecondEventViewController

        vc.imageFile = pageImages[index] as! String
        vc.labelTitle = titleEvents[index]
        vc.pageIndex = index

        return vc
    }
    }

    extension FirstEventViewController:UINavigationBarDelegate{
        func position(for bar: UIBarPositioning) -> UIBarPosition {
            return .topAttached
        }
        }

    extension FirstEventViewController:UIPageViewControllerDataSource{
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
            let vc = viewController as! SecondEventViewController
            var index = vc.pageIndex as Int
            if (index == 0 || index == NSNotFound){
                return nil
            }

        index = index-1
        return viewControllerAtIndex(index: index)
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        let vc = viewController as! SecondEventViewController
        var index = vc.pageIndex as Int
        if (index == NSNotFound){
            return nil
        }

        index = index+1
        if (index == titleEvents.count){
            return nil
        }
        return viewControllerAtIndex(index: index)

    }

    func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
        return titleEvents.count
    }

    func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
        return 0
    }

}

我曾经怀疑pageViewController.setViewControllers(viewControllers, direction: .forward, animated: true, completion: nil),因为它实现了方向,但即使我用反向改变,也没有任何反应。

【问题讨论】:

    标签: ios xcode swift3 ios10 uipageviewcontroller


    【解决方案1】:

    您是否以错误的方式更改索引?

    对于 after 控制器,我希望索引会增加,但您正在减少它,反之亦然。

    尝试交换这些,所以之后应该是 + 1 和之前 -1

    index = index+1
    

    【讨论】:

    • 是的,差不多。你给了我一个线索。确实我不得不交换这两种方法,我的 viewControllerAfter 变成了我的 viewControllerBefore 反之亦然,就像你说的那样,是索引错了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 2016-08-09
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多