यह बात करने का एक थोड़ा कुशल तरीका हो सकता है, लेकिन मैं अपने कोड में यह उपयोग किया है से पहले और वह अभी तक मुझे विफल रहा है नहीं किया है। :)
#import <QuartzCore/QuartzCore.h>
---
BOOL isScrolling = [scrollView.layer animationForKey:@"bounds"] != nil;
'self.contentOffset' एक UIScrollView की भरपाई करने के लिए इसके अलावा UIView की "bounds.origin" संपत्ति में संग्रहित है के रूप में अच्छी तरह से (मुझे लगता है के बाद से यह थोड़ा निचले स्तर में अधिक सुविधाजनक है कोड)। जब आप [setContentOffset: एनिमेटेड:] को कॉल करते हैं, तो यह UIScrollView को CABasicAnimation के रूप में पास कर रहा है, जो "सीमाएं" संपत्ति में हेरफेर कर रहा है।
अनुमोदित, स्क्रॉल का आकार स्वयं एनिमेटिंग होने पर यह चेक भी सही होगा। इस मामले में आपको वास्तव में एनीमेशन ([CAAnimation toValue] से सीमाओं को खींचने की आवश्यकता हो सकती है) और मैन्युअल तुलना करने के लिए तुलना करें कि "मूल" स्वयं बिल्कुल बदल रहा है या नहीं।
यह सबसे सुरुचिपूर्ण समाधान नहीं है, लेकिन मुझे जहां भी संभव हो प्रतिनिधि का उपयोग करने से बचने में सक्षम होना पसंद है। विशेष रूप से यदि प्रश्न में वर्ग एक UIScrollView उपclass है। :)
कैसे के बारे में 'scrollViewDidScroll' प्रतिनिधि विधि? – iDev
जो केवल "कब" का उत्तर देता है। – Jonny
थोड़ा उलझन में, लेकिन इस जानकारी के आधार पर कि आप यह जानकारी क्यों चाहते हैं, आप मुख्य रन लूप के मोड को देख सकते हैं। उदाहरण के लिए, वर्तमान में कोई स्क्रॉल व्यू स्क्रॉल नहीं हो रहा है या ड्रैग किया जा रहा है, तो आपका मुख्य रन लूप शायद 'NSDefaultRunLoopMode' में होगा। यदि कोई स्क्रॉल व्यू स्क्रॉलिंग/ड्रैग किया जा रहा है, तो यह 'NSRunLoopCommonModes' का हिस्सा, एक अलग मोड में होगा। उदाहरण के लिए, यदि आप कुछ करने के लिए स्क्रॉलिंग के लिए प्रतीक्षा करना चाहते हैं, तो आप 'CFRunLoopPerformBlock (CFRunLoopGetMain(), केसीएफआरन लूप डीफॉल्टमोड, ब्लॉक) का उपयोग कर सकते हैं; ' – Guillaume