SMWheelControl 是一个 iOS 组件,允许用户从 360° 旋转的轮中选择一个项目,它具有平滑的惯性旋转。
代码主要基于 Cesare Rocchi 在 http://www.raywenderlich.com/9864/how-to-create-a-rotating-wheel-control-with-uikit 上发布的教程 “如何使用 UIKit 创建旋转轮控制”。
示例截图
使用经典的 - (id)initWithFrame:(CGRect)rect
实例化控件,并添加一个目标,就像您通常对控件所做的那样,例如
SMWheelControl *wheel = [[SMWheelControl alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
[wheel addTarget:self action:@selector(wheelDidChangeValue:) forControlEvents:UIControlEventValueChanged];
然后添加一个数据源
wheel.dataSource = self;
[wheel reloadData];
并实现以下方法(数据源应遵循 SMWheelControlDataSource
)
- (UIView *)wheel:(SMWheelControl *)wheel viewForSliceAtIndex:(NSUInteger)index
- (NSUInteger)numberOfSlicesInWheel:(SMWheelControl *)wheel
- (CGFloat)snappingAngleForWheel:(SMWheelControl *)wheel // optional
例如
- (NSUInteger)numberOfSlicesInWheel:(SMWheelControl *)wheel
{
return 10;
}
- (UIView *)wheel:(SMWheelControl *)wheel viewForSliceAtIndex:(NSUInteger)index
{
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 30)];
label.backgroundColor = [UIColor whiteColor];
label.text = [NSString stringWithFormat:@" %d", index];
return label;
}
当轮旋转结束时,如果添加了目标,则它将接收事件 UIControlEventValueChanged
,例如
- (void)wheelDidChangeValue:(id)sender
{
self.valueLabel.text = [NSString stringWithFormat:@"%d", self.wheel.selectedIndex];
}
数据源还可以提供一个对齐角度,即轮应该对齐的角度。这可以通过可选方法 - (CGFloat)snappingAngleForWheel:(SMWheelControl *)wheel
设置
您还可以实现 SMWheelControlDelegate
提供的(希望是自我解释性的)方法,例如
- (void)wheelDidEndDecelerating:(SMWheelControl *)wheel;
- (void)wheel:(SMWheelControl *)wheel didRotateByAngle:(CGFloat)angle;
- (void)wheel:(SMWheelControl *)wheel didTapOnSliceAtIndex:(NSUInteger)index;
该库基于
和目前由