美文网首页立方收集
iOS第三方库的基本使用

iOS第三方库的基本使用

作者: Barry_小闪 | 来源:发表于2016-05-16 09:09 被阅读474次

    自动处理键盘事件的第三方库 IQKeyboardManager

    MJRefresh下拉刷新框架使用

    MJRefresh–用法最简单的下拉刷新框架

    MJRefresh 下拉刷新,上拉加载的控件

    提示:在block中使用self中的属性、成员变量方法需要使用弱引用
    __weak __weak typeof(self) weakSelf = self;

    //导入
    #import <MJRefresh.h>
    /** 创建header Blockf方法 */
    + (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
    /** 创建header  调用方法SEL*/
    + (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
    //这个方法刷新时没有footer的文字,直接刷新
    tableView.mj_footer = [MJRefreshAutoFooter footerWithRefreshingBlock
    
    注意:
    1.每次上拉加载更多数据后,要结束刷新状态,才能才次进行刷新
    [weakSelf.centerTableView.mj_footer endRefreshing];
    
    2.在刷新的过程中需要防止用户重复刷新,否则会导致数据加载丢失
     // 在数据获取失败的地方减少页数
            if (weakSelf.currentPage > 1) {
                weakSelf.currentPage--;
             }
    
    
    
    //上拉刷新数据
    [self.appListTableView.mj_footer beginRefreshing];
    //下拉加载数据
    [self.appListTableView.mj_header beginRefreshing]
    
    例:
    block方法刷新数据,对数据传值
      //上拉加载
        self.appListTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
            //因为是上拉刷新,所有显示数据的页数都是第一页,最新的数据
            weakSelf.currentPage = 1;
    
            //隐藏footer,在加载的过程中防止用户下拉刷新,导致数据错误
            weakSelf.appListTableView.mj_footer.hidden = YES;
            //请求数据,自己设置的方法,导入第几页的第几个数据,分类ID
            [weakSelf requestAllListWithPage:weakSelf.currentPage searchText:weakSelf.searchKeyWord categoryId:weakSelf.categoryId];
        }];
        
        //下拉刷新
        self.appListTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
             //在刷新的过程中需要防止用户重复刷新,导致数据加载丢失
            
            weakSelf.currentPage++;
            // 隐藏header,在刷新的过程中防止用户上拉加载,导致数据错误
            weakSelf.appListTableView.mj_header.hidden = YES;
            //请求数据,自己设置的方法,导入第几页的第几个数据,分类ID
            [weakSelf requestAllListWithPage:weakSelf.currentPage searchText:weakSelf.searchKeyWord categoryId:weakSelf.categoryId];
        }];
    
      
      数据加载成功后需要:
      //结束下拉加载数据
      [weakSelf.appListTableView.mj_header endRefreshing];
      //结束上拉刷新数据
      [weakSelf.appListTableView.mj_footer endRefreshing];
      //取消对上拉和下拉的隐藏,让用户可以继续刷新数据        
       weakSelf.appListTableView.mj_header.hidden = NO;
       weakSelf.appListTableView.mj_footer.hidden = NO;
    
    //对请求的数据进行判断,提示用户数据全部请求完毕
      if (weakSelf.appListArray.count(请求数据的个数)>= totalCount(总数据的个数)  ){      
        // 提示用户数据全部请求完毕
        [weakSelf.appListTableView.mj_footer endRefreshingWithNoMoreData];
        }else {
       // 当 当前请求的数据小于totalCount时(总数据的个数),重置footer的状态
       //重置没有更多的数据(消除没有更多数据的状态)
       [weakSelf.appListTableView.mj_footer resetNoMoreData];
      }
    
     对header的刷新进行文字设置
    //先对创建MJRefreshNormalHeader 对象,在获取MJRefreshNormalHeader 的属性,进行文字设置
      MJRefreshNormalHeader * header = [MJRefreshNormalHeader headerWithRefreshingBlock
    
        [header setTitle:@"爷爷等得好辛苦,快来扶我" forState:MJRefreshStateIdle];
        [header setTitle:@"爷爷摔倒了" forState:MJRefreshStatePulling];
        [header setTitle:@"开开心心扶老爷爷" forState:MJRefreshStateRefreshing];
    
    //最后千万别忘记, 设置要刷新的对象
      subjectTableView.mj_header = header
    //开始加载数据
    [_subjectTableView.mj_header beginRefreshing]
    

    AFNetworking 请求网络数据

    
    // 结束之前的所有请求
    [self.manager.tasks makeObjectsPerformSelector:@selector(cancel)];
    //取消AFNetworking的所有任务,使不可用
    [self.manager invalidateSessionCancelingTasks:YES];
    
    1.先要创建对象
    // 网络请求
    @property (nonatomic, strong) AFHTTPSessionManager * httpManager; 
    
    //响应JSON数据
    - (AFHTTPSessionManager *)httpManager
    {
        if (!_httpManager) {
            _httpManager = [AFHTTPSessionManager manager];
            // 设置JSON数据序列化,将JSON数据转换为字典或者数组
            _httpManager.responseSerializer = [AFJSONResponseSerializer serializer];
            // 在序列化器中追加一个类型,text/html这个类型是不支持的,text/json, application/json
            _httpManager.responseSerializer.acceptableContentTypes = [_httpManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
        }
        return _httpManager;
    }
    
    //请求 JSON数据 requestSerializer
     if (!_afHttpMagaer) {
            
            _afHttpMagaer = [AFHTTPSessionManager manager];
    
              //请求JSON数据(requestSerializer)
            _afHttpMagaer.requestSerializer = [AFJSONRequestSerializer
                                                serializer];
            // 在序列化器中追加一个类型,text/html这个类型是不支持的,text/json, application/json
            _afHttpMagaer.responseSerializer.acceptableContentTypes = [_afHttpMagaer.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
            
        }
    //请求GET数据
     [self.httpManager GET:(NSString *请求数据) parameters:(id一般写nil) success:^(NSURLSessionDataTask *task任务, id responseObject返回的数据) {
            请求成功会到这里
            
            在block中使用self中的属性、成员变量方法需要使用弱引用
            __weak __weak typeof(self) weakSelf = self;
             dispatch_async(dispatch_get_main_queue(), ^{
             
              // 不要忘记刷新数据 UITableView
                [weakSelf.appListTableView reloadData];
             
             [weakSelf.appListTableView reloadData];
                //数据请求成功后,要返回主线程对UI界面进行赋值
            });
    
    
        } failure:^(NSURLSessionDataTask *task, NSError *error) {
            请求失败回到这里
        }];
    
    //POST请求
    //如果请求是字典中包含字典
    {
        "record": {
            "page": 1
        }
    }
    //需要这样写:
      NSDictionary *dict1=@{@"page":@1};
      NSDictionary *dic2=@{@"record":dict1};
    //或者这样写
      NSDictionary *dd = @{@"record":@{@"page":@1}};
    
    
      NSString *url = @"http://life.fotile.com/fotileApp/course/getRecipeList";
        [self.afHttpMagaer POST:url parameters:dic2 progress:^(NSProgress * _Nonnull uploadProgress) {
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            ZBLog(@"美食=%@", responseObject);
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
            ZBLog(@"%@", error.localizedDescription);
            
        }];
    
    
    

    YYModel 将数据转化模型

    1.第一步在模型类导入YYModel
    @interface ZB_Model : NSObject <YYModel>
    
    2.将数据转化为数组/模型
       yy_modelArrayWithClass 要转化的数组类型
       json 需要转换成模型的json数据
      NSArray *appModelArray = [NSArray yy_modelArrayWithClass:[ZB_Model class] json:appArray];
      
      NSDictionary *appModelArray = [NSDictionary yy_modelDictionaryWithClass:<#(__unsafe_unretained Class)#> json:<#(id)#>]
      
    
    
    // 关联JSON数据中的key和类中的属性
    // 字典中的key为属性,value为JSON数据中的key
    // 当属性和JSON数据中的key不一致时会用到该方法,做映射
    + (NSDictionary *)modelCustomPropertyMapper
    {
        return @{@"desc":@"description"};
    }
    
    
    // 当属性中为数组时,需要关联其他类,使得数组中存放该类的对象
    // 字典中的key为当前类的属性,value为要关联的类的class
    + (NSDictionary *)modelContainerPropertyGenericClass
    {
        return @{@"applications" : [SubjectAppModel class]};
    }
    
    
    

    Masonry 建立约束

    http://adad184.com/2014/09/28/use-masonry-to-quick-solve-autolayout/

    //先关闭以前的约束
    self.automaticallyAdjustsScrollViewInsets = NO;
    
    //appListTableViewd的X,Y,宽,高等于当前的View
    [self.appListTableView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.edges.equalTo(weakSelf.view);
        }];
    
    
    
      [self.coverImage mas_makeConstraints:^(MASConstraintMaker *make) {
           
            make.top.mas_equalTo(weakSelf.backgroundV.mas_top).offset(5);
            make.left.mas_equalTo(weakSelf.backgroundV.mas_left).offset(5);
            make.right.mas_equalTo(weakSelf.backgroundV.mas_right).offset(-5);
    
            //高为宽的倍数
           make.height.mas_equalTo(weakSelf.coverImage.mas_width).multipliedBy(301/345.0f);
            
        }];
    
    
       更新约束
        // 告诉self.view约束需要更新
        [self.view setNeedsUpdateConstraints];
        // 调用此方法告诉self.view检测是否需要更新约束,若需要则更新
        [self.view updateConstraintsIfNeeded];    
        [self.view layoutIfNeeded];
    
    

    SDWebImage使用方法

    http://www.jianshu.com/p/4191017c8b39/comments/1566836

    SDWebImage 网络获取图片

    需要导入UIImageView+WebCache.h头文件
    [ImageView sd_setImageWithURL:[NSURL URLWithString:图片网络获取地址] placeholderImage:[占位图]];
    
    
    获取下载的图片
    - (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options
                                            progress:(SDWebImageDownloaderProgressBlock)progressBlock
                                           completed:(SDWebImageDownloaderCompletedBlock)completedBlock;
    

    SDWebImage 清除图片缓存

    导入头文件#import <SDImageCache.h>
    // 获取缓存信息
    // 获取缓存的图片数量
        NSInteger imageCount = [[SDImageCache sharedImageCache] getDiskCount];
      // 获取缓存的图片大小
        NSUInteger imageSize = [[SDImageCache sharedImageCache] getSize]; // 单位:字节
        NSString * msg = [NSString stringWithFormat:@"缓存文件个数:%ld,大小:%.2fM,是否清除?", imageCount, (imageSize/1024.0)/1024.0];
            
    // 清除缓存
        UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"清除缓存" message:msg preferredStyle:UIAlertControllerStyleAlert];
     // 添加AlertAction
     // 取消按钮
        UIAlertAction * cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
        [alertController dismissViewControllerAnimated:YES completion:nil];
           }];
    // 清除按钮
        UIAlertAction * okAction = [UIAlertAction actionWithTitle:@"清除" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *  action) {
    // 清除缓存
         [[SDImageCache sharedImageCache] clearDisk];
         [[SDImageCache sharedImageCache] clearMemory];
     // 清除已过期的图片
         [[SDImageCache sharedImageCache] cleanDisk];
            }];
            
    // 将Action添加到AlertController中
         [alertController addAction:cancelAction];
         [alertController addAction:okAction];
         [self presentViewController:alertController animated:YES completion:nil];
    
    

    内容警告清除缓存

    - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
    {
        // 清除内存缓存
        [[SDWebImageManager sharedManager].imageCache clearMemory];
        // 取消所有下载
        [[SDWebImageManager sharedManager] cancelAll];
    }
    

    相关文章

      网友评论

        本文标题:iOS第三方库的基本使用

        本文链接:https://www.haomeiwen.com/subject/dnavrttx.html