2015-11-25 4 views
11

की चिकनी चाल मैं (कृपया नीचे चित्र देखें) स्विफ्ट के साथ मेरी scrollview की contentOffset स्थापित करने के लिए प्रोग्राम के रूप में जब contentOffset दो अंक के बीच है चाहते हैं।contentoffset UIScrollView स्विफ्ट

समस्या यह है, मैं इस कदम के लिए सुचारु जोड़ना चाहते हैं, लेकिन मैं इस के लिए दस्तावेज़ नहीं मिला। मैंने धीरे-धीरे सामग्री ऑफसेट को कम करने के लिए एक लूप करने की कोशिश की लेकिन परिणाम इतना अच्छा नहीं है।

इस उदाहरण के साथ, यदि स्क्रॉल के अंत में सामग्री ऑफ़सेट 150 पीएक्स से कम है, तो यह आसानी से चला जाता है (एनीमेशन की अवधि 1 सेकंड होगी) ऑफसेट के साथ 100 के बराबर होती है। 150 तक पीएक्स, यह 200px तक जाता है।

तुम मुझे दिशाओं क्या करना है यह बहुत अच्छा होगा की (प्रलेखन या त्वरित उदाहरण) प्रदान कर सकते हैं :) धन्यवाद!

enter image description here

उत्तर

17

आप UIView.animations

func goToPoint() { 
    dispatch_async(dispatch_get_main_queue()) { 
     UIView.animateWithDuration(2, delay: 0, options: UIViewAnimationOptions.CurveLinear, animations: { 
     self.scrollView.contentOffset.x = 200 
     }, completion: nil) 
    } 
    } 
+0

बहुत बहुत धन्यवाद, मैंने स्विफ्ट 3 संस्करण बनाने के लिए आपके कोड का उपयोग किया। संपादित करें - मैं इसे इसके उत्तर के रूप में पोस्ट करूंगा क्योंकि कोड यहां गन्दा हो जाता है। – user3739902

+1

@fatihyildizhan तो इस कोड का इस्तेमाल किया और मैं आकर्षण की तरह काम करता है, धन्यवाद! मैंने इसे बनाने की कोशिश की लेकिन 'dispatch_async (dispatch_get_main_queue()) में नहीं 'और यह ठीक से काम नहीं किया क्योंकि एनीमेशन सामग्री के दौरान ऑफसेट 0.0 पर वापस सेट हो रहा है। क्या आप मुझे समझा सकते हैं कि हमें 'dispatch_async (dispatch_get_main_queue())' में सही तरीके से काम करने के लिए क्यों करना चाहिए? – Mette

8

यहाँ का उपयोग कर सकते fatihyildizhan के कोड की स्विफ्ट 3 संस्करण है।

 DispatchQueue.main.async { 
     UIView.animate(withDuration: 0.2, delay: 0, options: UIViewAnimationOptions.curveEaseOut, animations: { 
      self.myScrollView.contentOffset.x = CGFloat(startingPointForView) 
      }, completion: nil) 
    }