一个支持自动布局、调整大小和可视化定制的、具有丰富状态回调的 UISwitch
替代品。
MMMSwitch
是一个 UISwitch
的替代品,它完全支持自动布局(这意味着它会适当地响应对约束布局更改),支持任意大小和调整大小,支持可视化定制,并具有丰富的状态更改回调方法。
* 不是 UISwitch
替代品——它具有良好的功能等价性,但不能保证与之前使用 UISwitch
的代码兼容。
有很多出色的 UISwitch
替代品,为什么要创建另一个呢?嗯,与其它替代品不同,MMMSwitch
MMMSwitch
的 isOn
参数,并获取您想要的基本开/关信息。CocoaPods 是推荐安装 MMMSwitch
的方法。只需将此添加到您的 Podfile
pod 'MMMSwitch'
MMMSwitch *mySwitch = [[MMMSwitch alloc] init];
// Optional, defaults found in MMMSwitch.m
mySwitch.offTrackTintColor = [UIColor darkGrayColor];
mySwitch.onTrackTintColor = [UIColor greenColor];
mySwitch.trackBorderColor = [UIColor blackColor];
mySwitch.thumbColor = [UIColor whiteColor];
mySwitch.stateDidChangeHandler = ^(MMMSwitchState newState)
{
// If you just want off/on info, you can check isOn in here
NSString *onOrOff = self.isOn ? @"on" : @"off";
NSLog(@"The Switch is %@", onOrOff);
// Or get all the nitty gritty details if you want
switch (newState)
{
case MMMSwitchStateOff:
NSLog(@"The switch is off");
break;
case MMMSwitchStateSelectedUnpressedOff:
NSLog(@"The switch is selected, unpressed, and off");
break;
case MMMSwitchStateSelectedPressedOff:
NSLog(@"The switch is selected, pressed, and off");
break;
case MMMSwitchStateSelectedUnpressedOn:
NSLog(@"The switch is selected, unpressed, and on");
break;
case MMMSwitchStateSelectedPressedOn:
NSLog(@"The switch is selected, pressed, and on");
break;
case MMMSwitchStateOn:
NSLog(@"The switch is on");
break;
default:
break;
}
}
首先,我们创建了一个 MMMSwitch
,就像创建一个 UISwitch
一样 —— 注意,如果您愿意,当然也可以在 XIB 或 Storyboard 中创建 MMMSwitch
。请注意,如果您使用的是与上面不同的 initWithFrame
而不是简单的 init
,那么框架将不会被使用 —— 您需要使用自动布局来设置开关的大小和位置。
然后,我们自定义了开关的外观和感觉,如果您对默认设置满意,可以跳过这一步。
最后,我们使用 stateDidChangeHandler
来回调每次开关状态改变时的状态。MMMSwitch
支持丰富的状态概念,但对于某些用途,这些信息可能太多了。如果您的情况是这样,您可以像我们上面做的那样,每次回调触发时检查 MMMSwitch
的 isOn
属性。或者,如果您想要,完整的状态丰富信息可通过回调的 newState
属性获取。
在任何时候,开关的状态都如下详细说明的六个状态之一。每个状态都指示
关闭
对比 开启
)被选中
对比 未被选中
)被按下
对比 未被按下
)以下是这些状态
MMMSwitchStateOff
- 开关完全关闭,并且用户没有以任何方式进行交互MMMSwitchStateSelectedUnpressedOff
- 用户在开关上触发了事件(无论是在滑动块上还是其他地方),但还没有抬起手指,已经将手指从开关上拖离,并且开关处于关闭位置MMMSwitchStateSelectedPressedOff
- 用户在开关上触发了事件(无论是在滑动块上还是其他地方),但还没有抬起手指,并且手指保持在开关范围内(与拖移到范围外相反),并且开关处于关闭位置MMMSwitchStateSelectedUnpressedOn
- 用户在开关上触发了事件(无论是在滑动块上还是其他地方),但还没有抬起手指,已经将手指从开关上拖离,并且开关处于开启位置MMMSwitchStateSelectedPressedOn
- 用户在开关上触发了事件(无论是在滑动块上还是其他地方),但还没有抬起手指,并且手指保持在开关范围内(与拖移到范围外相反),并且开关处于开启位置MMMSwitchStateOn
- 开关完全开启,并且用户没有以任何方式进行交互由于 MMMSwitch
需要 Auto Layout,因此必须使用 iOS 6 SDK 或更高版本进行编译。
Matthew McCroskey
MMMSwitch
在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。