CPSlider是一个简化的、 UISlider的子类替换,允保修铲速度随用户从滑块滑块拖动而变化,模仿了iOS iPod音乐播放器中的滑块。它还包括委托回调,允许对象在刮擦速度变化时得到通知。
CPSlider的创建是因为我找到的唯一其他实现是Ole Begemann的OBSlider,虽然质量很高,但在我的奇怪的用例中(从细刮擦速度开始,然后用户拉动时增加到1.0x),有点问题。我还想看看是否有一种不同的方法可以实现这一点,而不需要执行基于各种滑块和轨道框架的重置计算。
创建一个像正常UISlider一样的CPSlider
CPSlider *slider = [[CPSlider alloc] initWithFrame:CGRectMake(18, 166, 284, 23)];
slider.minimumValue = 0.0f;
slider.maximumValue = 1.0f;
[self.view addSubview:slider]
[self.slider addTarget:self action:@selector(sliderValueDidChange:) forControlEvents:UIControlEventValueChanged];
然后您需要设置一个包含应当更改刮擦速度的Y位置的数组。这些是距离滑块边框中心线的Y位置,以点为单位(正数或负数)。它们应该是顺序增加的,并封装在NSNumber对象中。
slider.scrubbingSpeedPositions = [NSArray arrayWithObjects:
[NSNumber numberWithInt:0],
[NSNumber numberWithInt:50],
[NSNumber numberWithInt:125],
[NSNumber numberWithInt:175], nil];
然后将刮擦速度以类似的方式设置。这是滑块相对于用户触摸点X位置变化的速度。典型值将是0.0到1.0,虽然大于1.0也是可能的。再次,这些也应该封装在NSNumber中。
slider.scrubbingSpeeds = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:1.0f],
[NSNumber numberWithFloat:0.5f],
[NSNumber numberWithFloat:0.25f],
[NSNumber numberWithFloat:0.1f], nil];
如果需要,可以设置委托,以及两个外部选项。
slider.delegate = self;
slider.accelerateWhenReturning = YES; // Defaults to YES, see CPSlider.h for info
slider.ignoreDraggingAboveSlider = YES; // Defaults to YES, see CPSlider.h for info
然后可以实现一个或两个委托方法。
- (void)slider:(CPSlider *)slider didChangeToSpeed:(CGFloat)speed whileTracking:(BOOL)tracking {
// Do something with the speed change
// 'tracking' is YES during touch and changes to NO on touch up
}
- (void)slider:(CPSlider *)slider didChangeToSpeedIndex:(NSUInteger)index whileTracking:(BOOL)tracking {
// This version reports the index of the speed entry
}
Charles Powell
如果您在我的项目中使用它,请告诉我!