swift中使用UIColllectionView实现横向轮播的一般方法
//
// HomeLiveRankCell.swift
// YYSwiftProject
//
// Created by Domo on 2018/7/28.
// Copyright © 2018年 知言网络. All rights reserved.
//

import UIKit
class HomeLiveRankCell: UICollectionViewCell {
private var multidimensionalRankVosList: [MultidimensionalRankVosModel]?
private let LiveRankCellID = "LiveRankCell"
// MARK: - 滚动排行榜
private lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout.init()
layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0)
layout.minimumInteritemSpacing = 0
layout.minimumLineSpacing = 0
layout.itemSize = CGSize(width: (YYScreenWidth-30), height:self.frame.size.height)
// layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0)
layout.scrollDirection = UICollectionViewScrollDirection.horizontal
let collectionView = UICollectionView.init(frame:.zero, collectionViewLayout: layout)
collectionView.contentSize = CGSize(width: (YYScreenWidth-30), height: self.frame.size.height)
collectionView.delegate = self
collectionView.dataSource = self
collectionView.backgroundColor = UIColor.white
collectionView.showsVerticalScrollIndicator = false
collectionView.showsHorizontalScrollIndicator = false
collectionView.isPagingEnabled = true
collectionView.register(LiveRankCell.self, forCellWithReuseIdentifier:LiveRankCellID)
return collectionView
}()
var timer: Timer?
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = UIColor.white
self.addSubview(self.collectionView)
self.collectionView.snp.makeConstraints { (make) in
make.width.height.equalToSuperview()
make.center.equalToSuperview()
}
// 开启定时器
starTimer()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
// 界面赋值并刷新
var multidimensionalRankVos:[MultidimensionalRankVosModel]? {
didSet {
guard let model = multidimensionalRankVos else { return }
self.multidimensionalRankVosList = model
self.collectionView.reloadData()
}
}
}
extension HomeLiveRankCell: UICollectionViewDataSource, UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return (self.multidimensionalRankVosList?.count ?? 0)*100
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell:LiveRankCell = collectionView.dequeueReusableCell(withReuseIdentifier: LiveRankCellID, for: indexPath) as! LiveRankCell
cell.backgroundColor = UIColor.init(red: 248/255.0, green: 245/255.0, blue: 246/255.0, alpha: 1)
cell.multidimensionalRankVos = self.multidimensionalRankVosList?[indexPath.row%(self.multidimensionalRankVosList?.count)!]
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print(indexPath.row%(self.multidimensionalRankVosList?.count)!)
}
/// 开启定时器
func starTimer () {
let timer = Timer.init(timeInterval: 3, target: self, selector: #selector(nextPage), userInfo: nil, repeats: true)
// 这一句代码涉及到runloop 和 主线程的知识,则在界面上不能执行其他的UI操作
RunLoop.main.add(timer, forMode: RunLoopMode.commonModes)
self.timer = timer
}
/// 在1秒后,自动跳转到下一页
@objc func nextPage() {
// 1.获取collectionView的X轴滚动的偏移量
let currentOffsetX = collectionView.contentOffset.x
let offsetX = currentOffsetX + collectionView.bounds.width
// 2.滚动该位置
collectionView.setContentOffset(CGPoint(x: offsetX, y: 0), animated: true)
}
// // 监听collectionView的滚到
// func scrollViewDidScroll(_ scrollView: UIScrollView) {
// // 1、获取滚动的偏移量 + scrollView.bounds.width * 0.5给偏移量加一半,当滑动一般就滚动pageControl的当前选中
// let offsetX = scrollView.contentOffset.x + scrollView.bounds.width * 0.5
// // 2、计算pageContra的currentIndex。这 % (cycleModelArr?.count ?? 1)也是跟上同样道理
// pageControl.currentPage = Int(offsetX / scrollView.bounds.width) % (imageArray?.count ?? 1)
// }
//
/// 当collectionView开始拖动的时候,取消定时器
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
self.timer?.invalidate()
self.timer = nil
}
/// 当用户停止拖动的时候,开启定时器
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
starTimer()
}
}
//
// LiveRankCell.swift
// YYSwiftProject
//
// Created by Domo on 2018/7/28.
// Copyright © 2018年 知言网络. All rights reserved.
//
import UIKit
class LiveRankCell: UICollectionViewCell {
private lazy var imageView : UIView = {
let imageView = UIView()
return imageView
}()
private lazy var titleLabel : UILabel = {
let label = UILabel()
label.font = UIFont.systemFont(ofSize: 18)
return label
}()
private lazy var label : UILabel = {
let label = UILabel()
label.text = ">"
label.textColor = UIColor.lightGray
return label
}()
override init(frame: CGRect) {
super.init(frame: frame)
self.addSubview(self.titleLabel)
self.titleLabel.snp.makeConstraints { (make) in
make.left.equalToSuperview().offset(10)
make.height.equalTo(40)
make.width.equalTo(100)
make.centerY.equalToSuperview()
}
self.addSubview(self.imageView)
self.imageView.snp.makeConstraints { (make) in
make.right.equalToSuperview().offset(-5)
make.top.equalToSuperview().offset(5)
make.bottom.equalToSuperview().offset(-5)
make.width.equalTo(180)
}
self.imageView.addSubview(self.label)
self.label.snp.makeConstraints { (make) in
make.right.equalToSuperview().offset(-5)
make.height.width.equalTo(10)
make.centerY.equalToSuperview()
}
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
var multidimensionalRankVos:MultidimensionalRankVosModel? {
didSet {
guard let model = multidimensionalRankVos else { return }
self.titleLabel.text = model.dimensionName
let num:Int = (model.ranks?.count)!
let margin:CGFloat = 50
for index in 0..<num {
let picView = UIImageView.init(frame: CGRect(x:margin*CGFloat(index)+5*CGFloat(index),y:5,width:margin,height:margin))
picView.layer.masksToBounds = true
picView.layer.cornerRadius = picView.frame.size.width/2
picView.kf.setImage(with: URL(string: (model.ranks?[index].coverSmall!)!))
self.imageView.addSubview(picView)
}
}
}
}

swift中使用UIColllectionView实现横向轮播的一般方法的更多相关文章
- js 实现横向轮播效果
参考:https://www.cnblogs.com/LIUYANZUO/p/5679753.html html: <!DOCTYPE html> <html> <hea ...
- Bootstrap 历练实例-轮播(carousel)插件方法
方法 下面是一些轮播(Carousel)插件中有用的方法: 方法 描述 实例 .carousel(options) 初始化轮播为可选的 options 对象,并开始循环项目. $('#identifi ...
- React中使用CSSTransitionGroup插件实现轮播图
动画效果,是一个页面上必不可少的功能,学习一个新的东西,当然就要学习,如何用新的东西,用它的方法去实现以前的东西啦.今天呢,我就在这里介绍一个试用react-addons-css-transition ...
- html中使用JS实现图片轮播效果
1.首先是效果图,要在网页中实现下图的轮播效果,有四张图片,每张图片有自己的标题,然后还有右下角的小方框,鼠标悬浮在小方框上,会切换到对应的图片中去. 2.先是HTML中的内容,最外层是轮播图整个的容 ...
- 记一个jquery 无缝轮播的制作方法
接触前端也很久了,今天才发现,要做好一个轮播,其实有很多东西需要考虑进去,否则做出来的轮播效果并不好,下面我就来做一个轮播,是依赖jquery来写的 1.要做轮播,首先需要的是HTML的内容,css的 ...
- 移动端轮播图实现方法(dGun.js)
本文章介绍在移动端无缝隙轮播图实现的原理,这个轮子比较简单,但可以方便刚刚入门的同学参考.最终效果是在移动端无缝隙无限滑动,可以自定义轮播的速度.支持手势左右滑动.最后会放上源码. HTML部分 &l ...
- H5制作显示轮播图的方法Swiper
1.需要引入Swiper插件 <!-- swiper插件 --> <link rel="stylesheet" href="https://unpkg. ...
- swiper横向轮播--3d
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- swiper横向轮播(兼容IE8)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
随机推荐
- Codeforces #536 A..D 题解
foreword ummm... 开始前几个小时被朋友拉来打了这一场,总体海星,题目体验极佳,很符合口味,稍微有点点简单了不知道是不是因为是 New Year Round,很快就打到了 D,但是题目阅 ...
- 今日份学习: Spring中使用AOP并实现redis缓存?
笔记 在Spring中如何使用AOP? Spring是如何切换JDK动态代理和CGLIB的? spring.aop.proxy-target-class=true (在下方第二个链接中,原生doc中提 ...
- mysql创建数据库并设置字符集编码
create database `mydb` character set utf8 collate utf8_general_ci;
- Vue - 定义使用组件
import Card from './components/Card.vue' Vue.component('m-card',Card) // component是注册全局组件,在实例化VUE前 ...
- java#内部类和嵌套类
内容思路来自Java编程思想,个人读书做的笔记,仅个人复习之用,故他人参考请自行辨别内容是否有错误. 在类的类部可以定义类,叫做内部类.如果这个内部类被static修饰,此时内部的类叫做嵌套类. 内部 ...
- css滚动
css 滚动transform: translateY(-100px);jquery $(box).height(); //获取元素高度$(box).scrollTop();//获得元素的滚动条高度
- SpringBoot---条件(th:if)
Thymeleaf 的条件判断是 通过 th:if 来做的,只有为真的时候,才会显示当前元素 <p th:if="${testBoolean}" >如果testBool ...
- 033.SAP上查看IDOC接口,PI接口查不到的日志记录,可能在IDOC接口日志里面
01. SAP系统发料之后,数据没有传输到条码系统,同事也没有任何bc01的日志,这是就要考虑是不是在IDOC接口了,输入事务代码WE02或者WE05 02.双击查看内容 03.点开就能看到详细内容了 ...
- List<string>绑定到DataGridView控件
问题 将一个简单的List<string>作为数据源绑定到 DataGridView myDataGridView.DataSource = myStringList; 但是只得到一个名为 ...
- 网卡工作原理和wireshark混杂模式
通过设置网卡为混杂模式就能捕获局域网内所有发包内容,包括非广播包和非发给自己主机的数据包 这是为什么呢? 即主机A发送一个数据包给主机B,我作为主机C怎么也能截获这个数据包呢,原理是什么? 我的网卡为 ...