一个 UISlider 的子类,在易定制的弹出视图中显示实时值。
如果您想为 UIProgressView 也实现相同的功能,请查看 ASProgressPopupView。
可定制的属性
设置自己的 NSNumberFormatter 来控制显示的值
对于 CocoaPods 用户,只需将 pod 'ASValueTrackingSlider'
添加到 Podfile 中。如果您想在不包含自己的作品之前测试所包含的演示项目,请在终端中输入 $ pod try ASValueTrackingSlider
。CocoaPods 会将演示项目下载到临时文件夹,并在 Xcode 中打开它。神奇。
如果您不使用 CocoaPods,只需将这些文件包含到您的项目中即可
非常简单。将 UISlider 拖拽到 Storyboard/nib 中,将其类设置为 ASValueTrackingSlider – 就是这么简单。下面的例子演示了如何自定义外观和显示的值。
self.slider.maximumValue = 255.0;
self.slider.popUpViewCornerRadius = 12.0;
[self.slider setMaxFractionDigitsDisplayed:0];
self.slider.popUpViewColor = [UIColor colorWithHue:0.55 saturation:0.8 brightness:0.9 alpha:0.7];
self.slider.font = [UIFont fontWithName:@"GillSans-Bold" size:22];
self.slider.textColor = [UIColor colorWithHue:0.55 saturation:1.0 brightness:0.5 alpha:1];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterPercentStyle];
[self.slider setNumberFormatter:formatter];
self.slider.popUpViewAnimatedColors = @[[UIColor purpleColor], [UIColor redColor], [UIColor orangeColor]];
self.slider.font = [UIFont fontWithName:@"Futura-CondensedExtraBold" size:26];
popUpView 会自动调整,以确保其宽度不超过滑块控件宽度。
将您的控制器设置为 ASValueTrackingSlider 的 dataSource
并采用 ASValueTrackingSliderDataSource
,然后返回您想要自定义的任何值的 NSString。
// slider has a custom NSNumberFormatter to display temperature in °C
// the dataSource method below returns custom NSStrings for specific values
- (NSString *)slider:(ASValueTrackingSlider *)slider stringForValue:(float)value;
{
value = roundf(value);
NSString *s;
if (value < -10.0) {
s = @"❄️Brrr!⛄️";
} else if (value > 29.0 && value < 50.0) {
s = [NSString stringWithFormat:@"😎 %@ 😎", [slider.numberFormatter stringFromNumber:@(value)]];
} else if (value >= 50.0) {
s = @"I’m Melting!";
}
return s;
}
要在UITableView内部有效使用,您需要实现<ASValueTrackingSliderDelegate>
协议。如果只是在UITableViewCell内嵌入ASValueTrackingSlider,那么弹出视图可能会被上面的cell遮挡。代理方法会在弹出视图出现之前通知您,以便您确保您的UITableViewCell被渲染在其他之上。
使用UITableView推荐的技术是创建一个实现代理方法的UITableViewCell子类。
@interface SliderCell : UITableViewCell <ASValueTrackingSliderDelegate>
@property (weak, nonatomic) IBOutlet ASValueTrackingSlider *slider;
@end
@implementation SliderCell
- (void)awakeFromNib
{
self.slider.delegate = self;
}
- (void)sliderWillDisplayPopUpView:(ASValueTrackingSlider *)slider;
{
[self.superview bringSubviewToFront:self];
}
@end