【发布时间】:2014-03-18 10:07:06
【问题描述】:
我需要实现一个滑块控件,如下图
滑块的步长不均匀。 每当用户滑动滑块时,滑块只会停在接近当前范围的一步。
但真正的挑战是 UISlider 在最初提供的自定义点(范围)处带有点。
谁能帮我实现这个功能。
【问题讨论】:
标签: ios objective-c ios7 uikit uislider
我需要实现一个滑块控件,如下图
滑块的步长不均匀。 每当用户滑动滑块时,滑块只会停在接近当前范围的一步。
但真正的挑战是 UISlider 在最初提供的自定义点(范围)处带有点。
谁能帮我实现这个功能。
【问题讨论】:
标签: ios objective-c ios7 uikit uislider
我认为您最好不要尝试将UISlider 混入此配置中
如果这是我的问题,我会构建一个这样的自定义视图
DKCustomSliderView
-> UIImageView (subview for slider head)
它实现了这样的接口。
@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
我会在滑块图像视图上跟踪平移手势。
-(void)handlePanGesture:(UIPanGestureRecogniser *)pgr {
if(pgr.state == UIGestureRecogniserStateChanged) {
//am i near an indent? , if so lock me here and be slightly sticky.
}
}
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)
}
}
【讨论】: