通往三方库的最佳实践: MBProgress 用类方法,处理gi

2017-09-04  本文已影响0人  BoxDeng

JSONModel

// 全部设置为 可选

+(BOOL)propertyIsOptional:(NSString *)propertyName{
    return  YES;
}

// 自定义匹配

+ (JSONKeyMapper*) keyMapper
{
    return [[JSONKeyMapper alloc] initWithModelToJSONDictionary: @{@"idOrderDetails": @"id" }];
}

// 获取model ,立刻 处理掉,否则,每次要用到,都要转换。

#pragma mark - for Money Pay
- (void) setPayAmountWithNSNumber: (NSNumber *)argu{
    self.payAmount = @(argu.integerValue/100);
}


#pragma mark - for Geography

- (void)setRecipientProvinceWithNSString: (NSString *) argu{
    NSArray * tempArray = self.allDictrictArray;
    NSArray * filteredArray = [tempArray filteredArrayUsingPredicate: [NSPredicate predicateWithFormat:@"(areaCode == %@)", argu]];
    NSDictionary * subTempDict = [filteredArray firstObject ];
    self.recipientProvince = [subTempDict valueForKey: @"areaName" ];
}

YTKNetwork

// Chain Request


- (void)parseMineData{
    __weak typeof(self) weakSelf = self;
    [MBProgressHUD showHUDAddedTo: self.view animated: YES ];
    GetUserInfoAPI * getUserInfoAPI = [[GetUserInfoAPI alloc] init ];
    YTKChainRequest * chainReq = [[YTKChainRequest alloc] init];
    [chainReq addRequest: getUserInfoAPI callback:^(YTKChainRequest *chainRequest, YTKBaseRequest *baseRequest) {
        GetUserInfoAPI * resultAPI = (GetUserInfoAPI *)baseRequest;
        NSError * goodsError;
        weakSelf.theUserModel = [[UserModel alloc] initWithDictionary: resultAPI.responseJSONObject error: &goodsError ] ;
        if(weakSelf.theUserModel && resultAPI.responseJSONObject){
           ......
            GetUserCountDateAPI * getUserCountDateAPI = [[GetUserCountDateAPI alloc] init];
            [chainRequest addRequest: getUserCountDateAPI callback:^(YTKChainRequest * _Nonnull chainRequest, YTKBaseRequest * _Nonnull baseRequest) {
            }];
        }
        
    }];
    chainReq.delegate = self;
    [chainReq start];
}

// # pragma mark - YTK Chain Request Delegate



- (void)chainRequestFinished:(YTKChainRequest *)chainRequest{
    YTKBaseRequest * finalAPI = [chainRequest.requestArray lastObject ];
    if([finalAPI isKindOfClass: [GetUserCountDateAPI class ] ]){
        NSError * goodsError;
        UserCountDateModel * tempModel = [[UserCountDateModel alloc] initWithData: finalAPI.responseData error: &goodsError ];
......
    }
}


- (void)chainRequestFailed:(YTKChainRequest *)chainRequest failedBaseRequest:(YTKBaseRequest *)request{
    [MBProgressHUD hideHUDForView: self.view animated: YES ];
    if([request isKindOfClass: [GetUserInfoAPI class]]){
        NSString* errResponse = [[NSString alloc] initWithData:(NSData *)request.error.userInfo[kAFNetworkingOperationFailingURLResponseDataError] encoding: NSUTF8StringEncoding];
        NSLog(@"%@", errResponse);
        NSString * errorStr = request.error.localizedDescription;
        if([errorStr containsString: @"401" ]){
          ......
        }]
......
    }else if([request isKindOfClass: [GetUserCountDateAPI class ] ]){
  ......
    }
}

// YTK Delegate

- (void)requestFinished:(__kindof YTKBaseRequest *)request{
    if([request isKindOfClass: [RefreshTokenAPI class] ]){
......
    }else if([request isKindOfClass: [GetUserCountDateAPI class ] ]){
        NSError * goodsError;
......
    }
}


- (void)requestFailed:(__kindof YTKBaseRequest *)request{
......
}



MBProgressHUD

MBProgress 用类方法,处理gif 动画
// 显示
+ (instancetype)showDengHUDAddedTo:(UIView *)view animated:(BOOL)animated {
    MBProgressHUD *hud = [[self alloc] initWithView: view];
    hud.removeFromSuperViewOnHide = YES;
    hud.mode = MBProgressHUDModeCustomView;
    NSString *path = [[NSBundle mainBundle] pathForResource:@"loading.gif" ofType:@"gif" ];
    NSData *data = [NSData dataWithContentsOfFile:path];
    UIImage *image = [UIImage sd_animatedGIFWithData:data]; // 要配合 SDWebImage
    hud.customView = [[UIImageView alloc] initWithImage: image];
    hud.square = YES;
    [view addSubview:hud];
    [hud showAnimated:animated];
    return hud;
}

// 隐藏
+ (BOOL)hideDengHUDForView:(UIView *)view animated:(BOOL)animated {
    MBProgressHUD *hud = [self HUDForView:view];
    if (hud != nil) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            hud.removeFromSuperViewOnHide = YES;
            [hud hideAnimated:animated];
        });
        return YES;
    }
    return NO;
}

// 添加 备用view, [UIApplication sharedApplication ].keyWindow, 然后有 先退出控制器,再出现toast 的 效果。

+ (void)showHubWithStr: (NSString *)str withView: (UIView *) aView
{
    UIView * tempView;
    if (aView) {
        tempView = aView;
    }else{
        tempView = [UIApplication sharedApplication ].keyWindow;
    }
    MBProgressHUD * logHudThree = [MBProgressHUD showHUDAddedTo: tempView animated: YES ];
    logHudThree.mode = MBProgressHUDModeText;
    logHudThree.label.text = NSLocalizedString(str, @"HUD message title");
    [logHudThree hideAnimated: YES afterDelay: 1.5f ];
    
}

上一篇下一篇

猜你喜欢

热点阅读