嵌入式页面控制器到达索引时更改容器视图大小

时间:2017-01-13 21:49:34

标签: ios swift uicontainerview

我有一个容器视图,里面有一个嵌入式页面控制器。

当页面控制器索引达到某个索引时,我想更改容器视图大小。问题是我无法在页面控制器类中创建容器视图的出口,并且不确定如何从另一个类中获取索引中的更改。

我在思考类似于:来自页面控制器类

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
    if (completed && finished) {
        if let currentVC = pageViewController.viewControllers?.last {
            let index = vcArr.index(of: currentVC)

                globalPageIndex = index!

        }
    }
}

其中globalPageIndex在顶层声明。

然后在包含对容器视图的引用的类中:

if globalPageIndex == 10 {

    containerView?.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.5, 1.5)

}

但是如何让这个类中的函数连续测试索引值?如果我在容器视图类中创建一个类func并在每次从页面控制器更改索引时运行它,那么我就无法访问容器视图。

------- ------ EDIT

class pageViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource, UIGestureRecognizerDelegate, ContainerViewDelegate {

internal func getIndex(index: Int) {
    globalIndex = index
}

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
    if (completed && finished) {
        if let currentVC = pageViewController.viewControllers?.last {
            let index = vcArr.index(of: currentVC)

            getIndex(index: index!)


        }
    }
}

override func viewDidLoad() {
    super.viewDidLoad()

    LandingPageViewController.delegate = self

并在登陆页面

protocol ContainerViewDelegate {
    func getIndex(index: Int)
}
class LandingPageViewController: UIViewController {

static var delegate : ContainerViewDelegate!

1 个答案:

答案 0 :(得分:0)

在pageViewController中,在委托方法中,您可以向容器视图控制器发送消息。这样,每次页面视图控制器传输时,容器视图控制器都会收到一条消息。 在此消息中,您可以传递索引。

或者您可以将容器视图控制器设置为pageviewcontroller的委托