2009-02-04 22 views
20

चूंकि यह प्रश्न मूल रूप से पूछा गया था, इसलिए UIScrollView मंदीकरण दर अनुकूलन को ओएस 3.0 में पेश किए गए decelerationRate property के माध्यम से जोड़ा गया है।क्या UIScrollView की मंदी दर संशोधित की जा सकती है?


मैं एक UIScrollView जिसका मंदी दर मैं बदलना चाहते हैं की है। स्पष्ट होने के लिए, जब आप अपनी उंगली को स्क्रॉल व्यू पर स्वाइप करते हैं तो मैं बात कर रहा हूं और दृश्य आपकी उंगली उठाने के बाद स्क्रॉल करना जारी रखता है (लेकिन धीरे-धीरे धीमा हो जाता है)। मैं विलुप्त होने की दर में वृद्धि करना चाहता हूं ताकि यह जल्द से जल्द बंद हो जाए जो डिफ़ॉल्ट रूप से करता है।

मैंने कुछ ऐप्स देखे हैं जहां UIScrollViews अधिक तेज़ी से घटने लगते हैं। UIScrollView में इसके लिए कोई एपीआई नहीं है, लेकिन मुझे आश्चर्य है कि ऐसा करने का कोई वैकल्पिक तरीका है या नहीं।

+0

वह लिंक है: http://developer.apple.com/library/ios/documentation/UIKit/Reference/ UIScrollView_Class/संदर्भ/UIScrollView.html # // apple_ref/doc/uid/TP40006922-CH3-DontLinkElementID_2 –

+0

फिक्स्ड - धन्यवाद। –

उत्तर

0

यह संभव है, लेकिन आपको UIScrollView को उपclass करना होगा और सभी स्पर्श हैंडलिंग को ओवरराइड करना होगा। यह मेरी पसंद का प्रोजेक्ट नहीं होगा - इसे सही करने के लिए यह एक अच्छा काम करेगा।

29

हां, मैंने सफलतापूर्वक मंदी दर निम्न कार्य करके बदला है:

scrollView.decelerationRate = UIScrollViewDecelerationRateFast; 
+0

decelerationRate वास्तव में एक फ्लोट है, इसलिए आप किसी भी फ्लोट मूल्य दर्ज करके अधिक विस्तृत नियंत्रण प्राप्त कर सकते हैं। – CharlieMezak

+0

एक इलाज किया, धन्यवाद! – Nippysaurus

+4

@CharlieMezak यह एक फ्लोट है लेकिन केवल UIScrollViewDecelerationRateFast और UIScrollViewDecelerationRateNormal मानों के साथ काम करता है। –

45

आप इसे नियंत्रित करने के लिए उपयोग कर सकते हैं UIScrollView के decelerationRate संपत्ति। भले ही इसकी फ्लोट, यह UIScrollViewDecelerationRateNormal या UIScrollViewDecelerationRateFast के अलावा किसी भी मूल्य को स्वीकार नहीं कर रहा है। निम्नलिखित कोड

NSLog(@"1. decelerationRate %f", scrollview.decelerationRate); 

scrollview.decelerationRate = UIScrollViewDecelerationRateNormal; 
NSLog(@"2. decelerationRate %f", scrollview.decelerationRate); 

scrollview.decelerationRate = UIScrollViewDecelerationRateFast; 
NSLog(@"3. decelerationRate %f", scrollview.decelerationRate); 

scrollview.decelerationRate = 0.7; 
NSLog(@"4. decelerationRate %f", scrollview.decelerationRate); 

scrollview.decelerationRate = 0.995; 
NSLog(@"5. decelerationRate %f", scrollview.decelerationRate); 

कोड से ऊपर निम्नलिखित आउटपुट देता है को देखो, अपने बहुत स्पष्ट हम कस्टम मंदी दर का उपयोग नहीं कर सकते।

2012-01-03 11:59:41.164 testviewv2[10023:707] 1. decelerationRate 0.998000 
2012-01-03 11:59:41.172 testviewv2[10023:707] 2. decelerationRate 0.998000 
2012-01-03 11:59:41.173 testviewv2[10023:707] 3. decelerationRate 0.990000 
2012-01-03 11:59:41.175 testviewv2[10023:707] 4. decelerationRate 0.990000 
2012-01-03 11:59:41.176 testviewv2[10023:707] 5. decelerationRate 0.998000 
+0

मुझे एक ही व्यवहार मिला है –

+1

पुष्टि की। यह प्रलेखन समस्या – Marcin

+1

दुर्भाग्य से यह सच होना चाहिए। मैं 0.9 9 की तरह इन दोनों के बीच कम से कम एक मूल्य रखना चाहता हूं, लेकिन यह काम नहीं कर रहा है। –

12

मैंने पाया कि उदाहरण चर _decelerationFactor संशोधित करने के लिए KVC का उपयोग करके मुझे UIScrollViewDecelerationRateNormal या UIScrollViewDecelerationRateFast के अलावा कुछ करने के लिए दर को बदलने की अनुमति दी। मैं UIScrollView subclassed और एक कोशिश ब्लॉक

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
     @try { 
      CGFloat decelerationRate = UIScrollViewDecelerationRateFast +(UIScrollViewDecelerationRateNormal - UIScrollViewDecelerationRateFast) * .52; 
      [self setValue:[NSValue valueWithCGSize:CGSizeMake(decelerationRate,decelerationRate)] forKey:@"_decelerationFactor"]; 

     } 
     @catch (NSException *exception) { 
      // if they modify the way it works under us. 
     } 


    } 
    return self; 
} 
+4

आपके ऐप को खारिज करने के लिए एक त्वरित तरीका की तरह लगता है। –

+5

मुझे इसके साथ कोई समस्या नहीं है लेकिन यह एक भूरे रंग के क्षेत्र में है। उसमें आप सीधे हेडर फ़ाइल में चर देख सकते हैं और कक्षा डंप की आवश्यकता नहीं है। मुझे लगता है कि यह इसके लिए जाने के दायरे में पड़ता है अगर यह उपयोगकर्ता अनुभव में सुधार करता है लेकिन इसे अपने ऐप को क्रैश न करने दें। – mackross

1

वहाँ एक बहुत स्पष्ट दृष्टिकोण है में बहुत लपेटा। सेटर विधि ओवरराइड करें।

@interface UIArbitraryDeceleratingScrollView : UIScrollView 

@property(nonatomic,assign) CGFloat decelerationRate; 

@end 

@implementation UIArbitraryDeceleratingScrollView 

@synthesize decelerationRate = _decelerationRate; 

- (void)setDecelerationRate:(CGFloat)dr 
{ 
    [super setDecelerationRate:dr]; 
    _decelerationRate = dr; 
} 

@end 

अब आवंटित आप क्या चाहते हैं, उदाहरण के लिए इस तरह:

_scroller.decelerationRate = (UIScrollViewDecelerationRateNormal+UIScrollViewDecelerationRateFast)/2.1; 
संबंधित मुद्दे