// // 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