2015-01-30 13 views
11

'un kaydırma konumunu alın Bir UIPageViewController kullanıyorum ve kullanıcılar kaydırırken ViewController'ın kaydırma konumunu almam gerekiyor, böylece görünüm bir sonraki UIViewController'a geçiş yaparken bazı öğelerin kısmen kaybolmasına neden olabilir. UIPageViewController

UIPageViewController delegesi ve veri kaynağı yöntemlerine

bu herhangi erişim sağlamak için görünmüyor, ve içten ben UIPageViewController yerde bir kaydırma görünümünü kullanarak gerektiğini tahmin ediyorum, ama doğrudan bu yüzden alt sınıf görünmüyor Ben pageViewController!.view.subviews bir başvuru kapmak ve sonra ilk endeks bir scrollview olduğu için diğer bazı mesajlar öneri görmeniz

func scrollViewDidScroll(scrollView: UIScrollView) { 

} 

çağırmak mümkün değilim, ama bu çok hacky görünüyor. Bunu halletmenin daha standart bir yolu olup olmadığını merak ediyorum.

+0

sorabilir miyim? Bunun yerine basit bir scrollview çalışır mı? – Aggressor

+0

Genelde UIPageViewController'ın hem işlevsellikte hem de ne kadar özelleştirebileceğimde aşırı derecede eksik olduğunu buldum. Neredeyse her zaman koleksiyon görünümünde kaydırma görünümü kullanarak sona ererim. – AdamPro13

+0

@Aggressor, pageViewController kullanıyorum, çünkü inşa ettiğimiz şeyin işlevselliği için inşa edilmiş bir exacty özelliği sağlıyor, hepsini bir UIScrollView'da kodlayabiliyordum, ancak pageViewController'ın bu nispeten basit özelliği sağlamak için yeterince güçlü olacağını umuyordum ama buna sahip olmayabilir gibi görünüyor. – Unome

cevap

30

UIScrollView ürününü UIPageViewController içinde arayabilirsiniz. Bunu yapmak için UIScrollViewDelegate'u uygulamanız gerekecek.

Eğer scrollview alabilirsiniz sonra: Bundan sonra

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

, tüm UIScrollViewDelegate-yöntemleri kullanmak mümkün ve bu yüzden size scrollPosition alabilirsiniz scrollViewDidScroll yöntemi geçersiz kılabilirsiniz:

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

Yoksa tek astar isterseniz:

Christian'ın cevap ama benzer
let scrollView = view.subviews.filter { $0 is UIScrollView }.first as! UIScrollView 
scrollView.delegate = self 
+0

Verilen soruyu gerçekten yanıtladığınız için teşekkür ederiz. Bunu deneyeceğim ve nasıl çalıştığını göreceğim. +1 – Unome

+0

Mükemmel çalışır. Teşekkürler – Unome

5

biraz daha Swift benzeri (ve gereksiz yere view.subviews döngü devam değil): neden sonra sayfa gösterimi denetleyicisi kullanıyor

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