2015-01-30 15 views
11

Sto usando un UIPageViewController, e ho bisogno di ottenere la posizione di scorrimento del ViewController come gli utenti scorrere il dito in modo da poter in parte svanire alcune attività mentre la vista sta passando a quello successivo UIViewController.Get scorrere posizione UIPageViewController

Il delegato e DataSource metodi di UIPageViewController non sembrano fornire alcun accesso a questo, ed internamente sto supponendo che il UIPageViewController necessario utilizzare una vista di scorrimento da qualche parte, ma non sembra sottoclasse direttamente così io non sono in grado di chiamare

func scrollViewDidScroll(scrollView: UIScrollView) { 

} 

ho visto alcuni altri post suggerimento per afferrare un riferimento al pageViewController!.view.subviews e poi il primo indice è uno ScrollView, ma questo sembra molto hacky. Mi chiedo se esiste un modo più standard per gestirlo.

+0

Posso chiedere perché stai usando il controller di pagine visualizzate, allora? Funzionerebbe invece una semplice scrollview? – Aggressor

+0

In generale ho trovato UIPageViewController estremamente carente sia in termini di funzionalità che in quanto posso personalizzarlo. Quasi sempre alla fine utilizzo una vista di scorrimento nella vista raccolta. – AdamPro13

+0

@Aggressor, sto usando pageViewController, perché fornisce quasi funzionalità incorporate alla cosa che stiamo costruendo, potrei codificarlo tutto in un UIScrollView, ma speravo che pageViewController fosse abbastanza robusto da fornire questa funzione relativamente semplice , ma sembra che potrebbe non averlo. – Unome

risposta

30

È possibile cercare UIScrollView all'interno del proprio UIPageViewController. Per fare ciò, dovrai implementare lo UIScrollViewDelegate.

Dopo di che è possibile ottenere il vostro ScrollView:

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

Dopo di che, si è in grado di utilizzare tutte le UIScrollViewDelegate-metodi e così si può sovrascrivere il metodo scrollViewDidScroll dove è possibile ottenere la scrollPosition:

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

Oppure, se si vuole un one-liner:

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

Grazie per aver effettivamente risposto alla domanda data. Ci proverò e vedremo come funziona. +1 – Unome

+0

Funziona perfettamente. Grazie – Unome

5

Simile alla risposta di Christian, ma un po 'più simile a Swift (e non inutilmente continuando a scorrere view.subviews):

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