| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 | ////  KWSwitchButton.m//  westkissMob////  Created by iOS on 2022/9/23.//#import "KWSwitchButton.h"@interface KWSwitchButton ()@property (nonatomic, assign) BOOL isOpen;@property (nonatomic, strong) UIButton *btn;@property (nonatomic, strong) UIView *circleV;@end@implementation KWSwitchButton- (void)setIsOpen:(BOOL)isOpen animate:(BOOL)animate {    self.isOpen = isOpen;    [self setStatus:isOpen animate:animate];    }-(void)setCloseColor:(UIColor *)closeColor {    _closeColor = closeColor;    if (!self.isOpen) {        self.backgroundColor = closeColor;    }}- (void)setOpenColor:(UIColor *)openColor {    _openColor = openColor;    if (self.isOpen) {        self.backgroundColor = openColor;    }}- (void)setCircleColor:(UIColor *)circleColor {    _circleColor = circleColor;    self.circleV.backgroundColor = circleColor;}- (void)setStatus:(BOOL)flag animate:(BOOL)animated {    if (!animated) {        self.backgroundColor = flag ? self.openColor : self.closeColor;        [self.circleV mas_remakeConstraints:^(MASConstraintMaker *make) {            make.top.equalTo(self).offset(2);            make.bottom.equalTo(self).offset(-2);            if (flag) {                make.right.equalTo(self).offset(-2);            } else {                make.left.equalTo(self).offset(2);            }            make.width.equalTo(self.circleV.mas_height).multipliedBy(1);        }];        return;    }    [UIView animateWithDuration:(NSTimeInterval)(0.25) animations:^{        self.backgroundColor = flag ? self.openColor : self.closeColor;        CGRect rect = self.circleV.frame;        if (flag) {            rect.origin.x = self.bounds.size.width - 2 - (self.bounds.size.height-4);        } else {            rect.origin.x = 2;        }        self.circleV.frame = rect;    } completion:^(BOOL finished) {        self.backgroundColor = flag ? self.openColor : self.closeColor;        [self.circleV mas_remakeConstraints:^(MASConstraintMaker *make) {            make.top.equalTo(self).offset(2);            make.bottom.equalTo(self).offset(-2);            if (flag) {                make.right.equalTo(self).offset(-2);            } else {                make.left.equalTo(self).offset(2);            }            make.width.equalTo(self.circleV.mas_height).multipliedBy(1);        }];    }];} - (instancetype)init {    self = [super init];    if (self) {        self.frame = CGRectMake(0, 0, 60, 32);        self.closeColor = [UIColor colorWithHexString:@"#E5E5E5"];        self.openColor = [UIColor colorWithHexString:@"#FFDEE2"];        self.circleColor = [UIColor whiteColor];        self.backgroundColor = _openColor;        self.layer.cornerRadius = 16;        self.layer.masksToBounds = true;                [self configSubV];                self.circleV.layer.cornerRadius = 14;        self.isOpen = true;    }    return self;}- (void)configSubV {    [self addSubview:self.circleV];    [self addSubview:self.btn];        [self.circleV mas_makeConstraints:^(MASConstraintMaker *make) {        make.top.equalTo(self).offset(2);        make.right.bottom.equalTo(self).offset(-2);        make.width.equalTo(self.circleV.mas_height).multipliedBy(1);    }];    [self.btn mas_makeConstraints:^(MASConstraintMaker *make) {        make.edges.equalTo(self);    }];}- (UIButton *)btn {    if (!_btn) {        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];        [btn addTarget:self action:@selector(btnAction) forControlEvents:UIControlEventTouchUpInside];        _btn = btn;    }    return  _btn;}- (void)btnAction {//    self.isOpen = !self.isOpen;    if (self.clickBack) {        self.clickBack();    }}- (UIView *)circleV {    if (!_circleV) {        UIView *v = [[UIView alloc] init];        v.layer.masksToBounds = true;        _circleV = v;    }    return  _circleV;}@end
 |