菜鸟教程小白 发表于 2022-12-12 12:16:39

ios - 滑动方向 PageViewController


                                            <p><p>我的问题是使用 pageViewController 实现时的滑动 Action 。我希望它从右向左移动,但它是从左向右移动的,这对 UI 体验来说不是天生的!</p>

<p>当我使用 Xcode 7 和 Swift 2.2 时,它工作得很好......
因此,由于我复制/粘贴了我的代码并使用 Xcode 8 建议进行了修改,所以它出现了这种奇怪的行为。</p>

<pre><code>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 = ()
    var pageImages: NSArray!

    override func viewDidLoad() {
      super.viewDidLoad()

      pageImages = NSArray(objects: &#34;supersmashbros&#34;,&#34;spiritodjsession&#34;,&#34;thomasdelortrio&#34;)
      titleEvents = [&#34;supersmashbros&#34;,&#34;spiritodjsession&#34;,&#34;thomasdelortrio&#34;]

      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:&#34;Main&#34;, bundle:nil).instantiateViewController(withIdentifier: &#34;PageViewController&#34;) as! UIPageViewController
      pageViewController.dataSource = self

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

      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)-&gt;SecondEventViewController{
      if ((titleEvents.count == 0) || (index &gt;= titleEvents.count)){
            return SecondEventViewController()
      }

      let vc:SecondEventViewController = storyboard?.instantiateViewController(withIdentifier: &#34;SecondEventViewController&#34;) as! SecondEventViewController

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

      return vc
    }
    }

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

    extension FirstEventViewController:UIPageViewControllerDataSource{
      func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -&gt; 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) -&gt; 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) -&gt; Int {
      return titleEvents.count
    }

    func presentationIndexForPageViewController(pageViewController: UIPageViewController) -&gt; Int {
      return 0
    }

}
</code></pre>

<p>我曾经怀疑 <code>pageViewController.setViewControllers(viewControllers, direction: .forward, animated: true, completion: nil)</code> 因为它实现了方向,但即使我用 reverse 改变,也没有任何反应。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您是否以错误的方式改变了索引?</p>

<p>对于 after controller,我希望索引会增加,但你正在减少它,反之亦然。 </p>

<p>尝试交换它们,所以之后应该是 + 1,之前应该是 -1</p>

<pre><code>index = index+1
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 滑动方向 PageViewController,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/40420727/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/40420727/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 滑动方向 PageViewController