UISlider步骤不均匀。

Din*_*hik 5 objective-c uikit uislider ios ios7

我需要实现如下图所示的滑块控件

滑块的步长不均匀。每当用户滑动时,滑块将仅在接近当前范围的步骤之一停止。

但是真正的挑战是UISlider,它会在最初提供的自定义点(范围)上带有点。

谁能帮助我实现此功能。

War*_*ton 1

我认为你最好不要试图破坏UISlider这个配置

如果这是我的问题,我会构建一个像这样结构的自定义视图

 DKCustomSliderView
 -> UIImageView (subview for slider head)
Run Code Online (Sandbox Code Playgroud)

它实现了这样的接口。

@interface DKCustomSliderView : UIView

-(void)setStopPoints:(NSArray *)stopPoints; //array of NSNumbers between 0-1 which define indents
-(void)setSliderHeadImage:(UIImage *)sliderHeadImage; //image to use as slider head
-(void)setIndentImage:(UIImage *)indentImage; //image to use as indent marker
-(void)setTrackImage:(UIImage *)trackImage; //stretchy image to use on track 

@end
Run Code Online (Sandbox Code Playgroud)

我会跟踪滑块图像视图上的平移手势。

-(void)handlePanGesture:(UIPanGestureRecogniser *)pgr {

if(pgr.state == UIGestureRecogniserStateChanged) { 

   //am i near an indent? , if so lock me here and be slightly sticky.

}
}
Run Code Online (Sandbox Code Playgroud)

绘制矩形DKCustomSliderView看起来有点像这样。

-(void)drawRect:(CGRect)dirtyRect {

CGRect bounds = self.bounds;

// 1. draw track across width

for(NSNumber *marker in self.stopPoints) {

//draw a instance of self.indentImage at ([marker floatValue]/bounds.size.width)

}

}
Run Code Online (Sandbox Code Playgroud)