Commit d59e8793a711d7266d5d9352e7cd35026d58f9bd
1 parent
51a215fd
no message
Showing
2 changed files
with
718 additions
and
0 deletions
CNLiveLoginModule/Classes/View/CNLiveLoginTipsView.h
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveLoginTipsView.h | |
| 3 | +// CNLiveLoginModule | |
| 4 | +// | |
| 5 | +// Created by CNLive-zxw on 2019/11/11. | |
| 6 | +// Copyright © 2019 cnlive. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +#import <UIKit/UIKit.h> | |
| 10 | + | |
| 11 | +NS_ASSUME_NONNULL_BEGIN | |
| 12 | + | |
| 13 | +@interface CNLiveLoginTipsView : UIView | |
| 14 | + | |
| 15 | ++ (void)showCenterLoginViewWithVC:(UIViewController *)controller; | |
| 16 | ++ (void)hide; | |
| 17 | + | |
| 18 | +@end | |
| 19 | + | |
| 20 | +NS_ASSUME_NONNULL_END | ... | ... |
CNLiveLoginModule/Classes/View/CNLiveLoginTipsView.m
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveLoginTipsView.m | |
| 3 | +// CNLiveLoginModule | |
| 4 | +// | |
| 5 | +// Created by CNLive-zxw on 2019/11/11. | |
| 6 | +// Copyright © 2019 cnlive. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +#import "CNLiveLoginTipsView.h" | |
| 10 | +#import "CNLiveLoginTextField.h" | |
| 11 | +#import "NSString+CNLiveExtension.h" | |
| 12 | +#import "NSString+Category.h" | |
| 13 | +#import "CNLiveUserAgreementManager.h" | |
| 14 | +#import "CNLiveCategory.h" | |
| 15 | + | |
| 16 | +#import "MJExtension.h" | |
| 17 | +#import "QMUIKit.h" | |
| 18 | +#import "YYKit.h" | |
| 19 | +#import "TIMAdapter.h" | |
| 20 | +#import "CommonLibrary.h" | |
| 21 | +#import <Masonry/Masonry.h> | |
| 22 | + | |
| 23 | +//#import "CNNavigationController.h" | |
| 24 | +#import "CNLiveChooseCountryController.h" | |
| 25 | +#import <CNLiveUserSystemSDK/CNLiveUserSystemCenter.h> | |
| 26 | +#import <CNLiveUserSystemSDK/CNLiveUserSystemTypeDef.h> | |
| 27 | +#import "CNUserInfoManager.h" | |
| 28 | +#import "CNLiveEnvironment.h" | |
| 29 | + | |
| 30 | + | |
| 31 | +#import "CNLiveThreeLoginView.h" | |
| 32 | + | |
| 33 | + | |
| 34 | +//三方登录 | |
| 35 | +//#import "CNThreeLoginViewController.h" | |
| 36 | +//#import "CNLiveShareImageManager.h" | |
| 37 | +//#import "CNThreeLoginModel.h" | |
| 38 | +//#import "CNBindingManageRequest.h" | |
| 39 | +//#import "NSObject+TransformModel.h" | |
| 40 | +//#import "CNShareExtensionGroup.h" | |
| 41 | +//#import "CNLoginIUsernfoViewController.h" | |
| 42 | + | |
| 43 | +@interface CNLiveLoginTipsView()<UITextFieldDelegate,ChooseCountriesDelegate,CNLiveThreeLoginViewDelegate>{ | |
| 44 | + dispatch_source_t _timer; | |
| 45 | + NSString * _codeStr; | |
| 46 | + NSString * _countryStr; | |
| 47 | +} | |
| 48 | +@property (nonatomic, strong) IMALoginParam *loginParam; | |
| 49 | + | |
| 50 | +@property (nonatomic, strong) UIImageView *whiteView; | |
| 51 | +@property (nonatomic, strong) UIButton *close; | |
| 52 | + | |
| 53 | +@property (nonatomic, strong) QMUILabel *countryLbl; | |
| 54 | +@property (nonatomic, strong) UIButton *countryBtn; | |
| 55 | +@property (nonatomic, strong) UIView *line; | |
| 56 | + | |
| 57 | +@property (nonatomic, strong) CNLiveLoginTextField *telTF; | |
| 58 | +@property (nonatomic, strong) CNLiveLoginTextField *codeTF; | |
| 59 | +@property (nonatomic, strong) UIButton *codeBtn; | |
| 60 | +@property (nonatomic, strong) YYLabel *protocolLab; | |
| 61 | +@property (nonatomic, strong) UIButton *login; | |
| 62 | +@property (nonatomic, strong) CNLiveThreeLoginView *threeLoginView; | |
| 63 | +@property (nonatomic, strong) CNLiveLoginTipsView *loginView; | |
| 64 | + | |
| 65 | +@end | |
| 66 | + | |
| 67 | +@implementation CNLiveLoginTipsView | |
| 68 | +#define XWKeyWindow [UIApplication sharedApplication].keyWindow | |
| 69 | + | |
| 70 | +static const CGFloat rowHeight = 30; | |
| 71 | +static const CGFloat margin = 15; | |
| 72 | + | |
| 73 | +#pragma mark - 单例 | |
| 74 | ++ (instancetype)manager { | |
| 75 | + static CNLiveLoginTipsView *_singleton = nil; | |
| 76 | + static dispatch_once_t onceToken; | |
| 77 | + dispatch_once(&onceToken, ^{ | |
| 78 | + //不能再使用alloc方法 | |
| 79 | + //因为已经重写了allocWithZone方法,所以这里要调用父类的分配空间的方法 | |
| 80 | + _singleton = [[super allocWithZone:NULL] init]; | |
| 81 | + }); | |
| 82 | + return _singleton; | |
| 83 | + | |
| 84 | +} | |
| 85 | + | |
| 86 | ++ (void)showCenterLoginViewWithVC:(UIViewController *)controller { | |
| 87 | + [CNLiveLoginTipsView manager].loginView = [[CNLiveLoginTipsView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)]; | |
| 88 | + [CNLiveLoginTipsView manager].loginView.backgroundColor = [UIColor colorWithWhite:0.2f alpha:0.4f]; | |
| 89 | + [controller.view addSubview:[CNLiveLoginTipsView manager].loginView]; | |
| 90 | +} | |
| 91 | + | |
| 92 | +#pragma mark - Init | |
| 93 | +- (instancetype)initWithFrame:(CGRect)frame{ | |
| 94 | + if(self = [super initWithFrame:frame]){ | |
| 95 | + _codeStr = @"86"; | |
| 96 | + _countryStr = @"中国大陆"; | |
| 97 | + | |
| 98 | + BOOL isAutoLogin = [IMAPlatform isAutoLogin]; | |
| 99 | + if (isAutoLogin) { | |
| 100 | + _loginParam = [IMALoginParam loadFromLocal]; | |
| 101 | + | |
| 102 | + } else { | |
| 103 | + _loginParam = [[IMALoginParam alloc] init]; | |
| 104 | + | |
| 105 | + } | |
| 106 | + | |
| 107 | + [IMAPlatform configWith:_loginParam.config]; | |
| 108 | + [self setUpUI]; | |
| 109 | +// UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(closeBtn:)]; | |
| 110 | +// [self addGestureRecognizer:tap]; | |
| 111 | + | |
| 112 | + } | |
| 113 | + return self; | |
| 114 | + | |
| 115 | +} | |
| 116 | +#pragma mark - UI | |
| 117 | +- (void)setUpUI{ | |
| 118 | + [self addSubview:self.whiteView]; | |
| 119 | + [self addSubview:self.close]; | |
| 120 | + | |
| 121 | + [self addSubview:self.countryLbl]; | |
| 122 | + [self addSubview:self.countryBtn]; | |
| 123 | + [self addSubview:self.line]; | |
| 124 | + | |
| 125 | + [self addSubview:self.telTF]; | |
| 126 | + [self addSubview:self.codeTF]; | |
| 127 | + [self addSubview:self.codeBtn]; | |
| 128 | + | |
| 129 | + [self addSubview:self.login]; | |
| 130 | + [self addSubview:self.threeLoginView]; | |
| 131 | + [self addSubview:self.protocolLab]; | |
| 132 | + [self.protocolLab mas_makeConstraints:^(MASConstraintMaker *make) { | |
| 133 | + make.top.mas_equalTo(self.threeLoginView.mas_bottom).mas_offset(0); | |
| 134 | + make.bottom.mas_equalTo(self.whiteView.mas_bottom).mas_offset(-0); | |
| 135 | + make.left.mas_equalTo(self.countryLbl.mas_left).mas_offset(0); | |
| 136 | + make.right.mas_equalTo(self.countryBtn.mas_right).mas_offset(-0); | |
| 137 | + | |
| 138 | + }]; | |
| 139 | + | |
| 140 | +} | |
| 141 | +- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { | |
| 142 | + [self endEditing:YES]; | |
| 143 | +} | |
| 144 | + | |
| 145 | +#pragma mark - UITextFieldDelegate | |
| 146 | +- (void)textFieldDidChange:(UITextField *)textField { | |
| 147 | + if (![NSString isEmpty:_telTF.text] && ![NSString isEmpty:_codeTF.text]) { | |
| 148 | + _login.enabled = YES; | |
| 149 | + | |
| 150 | + } | |
| 151 | + else { | |
| 152 | + _login.enabled = NO; | |
| 153 | + | |
| 154 | + } | |
| 155 | + | |
| 156 | +} | |
| 157 | + | |
| 158 | +- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { | |
| 159 | + if ([textField isEqual:self.telTF]) { | |
| 160 | + NSInteger maxTextLength = 20; | |
| 161 | + if(string.length == 0) { | |
| 162 | + //判断是不是删除键 | |
| 163 | + return YES; | |
| 164 | + } | |
| 165 | + else if(textField.text.length >= maxTextLength) { | |
| 166 | + //输入的字符个数大于11,则无法继续输入,返回NO表示禁止输入 | |
| 167 | + NSLog(@"输入的字符个数大于20,忽略输入"); | |
| 168 | + return NO; | |
| 169 | + } | |
| 170 | +// else if (!CNLiveStringIsNumber(string)) { | |
| 171 | +// //string复制的可能为特殊字符,过滤 | |
| 172 | +// return NO; | |
| 173 | +// } | |
| 174 | + else if (textField.text.length + string.length > maxTextLength){ | |
| 175 | + NSInteger length = textField.text.length; | |
| 176 | + NSInteger needLen = maxTextLength - length; | |
| 177 | + textField.text = [textField.text stringByAppendingString:[string substringToIndex:needLen]]; | |
| 178 | + return NO; | |
| 179 | + } | |
| 180 | + else{ | |
| 181 | + return YES; | |
| 182 | + } | |
| 183 | + }else if ([textField isEqual:self.codeTF]){ | |
| 184 | + NSInteger maxTextLength = 6; | |
| 185 | + if(string.length == 0) { | |
| 186 | + //判断是不是删除键 | |
| 187 | + return YES; | |
| 188 | + } | |
| 189 | + else if(textField.text.length >= maxTextLength) { | |
| 190 | + //输入的字符个数大于6,则无法继续输入,返回NO表示禁止输入 | |
| 191 | + return NO; | |
| 192 | + } | |
| 193 | +// else if (!CNLiveStringIsNumber(string)) { | |
| 194 | +// //string复制的可能为特殊字符,过滤 | |
| 195 | +// return NO; | |
| 196 | +// } | |
| 197 | + else if (textField.text.length + string.length > maxTextLength){ | |
| 198 | + //如果textF.text + string > 6 截取6位 | |
| 199 | +#warning 有个问题,光标没有及时更新到最后一位 | |
| 200 | + NSInteger length = textField.text.length; | |
| 201 | + NSInteger needLen = maxTextLength - length; | |
| 202 | + textField.text = [textField.text stringByAppendingString:[string substringToIndex:needLen]]; | |
| 203 | + return NO; | |
| 204 | + } | |
| 205 | + else{ | |
| 206 | + return YES; | |
| 207 | + } | |
| 208 | + }else | |
| 209 | + { | |
| 210 | + return YES; | |
| 211 | + } | |
| 212 | +} | |
| 213 | +/* | |
| 214 | +// Only override drawRect: if you perform custom drawing. | |
| 215 | +// An empty implementation adversely affects performance during animation. | |
| 216 | +- (void)drawRect:(CGRect)rect { | |
| 217 | + // Drawing code | |
| 218 | +} | |
| 219 | +*/ | |
| 220 | +#pragma mark - Lazy Loading | |
| 221 | +- (UIImageView *)whiteView{ | |
| 222 | + if (!_whiteView) { | |
| 223 | + _whiteView = [[UIImageView alloc] initWithFrame:CGRectMake(([UIScreen mainScreen].bounds.size.width-287)/2.0, ([UIScreen mainScreen].bounds.size.height-396)/2.0, 287, 396)]; | |
| 224 | + _whiteView.image = [UIImage imageNamed:@"tourists_login_bg"]; | |
| 225 | + } | |
| 226 | + return _whiteView; | |
| 227 | +} | |
| 228 | + | |
| 229 | +- (UIButton *)close{ | |
| 230 | + if (!_close) { | |
| 231 | + _close = [[UIButton alloc]initWithFrame:CGRectMake(CGRectGetMaxX(_whiteView.frame)-25-10, CGRectGetMinY(_whiteView.frame)+10, 25, 25)]; | |
| 232 | + [_close setImage:[UIImage imageNamed:@"tourists_login_close"] forState:UIControlStateNormal]; | |
| 233 | + [_close addTarget:self action:@selector(closeBtn:) forControlEvents:UIControlEventTouchUpInside]; | |
| 234 | + } | |
| 235 | + return _close; | |
| 236 | +} | |
| 237 | + | |
| 238 | +- (QMUILabel *)countryLbl{ | |
| 239 | + if (!_countryLbl){ | |
| 240 | + _countryLbl = [[QMUILabel alloc] initWithFrame:CGRectMake(_whiteView.left+margin, _whiteView.top+100, 80, rowHeight)]; | |
| 241 | + [_countryLbl setFont:UIFontMake(13)]; | |
| 242 | + _countryLbl.textColor = [UIColor colorWithRed:49/255.0 green:49/255.0 blue:49/255.0 alpha:1.0]; | |
| 243 | + _countryLbl.text = _countryStr; | |
| 244 | + _countryLbl.userInteractionEnabled = YES; | |
| 245 | + } | |
| 246 | + return _countryLbl; | |
| 247 | +} | |
| 248 | + | |
| 249 | +- (UIButton *)countryBtn{ | |
| 250 | + if (!_countryBtn){ | |
| 251 | + _countryBtn = [[UIButton alloc]initWithFrame:CGRectMake(kScreenWidth-_whiteView.left-15-70, _countryLbl.top, 70, _countryLbl.height)]; | |
| 252 | + _countryBtn.titleLabel.font = UIFontMake(13); | |
| 253 | + [_countryBtn setTitleColor:[UIColor colorWithRed:49/255.0 green:49/255.0 blue:49/255.0 alpha:1.0] forState:UIControlStateNormal]; | |
| 254 | + [_countryBtn setTitle:[NSString stringWithFormat:@"+%@", _codeStr] forState:UIControlStateNormal]; | |
| 255 | + UIImage *image = [self getImageWithImageName:@"login_country" bundleName:@"CNLiveLoginModule" targetClass:[self class]]; | |
| 256 | + [_countryBtn setImage:image forState:UIControlStateNormal]; | |
| 257 | + [_countryBtn addTarget:self action:@selector(countryBtn:) forControlEvents:UIControlEventTouchUpInside]; | |
| 258 | + _countryBtn.userInteractionEnabled = YES; | |
| 259 | + //button图片的偏移量,距上左下右分别(0, 0, 0, 0)像素点 | |
| 260 | + _countryBtn.imageEdgeInsets = UIEdgeInsetsMake(0, 60, 0, 0); | |
| 261 | + //button标题的偏移量,这个偏移量是相对于图片的 | |
| 262 | + _countryBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 10); | |
| 263 | + } | |
| 264 | + return _countryBtn; | |
| 265 | +} | |
| 266 | +- (UIView *)line{ | |
| 267 | + if(!_line){ | |
| 268 | + _line = [[UIView alloc] initWithFrame:CGRectMake(_countryLbl.left, _countryBtn.bottom, KScreenWidth - (2*_countryLbl.left), 0.5)]; | |
| 269 | + _line.backgroundColor = [UIColor colorWithRed:235/255.0 green:235/255.0 blue:235/255.0 alpha:1.0]; | |
| 270 | + } | |
| 271 | + return _line; | |
| 272 | +} | |
| 273 | +- (CNLiveLoginTextField *)telTF{ | |
| 274 | + if (!_telTF) { | |
| 275 | + _telTF = [[CNLiveLoginTextField alloc] initWithFrame:CGRectMake(_countryLbl.left, _countryLbl.bottom + margin, KScreenWidth - (2*_countryLbl.left), rowHeight)]; | |
| 276 | + _telTF.placeholderColor = KGray173Color; | |
| 277 | + _telTF.textColor = [UIColor blackColor]; | |
| 278 | + _telTF.keyboardType = UIKeyboardTypeNumberPad; | |
| 279 | + _telTF.placeholder = @"请输入手机号号码"; | |
| 280 | + _telTF.font = UIFontMake(13); | |
| 281 | + _telTF.clearButtonMode = UITextFieldViewModeAlways; | |
| 282 | + _telTF.textAlignment = NSTextAlignmentLeft; | |
| 283 | + [_telTF addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; | |
| 284 | + _telTF.delegate = self; | |
| 285 | + } | |
| 286 | + return _telTF; | |
| 287 | +} | |
| 288 | +- (CNLiveLoginTextField *)codeTF { | |
| 289 | + if (!_codeTF) { | |
| 290 | + _codeTF = [[CNLiveLoginTextField alloc] initWithFrame:CGRectMake(_telTF.left, _telTF.bottom + margin, 120, _telTF.height)]; | |
| 291 | + _codeTF.keyboardType = UIKeyboardTypeNumberPad; | |
| 292 | + _codeTF.placeholder = @"请输入验证码"; | |
| 293 | + _codeTF.textColor = [UIColor blackColor]; | |
| 294 | + _codeTF.placeholderColor = KGray173Color; | |
| 295 | + _codeTF.font = UIFontMake(13); | |
| 296 | + _codeTF.textAlignment = NSTextAlignmentLeft; | |
| 297 | + [_codeTF addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; | |
| 298 | + _codeTF.clearButtonMode = UITextFieldViewModeWhileEditing; | |
| 299 | + _codeTF.delegate = self; | |
| 300 | + } | |
| 301 | + return _codeTF; | |
| 302 | +} | |
| 303 | +- (UIButton *)codeBtn{ | |
| 304 | + if (!_codeBtn) { | |
| 305 | + _codeBtn = [[UIButton alloc]initWithFrame:CGRectMake(kScreenWidth-_whiteView.left-margin-58, _codeTF.top+(rowHeight-22)/2.0, 58, 22)]; | |
| 306 | + _codeBtn.titleLabel.font = [UIFont systemFontOfSize:10.0]; | |
| 307 | + [_codeBtn setBackgroundImage:[UIImage imageNamed:@"dl_yzman"] forState:UIControlStateNormal]; | |
| 308 | + [_codeBtn setTitleColor:[UIColor colorWithRed:35/255.0 green:212/255.0 blue:30/255.0 alpha:1.0] forState:UIControlStateNormal]; | |
| 309 | + [_codeBtn setBackgroundImage:nil forState:UIControlStateSelected]; | |
| 310 | + [_codeBtn setTitleColor:[UIColor colorWithRed:35/255.0 green:212/255.0 blue:30/255.0 alpha:1.0] forState:UIControlStateSelected]; | |
| 311 | + [_codeBtn addTarget:self action:@selector(codeBtn:) forControlEvents:UIControlEventTouchUpInside]; | |
| 312 | + [_codeBtn setAdjustsImageWhenHighlighted:NO]; | |
| 313 | + } | |
| 314 | + return _codeBtn; | |
| 315 | +} | |
| 316 | +- (UIButton *)login{ | |
| 317 | + if (!_login) { | |
| 318 | + _login = [[UIButton alloc]initWithFrame:CGRectMake(([UIScreen mainScreen].bounds.size.width-180)/2.0, _codeTF.bottom + margin, 180, rowHeight)]; | |
| 319 | + _login.backgroundColor = [UIColor colorWithRed:35/255.0 green:212/255.0 blue:30/255.0 alpha:1.0]; | |
| 320 | + _login.titleLabel.font = [UIFont systemFontOfSize:14.0]; | |
| 321 | + _login.layer.cornerRadius = 15; | |
| 322 | + _login.layer.masksToBounds = YES; | |
| 323 | + [_login setTitle:@"登录" forState:UIControlStateNormal]; | |
| 324 | + [_login setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; | |
| 325 | + [_login addTarget:self action:@selector(loginBtn:) forControlEvents:UIControlEventTouchUpInside]; | |
| 326 | + } | |
| 327 | + return _login; | |
| 328 | +} | |
| 329 | + | |
| 330 | +- (CNLiveThreeLoginView *)threeLoginView{ | |
| 331 | + if (!_threeLoginView) { | |
| 332 | + _threeLoginView = [[CNLiveThreeLoginView alloc]initWithFrame:CGRectMake(_whiteView.left, _login.bottom+margin, _whiteView.width, 80)]; | |
| 333 | + _threeLoginView.delegate = self; | |
| 334 | + } | |
| 335 | + return _threeLoginView; | |
| 336 | +} | |
| 337 | + | |
| 338 | +- (YYLabel *)protocolLab { | |
| 339 | + if (!_protocolLab) { | |
| 340 | + _protocolLab = [[YYLabel alloc] init]; | |
| 341 | + _protocolLab.textAlignment = NSTextAlignmentCenter; | |
| 342 | + | |
| 343 | + NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:@"登录即代表阅读并同意《用户协议》及《隐私政策》"]; | |
| 344 | + NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; | |
| 345 | + style.alignment = NSTextAlignmentCenter;//对齐方式 | |
| 346 | + [text addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, text.length)]; | |
| 347 | + | |
| 348 | + text.color = UIColorMake(201, 202, 203); | |
| 349 | + text.font = UIFontMake(10); | |
| 350 | + | |
| 351 | + __weak typeof(self) weakSelf = self; | |
| 352 | + [text setTextHighlightRange:NSMakeRange(11, 4) color:[UIColor colorWithRed:35/255.0 green:212/255.0 blue:30/255.0 alpha:1.0] backgroundColor:[UIColor clearColor] tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { | |
| 353 | + [weakSelf endEditing:YES]; | |
| 354 | + [CNLiveUserAgreementManager jumpToAgreementH5WithType:CNLiveUserAgreementUser]; | |
| 355 | + }]; | |
| 356 | + [text setTextHighlightRange:NSMakeRange(text.length-5, 4) color:[UIColor colorWithRed:35/255.0 green:212/255.0 blue:30/255.0 alpha:1.0] backgroundColor:[UIColor clearColor] tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { | |
| 357 | + [weakSelf endEditing:YES]; | |
| 358 | + [CNLiveUserAgreementManager jumpToAgreementH5WithType:CNLiveUserAgreementPrivacy]; | |
| 359 | + }]; | |
| 360 | + | |
| 361 | + _protocolLab.attributedText = text; | |
| 362 | + | |
| 363 | + } | |
| 364 | + | |
| 365 | + | |
| 366 | + return _protocolLab; | |
| 367 | +} | |
| 368 | + | |
| 369 | + | |
| 370 | +#pragma mark - Action | |
| 371 | +//点击✘按钮调用方法 | |
| 372 | +- (void)closeBtn:(UIButton *)btn { | |
| 373 | + [[CNLiveLoginTipsView manager].loginView removeFromSuperview]; | |
| 374 | +} | |
| 375 | + | |
| 376 | ++ (void)hide { | |
| 377 | + [[CNLiveLoginTipsView manager].loginView removeFromSuperview]; | |
| 378 | +} | |
| 379 | +- (void)codeBtn:(UIButton *)btn { | |
| 380 | +// [CNTools setFrmId]; | |
| 381 | + if ([self.telTF.text isEqualToString:@""]) { | |
| 382 | + [QMUITips showWithText:@"请输入手机号" inView:XWKeyWindow hideAfterDelay:1.5]; | |
| 383 | + [self cancelVerBtnChange]; | |
| 384 | + return; | |
| 385 | + } | |
| 386 | + | |
| 387 | + [_codeTF becomeFirstResponder]; | |
| 388 | + _codeTF.text = nil; | |
| 389 | + _codeBtn.userInteractionEnabled = NO; | |
| 390 | + [QMUITips showLoadingInView:XWKeyWindow]; | |
| 391 | + [CNLiveUserSystemCenter verificationCodeType:VerificationCodeTypeShortcutLogin mobile:_telTF.text countryCode:_codeStr success:^(id result) { | |
| 392 | + _codeBtn.selected = YES; | |
| 393 | + [self startTimer];//倒计时结束,打开交互性 | |
| 394 | + [QMUITips hideAllToastInView:XWKeyWindow animated:YES]; | |
| 395 | + [QMUITips showWithText:@"验证码已发送" inView:XWKeyWindow hideAfterDelay:1.5]; | |
| 396 | + | |
| 397 | + } failure:^(NSDictionary *errorDic) { | |
| 398 | + [QMUITips hideAllToastInView:XWKeyWindow animated:YES]; | |
| 399 | + if ([errorDic[@"errorCode"] integerValue] == 408) { | |
| 400 | + [QMUITips showError:@"请输入正确的手机号" inView:XWKeyWindow hideAfterDelay:1.5]; | |
| 401 | + | |
| 402 | + }else{ | |
| 403 | + [QMUITips showError:errorDic[@"errorMessage"] inView:XWKeyWindow hideAfterDelay:1.5]; | |
| 404 | + } | |
| 405 | + [self cancelVerBtnChange];//请求失败,复原按钮,打开交互性 | |
| 406 | + | |
| 407 | + }]; | |
| 408 | + | |
| 409 | +} | |
| 410 | +#pragma mark - 倒计时 | |
| 411 | +//恢复原状 | |
| 412 | +- (void)cancelVerBtnChange { | |
| 413 | + dispatch_async(dispatch_get_main_queue(), ^{ | |
| 414 | + _codeBtn.selected = NO; | |
| 415 | + [_codeBtn setTitle:@"" forState:UIControlStateNormal]; | |
| 416 | + [_codeBtn setBackgroundImage:[UIImage imageNamed:@"dl_yzman"] forState:UIControlStateNormal]; | |
| 417 | + //设置界面的按钮显示 | |
| 418 | + _codeBtn.layer.borderWidth = 0; | |
| 419 | + _codeBtn.userInteractionEnabled = YES; | |
| 420 | + }); | |
| 421 | + if (_timer) { | |
| 422 | + dispatch_source_cancel(_timer);//取消定时器 | |
| 423 | + } | |
| 424 | +} | |
| 425 | + | |
| 426 | +//开始倒计时 | |
| 427 | +- (void)startTimer { | |
| 428 | + __block int timeout = 60; //倒计时时间 | |
| 429 | + | |
| 430 | + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); | |
| 431 | + | |
| 432 | + _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue); | |
| 433 | + | |
| 434 | + dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行 | |
| 435 | + | |
| 436 | + dispatch_source_set_event_handler(_timer, ^{ | |
| 437 | + | |
| 438 | + if(timeout<=0){ //倒计时结束,关闭 | |
| 439 | + | |
| 440 | + dispatch_source_cancel(_timer); | |
| 441 | + | |
| 442 | + dispatch_async(dispatch_get_main_queue(), ^{ | |
| 443 | + _codeBtn.selected = NO; | |
| 444 | + [_codeBtn setTitle:@"" forState:UIControlStateNormal]; | |
| 445 | + [_codeBtn setBackgroundImage:[UIImage imageNamed:@"dl_yzman"] forState:UIControlStateNormal]; | |
| 446 | + //设置界面的按钮显示 根据自己需求设置 | |
| 447 | + _codeBtn.layer.borderWidth = 0; | |
| 448 | + _codeBtn.userInteractionEnabled = YES; | |
| 449 | + | |
| 450 | + }); | |
| 451 | + | |
| 452 | + }else{ | |
| 453 | + | |
| 454 | + int seconds = timeout % 60; | |
| 455 | + NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds]; | |
| 456 | + | |
| 457 | + if(seconds == 0)strTime = [NSString stringWithFormat:@"%d",timeout]; | |
| 458 | + dispatch_async(dispatch_get_main_queue(), ^{ | |
| 459 | + //设置界面的按钮显示 根据自己需求设置 | |
| 460 | + _codeBtn.selected = YES; | |
| 461 | + [_codeBtn setBackgroundImage:nil forState:UIControlStateNormal]; | |
| 462 | + [_codeBtn setTitle:[NSString stringWithFormat:@"%@s",strTime] forState:UIControlStateSelected]; | |
| 463 | + _codeBtn.layer.borderColor = UIColorMake(89, 210, 75).CGColor; | |
| 464 | + _codeBtn.layer.borderWidth = 1; | |
| 465 | + _codeBtn.layer.masksToBounds = YES; | |
| 466 | + _codeBtn.layer.cornerRadius = 11.0; | |
| 467 | + _codeBtn.userInteractionEnabled = NO; | |
| 468 | + }); | |
| 469 | + timeout--; | |
| 470 | + | |
| 471 | + } | |
| 472 | + }); | |
| 473 | + | |
| 474 | + dispatch_resume(_timer); | |
| 475 | +} | |
| 476 | + | |
| 477 | +- (void)countryBtn:(UIButton *)btn { | |
| 478 | + UIViewController *root = [UIApplication sharedApplication].delegate.window.rootViewController; | |
| 479 | + CNLiveChooseCountryController *vc = [[CNLiveChooseCountryController alloc] init]; | |
| 480 | + vc.delegate = self; | |
| 481 | + vc.modalPresentationStyle = UIModalPresentationFullScreen; | |
| 482 | + [root presentViewController:vc animated:YES completion:nil]; | |
| 483 | + | |
| 484 | +} | |
| 485 | +#pragma mark - CNLiveSelectCountryViewDelegate | |
| 486 | +- (void)chooseViewController:(CNLiveChooseCountryController *)controller countryName:(NSString *)countryName countryCode:(NSString *)countryCode{ | |
| 487 | + _countryLbl.text = countryName; | |
| 488 | + _countryStr = countryName; | |
| 489 | + [_countryBtn setTitle:[NSString stringWithFormat:@"+%@",countryCode] forState:UIControlStateNormal]; | |
| 490 | + _codeStr = countryCode; | |
| 491 | + NSLog(@"%@---%@",countryName,countryCode); | |
| 492 | + | |
| 493 | +} | |
| 494 | + | |
| 495 | +- (void)loginBtn:(UIButton *)btn { | |
| 496 | + if ([_telTF.text isEqualToString:@""]) { | |
| 497 | + [QMUITips showWithText:@"请输入手机号" inView:XWKeyWindow hideAfterDelay:1.5]; | |
| 498 | + return; | |
| 499 | + } | |
| 500 | + | |
| 501 | + if ([_codeTF.text isEqualToString:@""]) { | |
| 502 | + [QMUITips showWithText:@"请输入验证码" inView:XWKeyWindow hideAfterDelay:1.5]; | |
| 503 | + return; | |
| 504 | + } | |
| 505 | + | |
| 506 | + [self endEditing:YES]; | |
| 507 | + | |
| 508 | + [QMUITips showLoading:@"登录中" inView:XWKeyWindow]; | |
| 509 | + | |
| 510 | + __weak typeof(self) weakSelf = self; | |
| 511 | +// [CNLiveUserSystemCenter shortcutLoginWithUserName:_telTF.text countryCode:_codeStr verificationCode:_codeTF.text frmId:[CNTools getFrmId] success:^(id result) { | |
| 512 | +// __strong typeof(weakSelf) strongSelf = weakSelf; | |
| 513 | +// if(!strongSelf) return; | |
| 514 | +// // 连接IM | |
| 515 | +// [strongSelf connectionIM:result]; | |
| 516 | +// | |
| 517 | +// } failure:^(NSDictionary *errorDic) { | |
| 518 | +// [QMUITips hideAllToastInView:AppKeyWindow animated:YES]; | |
| 519 | +// [QMUITips showError:[errorDic objectForKey:@"errorMessage"] inView:AppKeyWindow hideAfterDelay:1.5]; | |
| 520 | +// | |
| 521 | +// }]; | |
| 522 | + | |
| 523 | +} | |
| 524 | + | |
| 525 | +#pragma mark - CNLiveThreeLoginViewDelegate | |
| 526 | +//- (void)clickedButton:(CNLiveThreeLoginView *)view type:(CNLiveSendAuthResp)type{ | |
| 527 | +// if(![CNLiveNetworking isNetworking]){ | |
| 528 | +// [QMUITips showError:@"无法连接网络" inView:AppKeyWindow hideAfterDelay:1.5]; | |
| 529 | +// return ; | |
| 530 | +// } | |
| 531 | +// [self endEditing:YES]; | |
| 532 | +// __weak typeof(self) weakSelf = self; | |
| 533 | +// [CNLiveShareImageManager send:type authRespBlock:^(CNLiveSendAuthResp type, CNLiveThirdPartyModel *userInfo, NSError *error) { | |
| 534 | +// __strong typeof(weakSelf) strongSelf = weakSelf; | |
| 535 | +// if(!strongSelf) return; | |
| 536 | +// if(error){ | |
| 537 | +// [QMUITips hideAllToastInView:AppKeyWindow animated:YES]; | |
| 538 | +// if(error.code == 10000){ | |
| 539 | +// //用户取消 | |
| 540 | +// }else{ | |
| 541 | +// [QMUITips showError:@"登录失败" inView:AppKeyWindow hideAfterDelay:1.5]; | |
| 542 | +// } | |
| 543 | +// return ; | |
| 544 | +// } | |
| 545 | +// CNThreeLoginModel *model = [CNThreeLoginModel cn_transformModelFromModel:userInfo]; | |
| 546 | +// model.countryName = strongSelf->_countryStr; | |
| 547 | +// model.countryCode = strongSelf->_codeStr; | |
| 548 | +// model.frmId = [CNTools getFrmId]; | |
| 549 | +// switch (type) { | |
| 550 | +// case CNLiveSendAuthRespWX: | |
| 551 | +// { | |
| 552 | +// model.thirdPartyPlat = @"3"; | |
| 553 | +// } | |
| 554 | +// break; | |
| 555 | +// case CNLiveSendAuthRespQQ: | |
| 556 | +// { | |
| 557 | +// model.thirdPartyPlat = @"2"; | |
| 558 | +// } | |
| 559 | +// break; | |
| 560 | +// case CNLiveSendAuthRespWB: | |
| 561 | +// { | |
| 562 | +// model.thirdPartyPlat = @"1"; | |
| 563 | +// } | |
| 564 | +// break; | |
| 565 | +// } | |
| 566 | +// [strongSelf thirdPartyLoginWithType:type model:model]; | |
| 567 | +// | |
| 568 | +// }]; | |
| 569 | +// | |
| 570 | +//} | |
| 571 | + | |
| 572 | +//- (void)thirdPartyLoginWithType:(CNLiveSendAuthResp)type model:(CNThreeLoginModel *)model{ | |
| 573 | +// [QMUITips showLoadingInView:AppKeyWindow]; | |
| 574 | +// __weak typeof(self) weakSelf = self; | |
| 575 | +// [CNBindingManageRequest thirdPartyLoginWithType:type model:model block:^(NSURLSessionTask * _Nonnull requestTask, id _Nonnull responseObject, NSError * _Nonnull error) { | |
| 576 | +// __strong typeof(weakSelf) strongSelf = weakSelf; | |
| 577 | +// if(!strongSelf) return; | |
| 578 | +// [QMUITips hideAllToastInView:AppKeyWindow animated:YES]; | |
| 579 | +// if ([responseObject isKindOfClass:[NSDictionary class]] && [responseObject[@"errorCode"] isEqualToString:@"42013"]) { | |
| 580 | +// //未注册 | |
| 581 | +// CNThreeLoginViewController *vc = [[CNThreeLoginViewController alloc]initWithModel:model]; | |
| 582 | +// __weak typeof(strongSelf) weakSelf = strongSelf; | |
| 583 | +// vc.block = ^(NSString * _Nonnull countryName, NSString * _Nonnull countryCode) { | |
| 584 | +// __strong typeof(weakSelf) strongSelf = weakSelf; | |
| 585 | +// if(!strongSelf) return; | |
| 586 | +// strongSelf->_countryLbl.text = countryName; | |
| 587 | +// strongSelf->_countryStr = countryName; | |
| 588 | +// strongSelf->_countryLbl.text = [NSString stringWithFormat:@"+%@",countryCode]; | |
| 589 | +// strongSelf->_codeStr = countryCode; | |
| 590 | +// }; | |
| 591 | +// vc.hidesBottomBarWhenPushed = YES; | |
| 592 | +// CNNavigationController *nav = [[CNNavigationController alloc] initWithRootViewController:vc]; | |
| 593 | +// [[AppDelegate sharedAppDelegate].topViewController presentViewController:nav animated:YES completion:^{ | |
| 594 | +// | |
| 595 | +// }]; | |
| 596 | +// | |
| 597 | +// } | |
| 598 | +// else if ([responseObject isKindOfClass:[NSDictionary class]] && [responseObject[@"errorCode"] isEqualToString:@"0"]) { | |
| 599 | +// //登录成功 | |
| 600 | +// // 连接IM | |
| 601 | +// [strongSelf connectionIM:responseObject]; | |
| 602 | +// } | |
| 603 | +// else if ([responseObject isKindOfClass:[NSDictionary class]] ) { | |
| 604 | +// [QMUITips showError:responseObject[@"errorMessage"] inView:AppKeyWindow hideAfterDelay:1.5]; | |
| 605 | +// } | |
| 606 | +// else{ | |
| 607 | +// [QMUITips hideAllToastInView:AppKeyWindow animated:YES]; | |
| 608 | +// [QMUITips showError:@"登录失败" inView:AppKeyWindow hideAfterDelay:1.5]; | |
| 609 | +// } | |
| 610 | +// }]; | |
| 611 | +// | |
| 612 | +//} | |
| 613 | +//- (void)connectionIM:(id)result{ | |
| 614 | +// weakself | |
| 615 | +// NSLog(@"result:%@",result); | |
| 616 | +// | |
| 617 | +// NSMutableDictionary *resDic = [NSMutableDictionary dictionaryWithDictionary:result[@"data"]]; | |
| 618 | +// NSString *deFaceUrl = [resDic objectForKey:@"faceUrl"]; | |
| 619 | +// NSString *faceUrl = @""; | |
| 620 | +// if ([deFaceUrl containsString:@"/mobile/images/mobilehead/default/"]) { | |
| 621 | +// faceUrl = CNLiveNetAddDefaultHead;//网家家默认头像地址 | |
| 622 | +// [resDic setValue:faceUrl forKey:@"faceUrl"]; | |
| 623 | +// } | |
| 624 | +// [CNUserInfoManager saveUserinfoDic:resDic]; | |
| 625 | +// [CNShareExtensionGroup writeMyInfoToShareGroup]; | |
| 626 | +// //连接IM | |
| 627 | +// [_loginParam getTIMLoginToken:CNUserShareModel.uid successBlock:^(NSString *token) { | |
| 628 | +// | |
| 629 | +// _loginParam.identifier = CNUserShareModel.uid; | |
| 630 | +// _loginParam.userSig = token; | |
| 631 | +// _loginParam.tokenTime = [[NSDate date] timeIntervalSince1970]; | |
| 632 | +// | |
| 633 | +// [[IMAPlatform sharedInstance] login:_loginParam succ:^{ | |
| 634 | +// [NBSAppAgent setUserIdentifier:[CNLiveBusinessTools getSidIdfv]]; | |
| 635 | +// [QMUITips hideAllToastInView:AppKeyWindow animated:YES]; | |
| 636 | +// [AppDelegate sharedAppDelegate].loginPrepositionUrl = @"judgeGiftUrl"; | |
| 637 | +// [QMUITips showSucceed:@"登录成功" inView:AppKeyWindow hideAfterDelay:1.5]; | |
| 638 | +// [_loginParam saveToLocal]; | |
| 639 | +// [[AppDelegate sharedAppDelegate] registNotification]; | |
| 640 | +// [[IMAPlatform sharedInstance] configHost:_loginParam]; | |
| 641 | +// [IMAPlatform sharedInstance].didConnectSuccess = YES; | |
| 642 | +// //电商 | |
| 643 | +// NSString *userID = CNUserShareModel.uid; | |
| 644 | +// [[DSCnliveShopSDKManager sharedManager] loginUser:userID]; | |
| 645 | +// //设置APP已活跃 | |
| 646 | +// [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"is_Active_Application"]; | |
| 647 | +// [[NSUserDefaults standardUserDefaults] synchronize]; | |
| 648 | +// | |
| 649 | +// | |
| 650 | +// [AppDelegate sharedAppDelegate].loginAlert = YES; | |
| 651 | +// if ([result[@"data"][@"isNewUser"] intValue] == 0) { | |
| 652 | +// //老用户 | |
| 653 | +// [[AppDelegate sharedAppDelegate] enterMainUI]; | |
| 654 | +// [[AppDelegate sharedAppDelegate] registNotification]; | |
| 655 | +// | |
| 656 | +// } | |
| 657 | +// else { | |
| 658 | +// //新用户 | |
| 659 | +// [OpenInstallSDK reportRegister]; | |
| 660 | +// CNLoginIUsernfoViewController *vc = [[CNLoginIUsernfoViewController alloc] init]; | |
| 661 | +// NSString *tel = _telTF.text; | |
| 662 | +// if(_telTF.text.length == 11){ | |
| 663 | +// tel = [_telTF.text stringByReplacingCharactersInRange:NSMakeRange(3, 4) withString:@"XXXX"]; | |
| 664 | +// } | |
| 665 | +// NSLog(@"tel:%@",tel); | |
| 666 | +// vc.mobileStr = tel; | |
| 667 | +// [[AppDelegate sharedAppDelegate] presentViewController:vc animated:NO completion:NULL]; | |
| 668 | +// } | |
| 669 | +// [[NSNotificationCenter defaultCenter] postNotificationName:kCNLive_LoginSuccess object:nil]; | |
| 670 | +// | |
| 671 | +// [CNDSShopActionViewModel networkParamAction]; | |
| 672 | +// | |
| 673 | +// [[IMAPlatform sharedInstance].host asyncSetAllowType:TIM_FRIEND_NEED_CONFIRM succ:^{ | |
| 674 | +// NSLog(@"asyncSetAllowType Suc"); | |
| 675 | +// [_loginParam saveToLocal]; | |
| 676 | +// | |
| 677 | +// } fail:^(int code, NSString *msg) { | |
| 678 | +// NSLog(@"asyncSetAllowType failed : %@", msg); | |
| 679 | +// }]; | |
| 680 | +// | |
| 681 | +// } fail:^(int code, NSString *msg) { | |
| 682 | +// NSLog(@"login failed : %@", msg); | |
| 683 | +// if (code == 6208) { | |
| 684 | +// //离线被踢下线重新登录 | |
| 685 | +//// [weakSelf resumeLogin]; | |
| 686 | +// } | |
| 687 | +// else | |
| 688 | +// [QMUITips showError:msg inView:AppKeyWindow hideAfterDelay:1.5]; | |
| 689 | +// [QMUITips hideAllToastInView:AppKeyWindow animated:YES]; | |
| 690 | +// }]; | |
| 691 | +// | |
| 692 | +// } failedBlock:^(int code, NSString *errorMsg) { | |
| 693 | +// [QMUITips hideAllToastInView:AppKeyWindow animated:YES]; | |
| 694 | +// | |
| 695 | +// }]; | |
| 696 | +//} | |
| 697 | + | |
| 698 | +@end | ... | ... |