在UIPageViewController中获取用户滑动方向

切萨雷

这两种方法viewControllerBeforeViewControllerviewControllerAfterViewController方法UIPageViewControllerDataSource不能告诉您滑动的方向。

该方法transitionCompleted的的UIPageViewController委托不帮助我们,所以尽管。它只是告诉页面是否被完全刷了。

那么我应该使用哪种方法来准确地检测用户方向(向左还是向右)?

这两个属性可能会有所帮助:

let directionForward = UIPageViewControllerNavigationDirection.Forward
let directionReverse = UIPageViewControllerNavigationDirection.Reverse

我的代码如下所示:

import UIKit

class ProView: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

var pageViewController: UIPageViewController?

let characterImages = ["character1", "character2", "character1", "character2", "character1", "character2", "character1", "character2"]

override func viewDidLoad() {
    super.viewDidLoad()
    createPageViewController()
    setupPageControl()

    character = 1
}

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

// Forward, check if this IS NOT the last controller
func pageViewController(pageViewController: UIPageViewController,
    viewControllerAfterViewController ProView: UIViewController) -> UIViewController? {

        let itemController = ProView as PageItemController

        // Check if there is another view
        if itemController.itemIndex+1 < characterImages.count {

            return getItemController(itemController.itemIndex+1)
        }

        return nil
}


// Check if this IS NOT the first controller
func pageViewController(pageViewController: UIPageViewController,
    viewControllerBeforeViewController ProView: UIViewController) -> UIViewController? {

    let itemController = ProView as PageItemController

        if itemController.itemIndex < 0 {

            return getItemController(itemController.itemIndex-1)
        }

        return nil
}

private func getItemController(itemIndex: Int) -> PageItemController? {

    if itemIndex < characterImages.count {
        let pageItemController = self.storyboard!.instantiateViewControllerWithIdentifier("ItemController") as PageItemController
        pageItemController.itemIndex = itemIndex
        pageItemController.imageName = characterImages[itemIndex]
        return pageItemController
}

    return nil
}

func createPageViewController() {

    let pageController = self.storyboard!.instantiateViewControllerWithIdentifier("PageController") as UIPageViewController
    pageController.dataSource = self
    pageController.delegate = self

    if characterImages.count > 0 {
        let firstController = getItemController(0)!
        let startingViewControllers: NSArray = [firstController]
        pageController.setViewControllers(startingViewControllers, direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
    }

    pageViewController = pageController
    addChildViewController(pageViewController!)
    self.view.addSubview(pageViewController!.view)
    pageViewController?.didMoveToParentViewController(self)
}

func setupPageControl() {
    let appearance = UIPageControl.appearance()
    appearance.pageIndicatorTintColor = UIColor.grayColor()
    appearance.currentPageIndicatorTintColor = UIColor.whiteColor()
}

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

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {


}

// BETA

func pageViewController(PageItemController: UIPageViewController,
    didFinishAnimating finished: Bool,
    previousViewControllers pageViewController: [AnyObject],
    transitionCompleted completed: Bool)
{

    if (!completed)
    {
        // You do nothing because whatever page you thought
        // the book was on before the gesture started is still the correct page
        return;
    }

    // This is where you would know the page number changed and handle it appropriately

    character = workaround

    }


}

class PageItemController: UIViewController {

@IBOutlet weak var imageCharacterChoose: UIImageView!

var itemIndex: Int = 0
var imageName: String = "" {
    didSet {

        if let imageView = imageCharacterChoose {imageCharacterChoose.image = UIImage(named: imageName)
        }

    }
}
}

根据pbasdf所说,

var currentIndex: Int = 0
var nextIndex: Int = 0

func pageViewController(PageItemController: UIPageViewController,
    willTransitionToViewControllers pageViewController: [AnyObject]) {

        //                          pageViewController is the pending View Controller
        nextIndex = currentIndex

        // pageViewController...... how do I get its index?
}
pbasdf

您应该同时使用willTransitionToViewControllers:didFinishAnimating:委托方法来确定转换是向前还是向后。在课程开始时声明几个索引变量,例如currentIndexnextIndex(均为Int)。

willTransitionToViewControllers方法中,将nextIndex等于设置itemIndex为未决视图控制器的:

编辑

func pageViewController(pageViewController: UIPageViewController, willTransitionToViewControllers pendingViewControllers: [AnyObject]) {
    // the page view controller is about to transition to a new page, so take note
    // of the index of the page it will display.  (We can't update our currentIndex
    // yet, because the transition might not be completed - we will check in didFinishAnimating:)
    if let itemController = pendingViewControllers[0] as? PageItemController {
        nextIndex = itemController.itemIndex
    }
}

结束编辑

您可以在此时确定转换是前进还是后退:如果nextIndex> currentIndex,则前进;如果nextIndex<currentIndex则向后。然后,在中didFinishAnimating,如果completed为true(因此它完成了向下一个视图控制器的转换),请将其设置currentIndex为,nextIndex以便您可以currentIndex在需要指示任何当前屏幕页面的地方使用它:

编辑

func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [AnyObject], transitionCompleted completed: Bool) {
    if (completed) {
        // the page view controller has successfully transitioned to the next view
        // controller, so we can update our currentIndex to the value we obtained 
        // in the willTransitionToViewControllers method:
        currentIndex = nextIndex

    }
}

请注意,这些方法的第一个参数是pageViewController(UIPageViewController的实例),而不是pageItemController当前代码中的那个。

最后,仅需注意:您引用(UIPageViewControllerNavigationDirection)的枚举仅在setViewControllers(_, direction:)方法中使用。

结束编辑

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在JavaScript中获取用户输入

来自分类Dev

在JavaScript中获取用户输入

来自分类Dev

在Android中获取用户的每日路线?

来自分类Dev

从FOSUserBundle中的登录用户获取用户ID

来自分类Dev

在Session_OnEnd中获取用户

来自分类Dev

从Django中的用户名获取用户对象

来自分类Dev

在Powershell中获取用户ID的姓氏

来自分类Dev

从Java解析中获取用户

来自分类Dev

在WxPython中获取用户输入

来自分类Dev

在DataGridView中获取用户添加的行

来自分类Dev

在UIPageViewController中禁用滑动

来自分类Dev

无法在android中获取用户currentLocation

来自分类Dev

在Meteor中创建用户期间如何获取用户ID?

来自分类Dev

在直接消息松弛通道中获取用户的用户ID

来自分类Dev

在Azure Pipelines中获取用户ID

来自分类Dev

在bash脚本中获取用户输入

来自分类Dev

获取用户密码

来自分类Dev

在Android中获取用户的Gmail ID

来自分类Dev

在BaseController中获取用户IP?

来自分类Dev

在Android中获取用户的每日路线?

来自分类Dev

在JavaScript中获取用户输入

来自分类Dev

在Android中获取用户当前的城市

来自分类Dev

在validateloginattempt中获取用户ip

来自分类Dev

在ModelForms中获取用户OneToOneField字段

来自分类Dev

从 ID 中获取用户名

来自分类Dev

在 Django 中获取用户关注的主题?

来自分类Dev

从嵌套函数中获取用户输入

来自分类Dev

在 PHP 中获取用户的语言

来自分类Dev

从查询中获取用户的投票