代码之家  ›  专栏  ›  技术社区  ›  Mike McMaster

UIScrollView的减速率可以修改吗?

  •  23
  • Mike McMaster  · 技术社区  · 17 年前

    decelerationRate property 在OS 3.0中引入。


    我有一个UIScrollView,我想改变它的减速率。为了清楚起见,我指的是当你在滚动视图上滑动手指时,当你抬起手指后,视图继续滚动(但逐渐变慢)。我想增加减速率,这样它就会比默认情况下更快地停止。

    我见过一些应用程序的UIScrollViews似乎减速更快。在UIScrollView中似乎没有这个API,但我想知道是否有其他方法可以实现它。

    5 回复  |  直到 14 年前
        1
  •  51
  •   Anto Binish Kaspar    14 年前

    你可以用 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
    
        2
  •  37
  •   shim    9 年前

    scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
    
        3
  •  14
  •   mackross    13 年前

    _decelerationFactor 允许我把价格改成别的 UIScrollViewDecelerationRateNormal UIScrollViewDecelerationRateFast 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;
    }
    
        4
  •  1
  •   shim    9 年前

    有一个非常直接的方法。重写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;
    
        5
  •  0
  •   Airsource Ltd    17 年前