2009-02-04 111 views
20

由於最初提出這個問題,所以通過OS 3.0中引入的decelerationRate property添加了UIScrollView減速率自定義。可以修改UIScrollView的減速率嗎?


我有一個UIScrollView,其減速度,我想改變。爲了清楚起見,我說的是當你在滾動視圖上滑動你的手指並且在你擡起你的手指後視圖繼續滾動(但是逐漸減慢)。我想增加減速率,以便它在默認情況下儘快停止。

我見過一些應用程序,其中UIScrollViews似乎更快地減速。在UIScrollView中似乎沒有這個API,但我想知道是否有另一種方法來做到這一點。

+0

該鏈接現在是:http://developer.apple.com/library/ios/documentation/UIKit/Reference/ UIScrollView_Class/Reference/UIScrollView.html#// apple_ref/doc/uid/TP40006922-CH3-DontLinkElementID_2 – 2011-02-10 02:09:55

+0

固定 - 謝謝。 – 2011-02-10 04:45:40

回答

0

這是可能的,但你必須繼承UIScrollView並覆蓋所有的觸摸處理。這不是我的選擇項目 - 要做對的工作需要很多工作。

29

是的,我已經成功地通過執行以下操作改變了減速率:

scrollView.decelerationRate = UIScrollViewDecelerationRateFast; 
+0

decelerationRate實際上是一個浮點數,所以你可以通過輸入任何浮點數來進行更詳細的控制。 – CharlieMezak 2011-01-14 21:07:40

+0

工作過,謝謝! – Nippysaurus 2011-06-06 12:37:25

45

您可以使用UIScrollViewdecelerationRate屬性來控制它。儘管它的浮點數,它不接受除UIScrollViewDecelerationRateNormal或UIScrollViewDecelerationRateFast以外的任何值。看看下面的代碼

​​

上面的代碼給出了以下輸出,它非常清晰,我們不能使用自定義減速率。

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 
12

我發現,通過使用KVC修改實例變量_decelerationFactor讓我改變率比UIScrollViewDecelerationRateNormalUIScrollViewDecelerationRateFast其他的東西。我分類UIScrollView,並在試塊中包裹全部

- (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; 
} 
1

有一個非常簡單的方法。重寫setter方法。

@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;