Swift 集成Alamofire/Kingfisher/MJRefresh/MBProgressHUD的小项
前些时做的Swift版本的瀑布流的Demo《Swift UITableView瀑布流/NSURLConnection异步网络请求》时,使用的是NSURLConnection做的网络异步请求,图片的异步加载使用的是GCD做的。在使用的过程中,网络请求部分是没有什么问题的,但是在图片的异步加载时,由于图片没有缓存,所以在上下滑动的时候,需要不断的加载图片,所以用户体验不好。 source 'https://github.com/CocoaPods/Specs.git'
platform :ios,'9.0'
use_frameworks!
pod 'Alamofire','~> 3.3'
source 'https://github.com/CocoaPods/Specs.git'
platform :ios,'8.0'
use_frameworks!
pod 'Kingfisher','~> 2.4'
pod 'MJRefresh'
use_frameworks!
但是集成MBProgressHUD就需要手动拖拽集成了。我们把MBProgressHUD的.m和.h文件拖拽进来后,提示我们新建一个Swift和OC的桥接文件,可看看《Swift Swift和OC混编》,我们把 #import "MBProgressHUD.h"
放在桥接文件就可以使用MBProgressHUD了。 初始化视图:func initView() {
self.tableView.registerNib(UINib(nibName: "WXTableViewCell",bundle:nil),forCellReuseIdentifier: "WXTableViewCell")
// 添加下拉刷新
self.tableView.mj_header = MJRefreshNormalHeader(refreshingTarget: self,refreshingAction: #selector(ViewController.headRefresh))
// 添加上拉加载更多
self.tableView.mj_footer = MJRefreshAutoNormalFooter(refreshingTarget: self,refreshingAction: #selector(ViewController.addMoreData))
}
视图使用的IB拉的。 Alamofire网络请求部分:// MARK: 网络请求
/** 网络请求 - parameter pageIndex: 页数 */
func requestData(pageIndex: String){
self.showHUD()
// 设置请求参数
let showapi_timestamp = self.getDataStr()
let parameters = [
"key": "","showapi_appid": showapi_appid,"showapi_sign": showapi_sign,"page": pageIndex,"showapi_timestamp": showapi_timestamp,]
Alamofire.request(.GET,baseUrl,parameters: parameters).responseJSON {response in
switch response.result{
case .Success(let dice):
self.hideHUD()
let dice1 = dice["showapi_res_body"] as! NSDictionary
let dice2 = dice1["pagebean"] as! NSDictionary
self.allPages = dice2["allPages"] as! NSNumber
let contentlist = dice2["contentlist"] as! NSArray
// 下拉刷新 数组清空
if pageIndex == "1"{
self.dataArray.removeAllObjects()
}
for dataDice in contentlist{
let model = DataModel()
// 数据转模型 添加进数组
self.dataArray.addObject(model.makeDataModel(dataDice as! NSDictionary))
}
self.flag = 2
self.tableView.reloadData()
// 刷新完成 结束上下拉
self.tableView.mj_header.endRefreshing()
self.tableView.mj_footer.endRefreshing()
case .Failure(let error):
print(error)
self.hideHUD()
}
}
}
获取当前时间: /** 获取当前时间 - returns: 当前时间 */
func getDataStr() -> String{
let date1 = NSDate()
let dataFormat = NSDateFormatter.init()
// yyyyMMddHHmmss
dataFormat.dateFormat = "yyyyMMddHHmmss"
let dataString = dataFormat.stringFromDate(date1) as String
return dataString
}
实现上下拉方法:// MARK: 上下拉
/** 下拉刷新 */
func headRefresh() {
self.requestData("1")
}
/** 上拉加载更多 */
func addMoreData() {
self.currentPage = self.currentPage + 1
if self.currentPage < self.allPages.integerValue {
let page = String(self.currentPage)
self .requestData(page)
}
}
MBProgressHUD的使用:// MARK: 菊花
func showHUD() {
let hud = MBProgressHUD.showHUDAddedTo(self.view,animated: true)
hud.mode = MBProgressHUDMode.Indeterminate
hud.labelText = "数据加载中……"
hud.dimBackground = true
}
func hideHUD() {
MBProgressHUD.hideAllHUDsForView(self.view,animated: true)
}
Kingfisher的使用在使用Kingfisher是比较简单的使用。主要实在给cell填充数据时使用。 /** 给cell填充数据 - parameter dataArray: 数据集合 - parameter indexPath: indexPath */
func fillCellWiftDataArray(dataArray :NSArray,indexPath: NSIndexPath){
let model = dataArray[indexPath.row] as! DataModel
self.userImageView.kf_setImageWithURL(NSURL(string: model.userLogo)!)
self.userNameLabel.text = model.userName
self.timerLabel.text = model.date;
self.mainImageView.kf_setImageWithURL(NSURL(string: model.contentImg)!)
self.contentLabel.text = model.title
self.typeLabel.text = model.typeName
}
基本四个第三方库 总结在这个小的项目中,看起来只有两个页面,但是我们学会了怎么集成Alamofire/Kingfisher/MJRefresh/MBProgressHUD和使用,CocoaPods的使用,Swift和OC的混编。 代码下载地址:Alamofire-Kingfisher (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |