2013-07-25 59 views
0

我有一个关于UISliders的问题IOS以及您可以在多大程度上对其进行自定义?
我想实现一个滑块,如iPhone中的“解锁滑块”。
但似乎IOS没有提供任何“标准”方式来实现这样的滑块?你可以像iPhone中的“解锁滑块”一样定制UISlider吗?

是否可以实现标准的UISlider并将其设置为min.value(0.0)和maximum.value(0.5)。如果滑块“击中”一个大于(0.01)的值,它应该自动回到最小值(0.0)。
如果它达到最大值(0.5),开始一个事件,然后自动拉回min.value?

所有帮助表示赞赏!

+0

yes of course of can be done。 UISlider继承自UIControl类。您可以继承UIControl并开始制作您的自定义滑块。 –

+0

请参阅:http://www.sitepoint.com/wicked-ios-range-slider-part-one/ 在这里你可以看到如何创建一个双向滑块,但你可以学习很多东西并实现你的习惯通过它后滑块。 –

+0

这里是一个不错的答案:-http://stackoverflow.com/questions/8287413/custom-uislider-avoid-updating-when-dragging-outside –

回答

3

试试这个。我在我的项目中使用这个

Slider.h

@class Slider; 
@protocol SliderDelegate <NSObject> 
@required 
- (void) slideEnd; 
@end 
@interface Slider : UISlider 
@property (nonatomic, weak) id<SliderDelegate> delegate; 

Slider.m

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
if (self) { 
    [self setMinimumTrackImage:YOUR_MINIMUM_TRACK_IMG forState:UIControlStateNormal]; 
    [self setMaximumTrackImage:YOUR_MAXIMUM_TRACK_IMG forState:UIControlStateNormal]; 
    [self setThumbImage:YOUR_THUMB_IMAGE]; 
    self.minimumValue = 0.0; 
    self.maximumValue = 1.0; 
    self.value = 0.0; 
    [self addTarget:self action:@selector(moved:) forControlEvents:UIControlEventTouchUpInside]; 
    [self addTarget:self action:@selector(moved:) forControlEvents:UIControlEventTouchUpOutside]; 
} 
    return self; 
} 

- (void) moved:(UISlider *) sender 
{ 
    if (self.value != 1.0) { 
     [self setValue: 0 animated: YES]; 

    } else { 
     [[self delegate] slideEnd]; 
     [self setValue: 0 animated: YES]; 
    } 
} 

这样实现:

[self setSlider:[[Slider alloc] initWithFrame:CGRectMake(645, 25, 120, 50)]]; 
[[self view] addSubview:[self slider]]; 
[[self view] bringSubviewToFront:[self slider]]; 
[[self slider] setDelegate:self]; 

不要忘记执行委托方法:

- (void)slideEnd { 
    // Things you want to do when slide ends 
} 
相关问题