立方收集

iOS第三方库的基本使用

2016-05-16  本文已影响474人  Barry_小闪

自动处理键盘事件的第三方库 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];
}
上一篇下一篇

猜你喜欢

热点阅读