BMASliders
是一套可重用的滑动条。它包括两种滑动条,一种是可自定义范围的 -BMARangeSlider
- 以及一个更简单的 -BMASlider
- 还包括其标签对应的滑动条 -BMALabeledRangeSlider
和 BMALabeledSlider
BMALabeledRangeSlider
提供了一个带有标题和选定范围详细信息的范围滑动条。您可以使用 Interface Builder 中的 属性检查器来配置其许多属性。或者,您可以在代码中如下初始化
self.labeledRangeSlider.minimumValue = 0.;
self.labeledRangeSlider.maximumValue = 130.;
self.labeledRangeSlider.currentLowerValue = 30.;
self.labeledRangeSlider.currentUpperValue = 70.;
self.labeledRangeSlider.step = 1.;
self.labeledRangeSlider.minimumDistance = 4.; // between handlers
self.labeledRangeSlider.style = [[BMASliderLiveRenderingStyle alloc] init];
self.labeledRangeSlider.title = [[NSAttributedString alloc] initWithString:@"My title"];
self.labeledRangeSlider.rangeFormatter = self.myRangeFormatter;
[self.labeledRangeSlider addTarget:self action:@selector(valueChanged) forControlEvents:UIControlEventValueChanged];
所有内容都应不言而喻,但 rangeFormatter
和 style
。对于 rangeFormatter
,您必须提供一个符合 BMARangeFormatter
协议的对象。
@protocol BMARangeFormatter <NSObject>
@property (nonatomic) BOOL hasLowerValue;
@property (nonatomic) CGFloat lowerValue;
@property (nonatomic) CGFloat upperValue;
@property (nonatomic, getter=isOverflow) BOOL overflow;
- (NSAttributedString *)formattedString;
@end
当选定的范围发生变化时,BMALabeledRangeSlider
将设置属性 hasLowerValue
、lowerValue
、upperValue
和 overflow
为 rangeFormatter
实例,并将请求字符串表示的范围是通过调用 formattedString
。
对于 style
属性,您必须提供一个返回处理器和线条背景图像的实例。如果没有提供自己的样式,则默认使用 BMASliderLiveRenderingStyle
。
@protocol BMASliderStyling <NSObject>
- (UIImage *)unselectedLineImage;
- (UIImage *)selectedLineImage;
- (UIImage *)handlerImage;
@end
为了方便起见,BMASliders
支持 UIAppearance 协议,因此您可以轻松地为应用中的所有滑动条设置样式。
[BMARangeSlider appearance].style = [[BMASliderDefaultStyle alloc] init];
[BMASlider appearance].style = [[BMASliderDefaultStyle alloc] init];
BMALabeledRangeSlider
提供了一个带有标题和选定范围详细信息的范围滑动条。它与 BMALabeledRangeSlider
工作原理相似,但它只需要 currentValue
。
self.labeledSlider.minimumValue = 0.;
self.labeledSlider.maximumValue = 130.;
self.labeledSlider.currentValue = 60.;
self.labeledSlider.style = [[BMASliderDefaultStyle alloc] init];
self.labeledSlider.title = [[NSAttributedString alloc] initWithString:@"My title"];
self.labeledSlider.rangeFormatter = self.myRangeFormatter;
[self.labeledSlider addTarget:self action:@selector(valueChanged) forControlEvents:UIControlEventValueChanged];
请注意,rangeFormatter
必须再次符合 BMARangeFormatter
协议。在这种情况下,滑动条将 hasLowerValue
设置为 false
,并将 currentValue
分配给 upperValue
属性。
这些是 BMALabeledRangeSlider
和 BMALabeledSlider
的非标签对应物。它们没有任何 title
或 rangeFormatter
,因此它们更容易配置,并可用于渲染自定义布局。
BMASliders
利用了IBInspectable
和IBDesignable
指令,这使得您可以在Interface Builder中看到组件的渲染效果,并通过使用属性检查器来改变滑块的属性。
Component
目录下的所有文件添加到您的项目中。源代码以MIT许可证分发。