ios - func UIPageViewController didFinishAnimating 不工作

标签 ios swift swift3 uipageviewcontroller

这个函数从不打印:

func pageViewController(_ pageViewController: UIPageViewController,
                        didFinishAnimating finished: Bool,
                        previousViewControllers: [UIViewController],
                        transitionCompleted completed: Bool){
    if completed||finished{

        print("completed or finished")
    }
}

为什么?

完整代码:

class AdsPageController: UIPageViewController, 
UIPageViewControllerDataSource
{
var AdsContent: AdsController? = nil
static var adsPageController:AdsPageController?

override func viewDidLoad() {
    super.viewDidLoad()
    self.dataSource = self
    AdsPageController.adsPageController = self
}

override func viewWillAppear(_ animated: Bool) {
    self.setViewControllers([getViewControllerAtIndex(pageIndex: MyUtils.loadAdIndex())] as [UIViewController], direction: UIPageViewControllerNavigationDirection.forward, animated: true, completion: nil)
}

// MARK: UIPageViewControllerDataSource Methods
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController?
{
    self.AdsContent = viewController as? AdsController
    var index = AdsContent!.pageIndex
    if ((index == 0) || (index == NSNotFound))
    {
        index = 10
    }
    index-=1
    return getViewControllerAtIndex(pageIndex: index)
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController?
{
    self.AdsContent = viewController as? AdsController
    var index = AdsContent!.pageIndex
    if ((index == 9) || index == NSNotFound)
    {
        index = -1
    }
    index+=1
    return getViewControllerAtIndex(pageIndex: index)
}

func pageViewController(_ pageViewController: UIPageViewController,
                        didFinishAnimating finished: Bool,
                        previousViewControllers: [UIViewController],
                        transitionCompleted completed: Bool){
    if completed||finished{
        print("completed or finished")
    }
}

func getViewControllerAtIndex(pageIndex: NSInteger) -> AdsController{
    let AdsContent: AdsController? = self.storyboard?.instantiateViewController(withIdentifier: "AdViewP") as? AdsController
    AdsContent?.pageIndex = pageIndex
    return AdsContent!
}
}

我想知道页面转换何时完成,我已经实现了 UIPageViewController 的 didFinishAnimating 方法,但它似乎无法正常工作。

最佳答案

那是因为:

pageViewController(_:didFinishAnimating:previousViewControllers:transitionCompleted:)

方法与UIPageViewControllerDelegate有关

这意味着你应该实现 - 除了 self.dataSource = self-:

override func viewDidLoad() {
    super.viewDidLoad()
    self.dataSource = self
    // here you conform to the delegate (note that you could implement it without mentioning 'self.'):
    delegate = self
    AdsPageController.adsPageController = self
}

它应该按预期工作。另外,确保让类符合 UIPageViewControllerDelegate:

class AdsPageController: UIPageViewController,
UIPageViewControllerDataSource, UIPageViewControllerDelegate

此外,您可以查看 this answer更熟悉委托(delegate)。

关于ios - func UIPageViewController didFinishAnimating 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47377499/

相关文章:

ios - NSUndoManager中的重做堆栈

ios - 触摸 uibutton 即可使用 URL 引用方案打开主题演讲

html - 如何在 swift 中从 html 字符串转换 NSAttributedString?

ios - 如何通过 Swift3 将 HTML 字符串分离成数组或字典?

iphone - 等到 UITableview 完成重新加载

ios - 显示 nil 的自定义表格单元格

ios - 如果表未重新加载,则将带有标识符的数据传递到目标 UITableViewCell 将返回 nil?

ios - 如何将通用自定义对象保存到 UserDefaults?

ios - 获取的结果 Controller 不会在运行时更新表

Swift TableView 防止按钮颜色在选择时发生变化