首页 > 代码库 > 定制二选一按钮SwitchButton

定制二选一按钮SwitchButton

定制二选一按钮SwitchButton

效果:

源码:

SwitchButton.h 与 SwitchButton.m

////  SwitchButton.h//  KongJian////  Created by YouXianMing on 14/10/24.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import <UIKit/UIKit.h>@protocol SwitchButtonDelegate <NSObject>- (void)switchButtonState:(BOOL)state;@end@interface SwitchButton : UIView/** *  代理 */@property (nonatomic, assign) id<SwitchButtonDelegate> delegate;/** *  3个view */@property (nonatomic, strong) UIView *leftView;@property (nonatomic, strong) UIView *rightView;@property (nonatomic, strong) UIView *blockView;/** *  动画持续时间 */@property (nonatomic, assign) NSTimeInterval duration;/** *  块是否在左边 */@property (nonatomic, assign) BOOL    blockAtLeft;/** *  背景颜色 */@property (nonatomic, strong) UIColor  *leftBackgroundColor;@property (nonatomic, strong) UIColor  *rightBackgroundColor;/** *  便利的创建出按钮 * *  @param leftText  左边显示的文本 *  @param rightText 右边显示的文本 *  @param size      button的尺寸 * *  @return button对象 */+ (SwitchButton *)createDefaultTypeButtonWithLeftText:(NSString *)leftText                                            rightText:(NSString *)rightText                                                 size:(CGSize)size;@end
////  SwitchButton.m//  KongJian////  Created by YouXianMing on 14/10/24.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "SwitchButton.h"@interface SwitchButton ()@property (nonatomic, strong) UIButton *button;@property (nonatomic, strong) UIView   *leftBackView;@property (nonatomic, strong) UIView   *rightBackView;@property (nonatomic, strong) UIView   *blockBackView;@end@implementation SwitchButton- (instancetype)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {        self.layer.masksToBounds = YES;                // 按钮        _button = [[UIButton alloc] initWithFrame:self.bounds];        [_button addTarget:self                    action:@selector(buttonEvent)          forControlEvents:UIControlEventTouchUpInside];        [self addSubview:_button];                // 左侧view        _leftBackView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,                                                                 self.bounds.size.width / 2.f,                                                                 self.bounds.size.height)];        _leftBackView.userInteractionEnabled = NO;        [self addSubview:_leftBackView];                // 右侧view        _rightBackView = [[UIView alloc] initWithFrame:CGRectMake(self.bounds.size.width / 2.f, 0,                                                                  self.bounds.size.width / 2.f, self.bounds.size.height)];        _rightBackView.userInteractionEnabled = NO;        [self addSubview:_rightBackView];                // 遮挡用的view        _blockBackView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,                                                                  self.bounds.size.width / 2.f,                                                                  self.bounds.size.height)];        _blockBackView.userInteractionEnabled = NO;        [self addSubview:_blockBackView];            }    return self;}- (void)buttonEvent {        if (_blockBackView.frame.origin.x == 0) {        if (_delegate) {            [_delegate switchButtonState:YES];        }                [UIView animateWithDuration:(_duration > 0 ? _duration : 0.2f)                         animations:^{                             _blockBackView.frame = CGRectMake(self.bounds.size.width / 2.f, 0,                                                               self.bounds.size.width / 2.f, self.bounds.size.height);                             if (_leftBackgroundColor) {                                 _button.backgroundColor = _leftBackgroundColor;                             }                                                      } completion:^(BOOL finished) {                                                      }];    } else {        [_delegate switchButtonState:NO];        [UIView animateWithDuration:(_duration > 0 ? _duration : 0.2f)                         animations:^{                             _blockBackView.frame = CGRectMake(0, 0,                                                               self.bounds.size.width / 2.f, self.bounds.size.height);                             if (_rightBackgroundColor) {                                 _button.backgroundColor = _rightBackgroundColor;                             }                         } completion:^(BOOL finished) {                                                      }];    }}@synthesize leftView = _leftView;- (void)setLeftView:(UIView *)leftView {    _leftView = leftView;    leftView.userInteractionEnabled = NO;    [_leftBackView addSubview:leftView];        [self bringSubviewToFront:_blockBackView];}@synthesize rightView = _rightView;- (void)setRightView:(UIView *)rightView {    _rightView = rightView;    rightView.userInteractionEnabled = NO;    [_rightBackView addSubview:rightView];        [self bringSubviewToFront:_blockBackView];}@synthesize blockView = _blockView;- (void)setBlockView:(UIView *)blockView {    _blockView = blockView;    blockView.userInteractionEnabled = NO;    [_blockBackView addSubview:blockView];        [self bringSubviewToFront:_blockBackView];}@synthesize blockAtLeft = _blockAtLeft;- (void)setBlockAtLeft:(BOOL)blockAtLeft {    _blockAtLeft = blockAtLeft;    if (blockAtLeft == YES) {        _blockBackView.frame = CGRectMake(0, 0,                                          self.bounds.size.width / 2.f,                                          self.bounds.size.height);    } else {        _blockBackView.frame = CGRectMake(self.bounds.size.width / 2.f, 0,                                          self.bounds.size.width / 2.f, self.bounds.size.height);    }}#pragma mark - 便利构造器+ (SwitchButton *)createDefaultTypeButtonWithLeftText:(NSString *)leftText                                            rightText:(NSString *)rightText                                                 size:(CGSize)size {    SwitchButton *button        = [[SwitchButton alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)];    button.layer.cornerRadius   = 7.f;    button.blockAtLeft          = NO;    button.leftBackgroundColor  = [UIColor colorWithRed:0.969 green:0.365 blue:0.137 alpha:1];    button.backgroundColor      = [UIColor colorWithRed:0.969 green:0.365 blue:0.137 alpha:1];    button.rightBackgroundColor = [UIColor colorWithRed:0.278 green:0.835 blue:0.855 alpha:1];        button.duration             = 0.3f;        // 左侧文本    UILabel *man      = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, button.bounds.size.width/2.f,                                                                  button.bounds.size.height)];    man.text          = leftText;    man.textColor     = [UIColor whiteColor];    man.font          = [UIFont systemFontOfSize:20.f];    man.textAlignment = NSTextAlignmentCenter;    button.leftView   = man;        // 右侧文本    UILabel *woman      = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, button.bounds.size.width/2.f,                                                                    button.bounds.size.height)];    woman.text          = rightText;    woman.textColor     = [UIColor whiteColor];    woman.font          = [UIFont systemFontOfSize:20.f];    woman.textAlignment = NSTextAlignmentCenter;    button.rightView    = woman;        // 中间挡住的块    UIView *blockView = [[UIView alloc] initWithFrame:CGRectMake(4, 4, button.bounds.size.width/2.f - 8,                                                                 button.bounds.size.height - 8)];    blockView.layer.cornerRadius = 7.f;    blockView.backgroundColor = [UIColor whiteColor];    button.blockView = blockView;        return button;}@end

使用时候源码:

////  ViewController.m//  KongJian////  Created by YouXianMing on 14/10/24.//  Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "ViewController.h"#import "SwitchButton.h"@interface ViewController ()<SwitchButtonDelegate>@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        SwitchButton *button = [SwitchButton createDefaultTypeButtonWithLeftText:@"Y"                                                                   rightText:@"X"                                                                        size:CGSizeMake(110, 70)];    button.delegate      = self;    button.center        = self.view.center;    [self.view addSubview:button];}- (void)switchButtonState:(BOOL)state {    NSLog(@"%d", state);}@end

核心的地方:

便利构造器(你可以自己去写):

 

定制二选一按钮SwitchButton