2015-01-30 7 views
11

का स्क्रॉल स्थिति प्राप्त करें, मैं UIPageViewController का उपयोग कर रहा हूं, और मुझे उपयोगकर्ता नियंत्रण के रूप में व्यू कंट्रोलर की स्क्रॉल स्थिति प्राप्त करने की आवश्यकता है ताकि मैं आंशिक रूप से कुछ संपत्तियों को फीका कर सकूं जबकि दृश्य अगले UIViewController पर संक्रमण हो रहा है।UIPageViewController

UIPageViewController के प्रतिनिधि और डेटा स्रोत तरीकों इस के लिए किसी भी पहुँच प्रदान करने लगते हैं नहीं है, और आंतरिक रूप से मुझे लगता है कि UIPageViewController एक स्क्रॉल दृश्य कहीं का उपयोग करना चाहिए संभालने हूँ, लेकिन यह सीधे तो यह उपवर्ग प्रतीत नहीं होता है मैं

func scrollViewDidScroll(scrollView: UIScrollView) { 

} 

मैं कुछ अन्य पोस्ट pageViewController!.view.subviews के लिए एक संदर्भ हड़पने के लिए और फिर पहली सूचकांक एक scrollview है सुझाव देखा है फोन करने में सक्षम नहीं हूँ, लेकिन इस बहुत hacky लगता है। मैं सोच रहा हूं कि इसे संभालने का एक और मानक तरीका है या नहीं।

+0

मैं पूछ सकता हूँ तुम क्यों पृष्ठदृश्य नियंत्रक तो उपयोग कर रहे हैं? क्या एक सरल स्क्रॉलव्यू इसके बजाय काम करेगा? – Aggressor

+0

मुझे आमतौर पर UIPageViewController को कार्यक्षमता में बहुत कम होने और मैं इसे कितना अनुकूलित कर सकता हूं। मैं लगभग हमेशा संग्रह दृश्य पर एक स्क्रॉल दृश्य का उपयोग कर समाप्त होता हूं। – AdamPro13

+0

@Aggressor, मैं पेज व्यू कंट्रोलर का उपयोग कर रहा हूं, क्योंकि यह हमारे द्वारा बनाई जा रही चीज़ों की कार्यक्षमता में सटीक रूप से निर्मित प्रदान करता है, मैं इसे सभी को UIScrollView में कोड कर सकता हूं, लेकिन मुझे उम्मीद थी कि पृष्ठ दृश्य नियंत्रक इस अपेक्षाकृत सरल सुविधा प्रदान करने के लिए पर्याप्त मजबूत होगा , लेकिन ऐसा लगता है कि यह नहीं हो सकता है। – Unome

उत्तर

30

आप अपने UIPageViewController के अंदर UIScrollView की खोज कर सकते हैं। ऐसा करने के लिए, आपको UIScrollViewDelegate लागू करना होगा।

उसके बाद आप अपने scrollview प्राप्त कर सकते हैं:

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

उसके बाद, आप सभी UIScrollViewDelegate-तरीकों का उपयोग करने में सक्षम हैं और इसलिए आप scrollViewDidScroll पद्धति जहां आप scrollPosition प्राप्त कर सकते हैं ओवरराइड कर सकते हैं:

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

या आप एक एक लाइनर चाहते हैं:

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

वास्तव में दिए गए प्रश्न का उत्तर देने के लिए धन्यवाद। मैं इसे आज़माउंगा और देख सकता हूं कि यह कैसे काम करता है। +1 – Unome

+0

सही काम करता है। धन्यवाद – Unome

5

ईसाई का जवाब लेकिन करने के लिए इसी तरह के थोड़ा और स्विफ्ट की तरह (और अनावश्यक रूप से view.subviews लूप करने के लिए जारी नहीं):

for view in self.view.subviews { 
    if let view = view as? UIScrollView { 
     view.delegate = self 
     break 
    } 
} 
संबंधित मुद्दे