| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- //
- // RKActionSheet.m
- // YBVideo
- //
- // Created by YB007 on 2020/7/2.
- // Copyright © 2020 cat. All rights reserved.
- //
- #import "RKActionSheet.h"
- #define sheetHeight 50
- @interface RKSheetBtn : UIButton
- @property(nonatomic,assign)RKSheetType sheetType;
- @property(nonatomic,copy)RKSheetBlock sheetBtnBlock;
- @end
- @implementation RKSheetBtn
- @end
- @interface RKActionSheet()<UIGestureRecognizerDelegate>
- {
- BOOL _ishp;
- }
- @property(nonatomic,strong)MASViewAttribute *nextMaViewTop;
- @property(nonatomic,strong)NSString *titleStr; //标题
- @property(nonatomic,strong)UILabel *titleL; //标题 label
- @property(nonatomic,strong)UIView *bgView;
- @property(nonatomic,strong)UIView *exceptCancelView; //除了except 取消按钮(RKSheet_Cancle)外的所有空间
- @property(nonatomic,strong)RKSheetBtn *cancelBtn; //取消按钮
- @property(nonatomic,strong)NSMutableArray *exceptCancelMutArray; //除了取消按钮外数组
- @end
- @implementation RKActionSheet
- - (instancetype)initWithTitle:(NSString *)titleStr{
- self = [super init];
- if (self) {
- _titleStr = titleStr;
- [self createUI];
- }
- return self;
- }
- -(void)createUI {
- self.frame = CGRectMake(0, 0, _window_width, _window_height);
- self.backgroundColor = RGB_COLOR(@"#000000", 0.3);
- self.exceptCancelMutArray = [NSMutableArray array];
-
- [self addSubview:self.bgView];
- [_bgView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.bottom.equalTo(self.mas_bottom).offset(-ShowDiff-10);
- make.width.equalTo(self.mas_width).multipliedBy(0.9);
- make.centerX.equalTo(self);
- }];
-
- [_bgView addSubview:self.exceptCancelView];
-
- _nextMaViewTop = _exceptCancelView.mas_top;
- // [[UIApplication sharedApplication].delegate.window addSubview:self];
-
- UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(dismissView)];
- tap.delegate = self;
- [self addGestureRecognizer:tap];
-
- if (![PublicObj checkNull:_titleStr]) {
- [_exceptCancelView addSubview:self.titleL];
- [_titleL mas_makeConstraints:^(MASConstraintMaker *make) {
- make.centerX.equalTo(_exceptCancelView);
- make.top.equalTo(_exceptCancelView.mas_top).offset(10);
- }];
- UILabel *titleLineL = [[UILabel alloc]init];
- titleLineL.backgroundColor = RGB_COLOR(@"#969696", 0.8);
- [_exceptCancelView addSubview:titleLineL];
- [titleLineL mas_makeConstraints:^(MASConstraintMaker *make) {
- make.width.centerX.equalTo(_exceptCancelView);
- make.height.mas_equalTo(0.5);
- make.top.equalTo(_titleL.mas_bottom).offset(18);
- }];
- _nextMaViewTop = titleLineL.mas_bottom;
- }
-
- }
- - (UIView *)bgView{
- if (!_bgView) {
- _bgView = [[UIView alloc]init];
- _bgView.backgroundColor = UIColor.clearColor;
- }
- return _bgView;
- }
- - (UIView *)exceptCancelView{
- if (!_exceptCancelView) {
- _exceptCancelView = [[UIView alloc]init];
- _exceptCancelView.backgroundColor = [UIColor whiteColor];
- _exceptCancelView.layer.cornerRadius = 10;
- _exceptCancelView.layer.masksToBounds = YES;
- }
- return _exceptCancelView;
- }
- - (UILabel *)titleL {
- if (!_titleL) {
- _titleL = [[UILabel alloc]init];
- _titleL.text = _titleStr;
- _titleL.font = SYS_Font(13);
- _titleL.textColor = RGB_COLOR(@"#969696", 1);
- }
- return _titleL;
- }
- -(void)addLineOfTop:(RKSheetBtn *)btn {
- UILabel *lineL = [[UILabel alloc]init];
- lineL.backgroundColor = RGB_COLOR(@"#969696", 0.8);
- [_exceptCancelView addSubview:lineL];
- [lineL mas_makeConstraints:^(MASConstraintMaker *make) {
- make.width.centerX.equalTo(_exceptCancelView);
- make.height.mas_equalTo(0.5);
- make.bottom.equalTo(btn.mas_top);
- }];
- }
- -(void)dismissView {
- [self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
- [self removeFromSuperview];
- }
- - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;{
- if ([touch.view isDescendantOfView:self.bgView]) {
- return NO;
- }
- return YES;
- }
- -(void)addActionWithType:(RKSheetType)sheetType andTitle:(NSString *)titile complete:(RKSheetBlock)complete {
- RKSheetBtn *btn = [RKSheetBtn buttonWithType:UIButtonTypeCustom];
- btn.titleLabel.font = SYS_Font(15);
- [btn setTitle:titile forState:0];
- btn.sheetBtnBlock = complete;
- btn.sheetType = sheetType;
- [btn addTarget:self action:@selector(clickActionBtn:) forControlEvents:UIControlEventTouchUpInside];
-
- //这里根据 RKSheetType 来显示 btn 标题颜色 可自行扩展结构体
- switch (sheetType) {
- case RKSheet_Cancle:
- [btn setTitleColor:RGB_COLOR(@"#969696", 1) forState:0];
- break;
- case RKSheet_Default:
- [btn setTitleColor:RGB_COLOR(@"#323232", 1) forState:0];
- break;
- case RKSheet_FunPink:
- [btn setTitleColor:Pink_Cor forState:0];
- default:
- break;
- }
- if (btn.sheetType != RKSheet_Cancle) {
- [_exceptCancelMutArray addObject:btn];
- [_exceptCancelView addSubview:btn];
- }else{
- btn.layer.cornerRadius = _exceptCancelView.layer.cornerRadius;
- btn.layer.masksToBounds = YES;
- _cancelBtn = btn;
- _cancelBtn.backgroundColor = _exceptCancelView.backgroundColor;
- [_bgView addSubview:_cancelBtn];
- }
-
- }
- -(void)clickActionBtn:(RKSheetBtn*)sender {
-
- if (sender.sheetBtnBlock) {
- sender.sheetBtnBlock();
- }
- [self dismissView];
- }
- -(void)showLandscapeSheet:(UIView*)view;{
- _ishp = YES;
- [view.superview addSubview:self];
- [self showSheet];
- }
- -(void)showSheet {
- if(!_ishp){
- [[UIApplication sharedApplication].delegate.window addSubview:self];
- }
- //取消按钮
- if (_cancelBtn) {
- [_cancelBtn mas_makeConstraints:^(MASConstraintMaker *make) {
- make.bottom.equalTo(_bgView.mas_bottom);
- make.centerX.width.equalTo(_exceptCancelView);
- make.height.mas_equalTo(sheetHeight);
- }];
- [_exceptCancelView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.bottom.equalTo(_cancelBtn.mas_top).offset(-10);
- make.width.centerX.equalTo(_bgView);
- make.top.equalTo(_bgView.mas_top);
- }];
- }else{
- [_exceptCancelView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.bottom.equalTo(_bgView.mas_bottom);
- make.width.centerX.equalTo(_bgView);
- make.top.equalTo(_bgView.mas_top);
- }];
- }
-
- //除去取消按钮外其他按钮
- MASViewAttribute *bottomeMas = _exceptCancelView.mas_bottom;
- for (int i = ((int)_exceptCancelMutArray.count-1); i >= 0; i--) {
- RKSheetBtn *btn = _exceptCancelMutArray[i];
- [btn mas_makeConstraints:^(MASConstraintMaker *make) {
- make.bottom.equalTo(bottomeMas).offset(-0.5);
- make.centerX.width.equalTo(_exceptCancelView);
- make.height.mas_equalTo(sheetHeight);
- if (i == 0) {
- make.top.equalTo(_nextMaViewTop).offset(0.5);
- }
- }];
- if (i > 0 ) {
- [self addLineOfTop:btn];
- }
- bottomeMas = btn.mas_top;
- }
-
- }
- @end
|