BannerView.swift,BannerCell.swift,StoryModel.swift
来源:互联网 发布:熊本熊mac电脑壁纸 编辑:程序博客网 时间:2024/05/17 01:12
在BannerView.swift文件中
import UIKit
import RxSwift
import RxDataSources
import RxCocoa
import Kingfisher
class BannerView: UICollectionView {
let imgUrlArr = Variable([storyModel]())
let dispose = DisposeBag()
var offY = Variable(0.0)
var bannerDelegate:BannerDelegate?
overridefunc awakeFromNib() {
contentOffset.x = screenW
imgUrlArr
.asObservable()
.bindTo(rx.items(cellIdentifier: "BannerCell", cellType: BannerCell.self)) {
row, model, cell in
cell.img.kf.setImage(with: URL.init(string: model.image!))
cell.imgTitle.text = model.title!
}
.addDisposableTo(dispose)
//注意在这里设置setDelegate(self)方法就必须实现UIScrollViewDelegate的代理方法
rx.setDelegate(self).addDisposableTo(dispose)
//这块代码的作用是当BannerCell向下拉的时候,其中的图片也会相应的变大拉长。
offY
.asObservable()
.subscribe(onNext: { (offy) in
self.visibleCells.forEach { (cell)in
let cell = cellas! BannerCell
cell.img.frame.origin.y = CGFloat.init(offy)
cell.img.frame.size.height = 200 - CGFloat.init(offy)
}
})
.addDisposableTo(dispose)
//使用RxCocoa提供的另一个UITableView的扩展方法:modelSelected(_:),它返回一个Observable,可以观察模型对象什么时候被选中了。获取到Observable后,调用subscribe(onNext:)方法,传入一个尾随闭包,在模型被选中时会调用这个闭包;
rx
.modelSelected(storyModel.self)
.subscribe(onNext: { (model) in
self.bannerDelegate?.selectedItem(model: model)
})
.addDisposableTo(dispose)
}
}
extension BannerView:UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView:UIScrollView) {
if scrollView.contentOffset.x == CGFloat.init(imgUrlArr.value.count -1) * screenW {
scrollView.contentOffset.x = screenW
}
elseif scrollView.contentOffset.x ==0 {
scrollView.contentOffset.x = CGFloat.init(imgUrlArr.value.count -2) * screenW
}
bannerDelegate?.scrollTo(index: Int(scrollView.contentOffset.x / screenW) -1)
}
}
protocol BannerDelegate {
func selectedItem(model:storyModel)
func scrollTo(index:Int)
}
在BannerCell.swift文件中:
import UIKit
class BannerCell: UICollectionViewCell {
@IBOutletweak var img:UIImageView!
@IBOutletweak var imgTitle:UILabel!
overridefunc awakeFromNib() {
// titlebackView.backgroundColor = UIColor.init(red: 0, green: 0, blue: 0, alpha: 0.05)
imgTitle.font =UIFont.boldSystemFont(ofSize:21)
}
}
用到offY的一个地方:
func scrollViewDidScroll(_ scrollView:UIScrollView) {
bannerView.offY.value =Double(scrollView.contentOffset.y)
barImg.alpha = scrollView.contentOffset.y / 200
refreshView?.pullToRefresh(progress: -scrollView.contentOffset.y / 64)
}
在StoryModel.swift文件中:
import Foundation
import HandyJSON
struct listModel: HandyJSON {
var date:String?
var stories: [storyModel]?
var top_stories: [storyModel]?
}
struct storyModel: HandyJSON {
var ga_prefix:String?
var id:Int?
var images: [String]?//list_stories
var title:String?
var type:Int?
var image:String? //top_stories
var multipic =false
}
- BannerView.swift,BannerCell.swift,StoryModel.swift
- SWIFT
- swift
- Swift
- Swift
- swift
- Swift
- swift
- Swift
- swift
- swift
- swift
- Swift
- swift
- swift
- Swift
- swift
- swift
- 愚人节?测试环境OK,发布到公网跑不了?!
- 目前阶段学习中记录的几个常用DOS命令,后续补充中。。。。
- 如何实现Django规模化:进阶教程
- 数据库ACID、隔离级别与MVCC
- 171.NumberOf1
- BannerView.swift,BannerCell.swift,StoryModel.swift
- 关于DPM(Deformable Part Model)算法中模型结构的解释
- 剑指offer——二维数组中的查找
- java.lang.IllegalArgumentException: Control character in cookie value or attribute.
- Word文档中同一行放置两个定义样式图片的方法
- 三种40G QSFP+光模块对比
- caffe:cpu模式下运行01-learning-lenet.ipynb
- javascript字符串格式化
- PulltorefreshRecycleview拓展(pulltorefresh库)