Swift-ScrollView轮播图的简易封装和使用
不多说,轮播图是开发中必要一项技能,直接上代码:
先说我的思路:首次继承于UIScrollView类自定义MyScrollView,在MyScrollView里自定制方法,func creatMyScrollView(imageName:[String],height:CGFloat)在里面完成动态布局,通过传入的两个参数imageName,height来制作轮播图的图片和高度,设置contentSize属性和pagingEnabled属性,上代码:
首先继承于UIScrollView自定义MyScrollView类
class ZYF_MyScrollView: UIScrollView {}
自定义方法
scrollView的轮播就是利用其偏移量来进行设置,如果实现n张图片自动轮播,创建计时器是必须的,在scrollView中创建n+1张图片,容量也是n+1张图片的容量。让第1张和最后一张是同一张图片,在偏移量达到n*width的时候,让偏移量置零,这样,在即将显示最后一张图的时候,scrollView的展示图片瞬间变成第一张,然后继续往后播。这样形成了我们常见的轮播效果
class ZYF_MyScrollView: UIScrollView {
func creatMyScrollView(imageName:[String],height:CGFloat) {
//动态布局
for i in 0...(imageName.count - 1) {
let imageView = UIImageView(frame: CGRectMake(CGFloat(i) * width,0,width,height))
self.addSubview(imageView)
//设置轮播图图片
imageView.image = UIImage(named: imageName[i])
}
//设置轮播图容量
self.contentSize = CGSizeMake(CGFloat(imageName.count ) * width, height)
//设置吸附属性
self.bounces = false
//设置书页效果
self.pagingEnabled = true
//单独创建第n+1张轮播图,和第一张图片是同一张图
let imageView = UIImageView(frame:CGRectMake(CGFloat(imageName.count) * width, 0, width, height))
imageView.image = UIImage(named:imageName[0])
self.addSubview(imageView)
}
}
这样就算是简单的封装了一下,使用方法如下:
在你要放置的轮播图的.swift文件中生成 ZYF_MyScrollView的对象
let scr = ZYF_MyScrollView()
创建图片名称数组
let iamgeNames = ["App公测","简书出版","简书官方专题","简书月刊","简书出版","简书官方专题"]
调用creatUI方法,传入图片名称数组,设置高度
func creatScrollView() {
let view = UIView(frame: CGRectMake(0,0,UIScreen.mainScreen.bounds.size.width,280))
scr.creatUI(imageNames,height:200)
view.addSubView(scr)
}
到此,一个能够拖动的轮播图就制作结束了,实现自动轮播,下面我们需要借助计时器NSTimer
创建NSTimer
//创建轮播图定时器
func creatTimer() {
let timer = NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: #selector(self.timerManager), userInfo: nil, repeats: true)
//这句话实现多线程,如果你的ScrollView是作为TableView的headerView的话,在拖动tableView的时候让轮播图仍然能轮播就需要用到这句话
NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
}
//创建定时器管理者
func timerManager() {
//设置偏移量scr.setContentOffset(CGPointMake(scr.contentOffset.x + width, 0), animated: true)
//当偏移量达到最后一张的时候,让偏移量置零
if scr.contentOffset.x == CGFloat(width) * CGFloat(imageNames.count) {
scr.contentOffset = CGPointMake(0, 0)
}
}
到此,自动轮播图制作完毕,在使用中还缺少了一个组件,就是小白点UIPageControl,回到func creatScrollView(){}中
func creatScrollView() {
let view = let view = UIView(frame: CGRectMake(0,0,UIScreen.mainScreen.bounds.size.width,280))
scr.creatUI(imageNames,height:200)`
view.addSubView(scr)
let page = UIPageControl()
page.frame = CGRectMake(width / 2 - 50,160,100,30)
page.numberOfPages = imageNames.count
//将小白点放到scr之上
view.insertSubview(page, aboveSubview: scr)
}
遵守UIScrollViewDelegate协议,设置小白点的跟随轮动
//当手动滚动视图翻页时调用该方法
var cnt = 0
func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
let cPage = scr.contentOffset.x / width
page.currentPage = Int(cPage)
cnt = Int(cPage)
}
//自动播放时,调用该方法
func scrollViewDidEndScrollingAnimation(scrollView: UIScrollView) {
cnt += 1
page.currentPage = cnt % imageNames.count
}
到此,全部工程就完成了
效果如下

Swift-ScrollView轮播图的简易封装和使用的更多相关文章
- swift 广告轮播图
import UIKit import Kingfisher class BannerView: UIView,UIScrollViewDelegate{ enum ImageType{ case I ...
- 用原生js封装轮播图
原生js封装轮播图 对于初学js的同学来说,轮播图还是一个难点,尤其是原生js封装轮播图代码,下面是我之前做的一个轮播图项目中封装好的一些代码,有需要的同学可以看一下,有什么不懂的可以看注释,注释看不 ...
- 简要分析javascript的选项卡和轮播图
选项卡 思路 1.按钮和展示的页面要对应:分别遍历,记住当前按钮的索引,让其成为展示页面的索引 2.只出现所对应的页面:所有的页面隐藏,只展示想要的页面 只展示js代码 for(var i=0;i&l ...
- 初识 swift 封装轮播图
一.简介 换了一家公司.换了一个环境刚开始来公司自然不能有一丝一毫的放松,每天即使是没有什么工作也是看看这个博客.那个源码.尽量让自己更充实.慢慢的开始写几篇博客记录下自己遇到的一些问题和解决方法.其 ...
- 实现下来ScrollView放大轮播图
创建工程,创建一个UIScrollView属性,并遵循其协议: #define kWidth self.view.frame.size.width//屏幕宽 #define kHeight self. ...
- swift-自定义无限轮播图
一 前言 1.之前一直在用OC编程,最近才开始接触使用swift就发现使用OC越来越不习惯,感觉已经爱上了swift. 2.这个自定义轮播图只是对之前OC版本进行了翻译,欢迎指正. 3.我决定一步步 ...
- iOS回顾笔记(05) -- 手把手教你封装一个广告轮播图框架
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式
Android开发工程师文集-Fragment,适配器,轮播图,ScrollView,Gallery 图片浏览器,Android常用布局样式 Fragment FragmentManager frag ...
- iOS swift版本无限滚动轮播图
之前写过oc版本的无限滚动轮播图,现在来一个swift版本全部使用snapKit布局,数字还是pageConrrol样式可选 enum typeStyle: Int { case pageContro ...
随机推荐
- java.lang.ClassNotFoundException: org.apache.commons.discovery.tools.DiscoverSingleton
java.lang.ClassNotFoundException: org.apache.commons.discovery.tools.DiscoverSingleton org.apache.ax ...
- CentOS6、7优化脚本完美版
#!/bin/bash SysVer=`cat /etc/redhat-release | awk -F'release' '{print $2}' | awk -F'[ .]+' '{print $ ...
- mysql一次性删除所有表而不删除数据库
1.执行如下语句获取删除语句 SELECT CONCAT( 'drop table ', table_name, ';' ) from information_schema.tables where ...
- 利用war包和Tomcat镜像创建Web镜像
from hub.c.163.com/library/tomcat:tag #代表以tomcat镜像为基础 MAINTAINER huhuixin 18611551449@163.com #代表所 ...
- mysql 一些属性
1)定义id,设置int,涉及的属性有: BINARY二进制 UNSIGNED无符号数 UNSIGNED ZEROFILL 在列字段中使用UNSIGNED ZEROFILL属性,如: 插入int(4) ...
- ViewPager实现图片的轮播
在app中图片的轮播显示可以说是非常常见的实现效果了,其实现原理不过是利用ViewPager,然后利用handler每隔一定的时间将ViewPager的currentItem设置为当前item的pos ...
- 基础的JavaScript函数
基础的JavaScript函数 1.首字母大写 2.去除数组重复项 3.数组的排序 4.闭包 1. 把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字(使用JavaScript的map函 ...
- ASP.NET动态创建数据库和表
using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; usin ...
- PHP 环境搭建(win7+php5.6+apache或nginx)
安装介质 PHP5.6.16(php-5.6.16-Win32-VC11-x64.zip) Apache2.4.18(httpd-2.4.18-win64-VC14.zip) nginx (nginx ...
- python中*和**的打包和解包
python中的*和**,能够让函数支持任意数量的参数,它们在函数定义和调用中,有着不同的目的 一. 打包参数 * 的作用:在函数定义中,收集所有的位置参数到一个新的元组,并将这个元组赋值给变量arg ...