ios - 如何指示用户滑动的方向,而不是 Swift 中的下一个和上一个 View Controller ?

标签 ios swift uipageviewcontroller

如何指示用户滑动的方向,而不是下一个和上一个 View Controller ?

我已成功设置 UIPageViewControllerDataSource 委托(delegate)。

gif1

这些函数并不指示用户滑动的方向,而是指示下一个和上一个 View Controller 。

func pageViewController(pageViewController: UIPageViewController,
viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?

func pageViewController(_ pageViewController: UIPageViewController,
viewControllerAfterViewController viewController: UIViewController) -> UIViewController?

我试过用这个方法:

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

UIPageViewControllerDelegate 一起提供。 我发现很难将此方法集成到我使用的代码中,如下所示:

import UIKit

class ProView: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

var pageViewController: UIPageViewController?

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

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

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

func pageViewController(pageViewController: UIPageViewController,
    viewControllerAfterViewController ProView: UIViewController) -> UIViewController? {

        let itemController = ProView as PageItemController

        if itemController.itemIndex+1 < characterImages.count {
            return getItemController(itemController.itemIndex+1)
        }

        return nil
}

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

    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 {
    return 0
}

func pageViewController(pageViewController: UIPageViewController,
    didFinishAnimating finished: Bool,
    previousViewControllers ProView: [AnyObject],
    transitionCompleted completed: Bool) {
        if completed {
            println("completed!")
        } else {
            println("not completed")
        }
}

}

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)
        }

    }
}

override func viewDidLoad() {
    super.viewDidLoad()

    imageCharacterChoose!.image = UIImage(named: imageName)

}

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

}

我需要获取用户正在浏览的 View Controller 的itemIndex,但我该怎么做呢?我如何正确使用该方法?

谢谢!

最佳答案

这个答案解决了我的问题:

https://stackoverflow.com/a/27934069/1135714

您需要设置多个变量并通过使用 UIPageController 方法修改它们的值。

关于ios - 如何指示用户滑动的方向,而不是 Swift 中的下一个和上一个 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27926571/

相关文章:

ios - 如何在 UITableView 的单元格外添加一个圆形矩形按钮?

ios tableView 重用问题

iOS UICollectionview 渲染背景颜色错误

iphone - UIPageViewController:返回当前可见 View

ios - UITableView 选定的单元格分隔符未在 iOS 7.1 中显示

ios - react native : Can't run project in iOS mode - Duplicate module name

ios - 通过 InputAccessoryView 上的按钮更改 uidatepicker 的值

ios - 在不同的swift文件中将父类(super class)调用到子类中

ios - 带有子 ViewController 的 UIPageViewController

ios - UIPageViewController (ScrollStyle) 不调用 dataSource 方法