MMMSwitch 0.1.1

MMMSwitch 0.1.1

测试已测试
语言语言 Obj-CObjective C
许可协议 MIT
发布最新版本2015 年 1 月

Matthew McCroskey 维护。




MMMSwitch 0.1.1



                 

一个支持自动布局、调整大小和可视化定制的、具有丰富状态回调的 UISwitch 替代品。

MMMSwitch 是一个 UISwitch 的替代品,它完全支持自动布局(这意味着它会适当地响应对约束布局更改),支持任意大小和调整大小,支持可视化定制,并具有丰富的状态更改回调方法。

* 不是 UISwitch 替代品——它具有良好的功能等价性,但不能保证与之前使用 UISwitch 的代码兼容。

为什么要使用它?

有很多出色的 UISwitch 替代品,为什么要创建另一个呢?嗯,与其它替代品不同,MMMSwitch

  • 在自动布局环境中表现良好
    • 当由于更改约束或其大小动画而进行调整大小时,它不会变形
  • 拥有 丰富的状态回调方法
    • 它可以区分所有用户可区分的状态,因此它可以告诉您它是否完全关闭,或者例如,用户按下它但尚未切换其状态。
    • 信息过多?没问题——只需使用回调,但检查回调中 MMMSwitchisOn 参数,并获取您想要的基本开/关信息。

安装

CocoaPods 是推荐安装 MMMSwitch 的方法。只需将此添加到您的 Podfile

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 支持丰富的状态概念,但对于某些用途,这些信息可能太多了。如果您的情况是这样,您可以像我们上面做的那样,每次回调触发时检查 MMMSwitchisOn 属性。或者,如果您想要,完整的状态丰富信息可通过回调的 newState 属性获取。

开关状态说明

在任何时候,开关的状态都如下详细说明的六个状态之一。每个状态都指示

  1. 开关目前处于关闭还是开启位置(关闭 对比 开启
  2. 用户是否在与开关交互过程中(被选中 对比 未被选中
  3. 用户是否实际按下了开关(被按下 对比 未被按下

以下是这些状态

  • MMMSwitchStateOff - 开关完全关闭,并且用户没有以任何方式进行交互
  • MMMSwitchStateSelectedUnpressedOff - 用户在开关上触发了事件(无论是在滑动块上还是其他地方),但还没有抬起手指,已经将手指从开关上拖离,并且开关处于关闭位置
  • MMMSwitchStateSelectedPressedOff - 用户在开关上触发了事件(无论是在滑动块上还是其他地方),但还没有抬起手指,并且手指保持在开关范围内(与拖移到范围外相反),并且开关处于关闭位置
  • MMMSwitchStateSelectedUnpressedOn - 用户在开关上触发了事件(无论是在滑动块上还是其他地方),但还没有抬起手指,已经将手指从开关上拖离,并且开关处于开启位置
  • MMMSwitchStateSelectedPressedOn - 用户在开关上触发了事件(无论是在滑动块上还是其他地方),但还没有抬起手指,并且手指保持在开关范围内(与拖移到范围外相反),并且开关处于开启位置
  • MMMSwitchStateOn - 开关完全开启,并且用户没有以任何方式进行交互

要求

由于 MMMSwitch 需要 Auto Layout,因此必须使用 iOS 6 SDK 或更高版本进行编译。

联系方式

Matthew McCroskey

许可证

MMMSwitch 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。