Obtenga la position de desplazamiento de UIPageViewController

Estoy usando un UIPageViewController , y necesito get la position de desplazamiento del ViewController a medida que los usuarios deslizan, por lo que puedo desvanecer parcialmente algunos activos mientras la vista está en transición al siguiente UIViewController .

El delegado y los methods de UIPageViewController de datos de UIPageViewController no parecen proporcionar ningún acceso a esto, e internamente UIPageViewController que UIPageViewController debe usar una vista de desplazamiento en alguna parte, pero no parece subclass directamente, así que no estoy capaz de llamar

 func scrollViewDidScroll(scrollView: UIScrollView) { } 

He visto alguna otra sugerencia de publicaciones para get una reference al pageViewController!.view.subviews y luego el primer índice es un scrollView, pero esto parece muy hacky. Me pregunto si hay una forma más estándar de manejar esto.

Puede search el UIScrollView dentro de su UIPageViewController . Para hacer eso, tendrás que implementar UIScrollViewDelegate .

Después de eso, puede get su scrollView:

 for v in pageViewController.view.subviews{ if v.isKindOfClass(UIScrollView){ (v as UIScrollView).delegate = self } } 

Después de eso, puede utilizar todos los methods UIScrollViewDelegate y, por lo tanto, puede anular el método scrollViewDidScroll donde puede get la position de desplazamiento:

 func scrollViewDidScroll(scrollView: UIScrollView) { //your Code } 

O si quieres una sola línea :

 let scrollView = view.subviews.filter { $0 is UIScrollView }.first as! UIScrollView scrollView.delegate = self 

Similar a la respuesta de Christian, pero un poco más similar a Swift (y no continúa innecesariamente recorrer las vistas.) Vistas:

 for view in self.view.subviews { if let view = view as? UIScrollView { view.delegate = self break } }