一  前言

1.之前一直在用OC编程,最近才开始接触使用swift就发现使用OC越来越不习惯,感觉已经爱上了swift。

2.这个自定义轮播图只是对之前OC版本进行了翻译,欢迎指正。

3.我决定一步步适应swift编程,首先从翻译原来的代码开始。

好啦,马上附上文件记录

let SW = UIScreen.mainScreen().bounds.size.width

let SH = UIScreen.mainScreen().bounds.size.height
 import Foundation
import UIKit class ZLScrollView: UIView ,UIScrollViewDelegate { var scrollview :UIScrollView!
var pageControl :UIPageControl!
var pageBgView :UIImageView!
var pageCount :NSInteger! var imageArray :NSArray! var leftImage :UIImageView!
var centerImage :UIImageView!
var rightImage :UIImageView! var timer :NSTimer!
var isAutoMove :Bool! var urlsArray :NSArray! var selfHeight :CGFloat! override init(frame: CGRect) { super.init(frame: frame) self.frame=frame selfHeight=frame.size.height pageCount= createScrollView()
} func initWithImage(array images : NSArray, array urls : NSArray ) { urlsArray=urls if images.count== {
return
}
imageArray=NSArray.init(array: images) if imageArray.count== {
pageBgView.hidden=true
pageControl.hidden=true let image = imageArray[].allValues[] print(image.image) centerImage.image = getImage(imageView: (imageArray.lastObject?.allValues[])! as! UIImageView)
scrollview.scrollEnabled=false
}else if imageArray.count>= {
pageBgView.hidden=false
pageControl.hidden=false
leftImage.image = getImage(imageView: (imageArray.lastObject?.allValues[])! as! UIImageView)
centerImage.image = getImage(imageView: (imageArray[].allValues[]) as! UIImageView)
rightImage.image = getImage(imageView: (imageArray[].allValues[]) as! UIImageView)
scrollview.scrollEnabled=true
pageBgView.bounds=CGRectMake(, , CGFloat(imageArray.count)*/375.0*SW, /375.0*SW)
setTimer()
}
pageControl.numberOfPages = imageArray.count
} func getImage(imageView imageView:UIImageView) -> UIImage { if imageView.image==nil {
return UIImage(named: "tpjz")!
}else{
return imageView.image!
}
} func pauseTimer() { if (timer != nil) {
if timer!.valid {
timer!.invalidate()
}
}
} func getLoadImage(urlArray :NSArray, headScroll :ZLScrollView) {
let imageArr = NSMutableArray() for i in ...urlArray.count- { let cachedImage = SDImageCache.sharedImageCache().imageFromDiskCacheForKey(urlArray[i] as! String) let imageView = UIImageView(frame: CGRectMake(, , SW, self.frame.height)) if (cachedImage != nil) {
imageView.image=cachedImage
}
else{
imageView.sd_setImageWithURL(NSURL(string :String(urlArray[i])))
} let imageDic = [ String(urlArray[i]) : imageView ] imageArr.addObject(imageDic) initWithImage(array: imageArr, array: urlArray)
} } func resumeTimer() {
if (timer != nil) {
if timer!.valid {
timer!.invalidate()
}
}
} func setTimer() {
if timer==nil {
timer = NSTimer.scheduledTimerWithTimeInterval(, target: self, selector: #selector(ZLScrollView.scrorllViewWithTimerAction), userInfo: nil, repeats: true)
}
} func scrorllViewWithTimerAction() {
scrollview.contentOffset = CGPointMake(*SW, )
isAutoMove = true
self.performSelector(#selector(ZLScrollView.scrollViewDidEndDecelerating), withObject: scrollview, afterDelay: )
} func createScrollView() { scrollview=UIScrollView()
scrollview.frame=self.bounds
scrollview.showsVerticalScrollIndicator = false
scrollview.showsHorizontalScrollIndicator = false
scrollview.delegate = self
scrollview.pagingEnabled = true
self.addSubview(scrollview)
scrollview.contentSize = CGSizeMake(SW*, selfHeight)
scrollview.setContentOffset(CGPointMake(SW, ), animated: false) pageBgView=UIImageView()
pageControl=UIPageControl()
pageControl.frame=CGRectMake(SW/, self.frame.height-/375.0*SW, SW/, /375.0*SW)
pageBgView.center=CGPointMake(SW/, self.frame.height-9.5/375.0*SW)
pageBgView.bounds=CGRectMake(, , /375.0*SW, /375.0*SW)
pageBgView.image=UIImage(named: "icon_bg_tu")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
self.addSubview(pageBgView)
pageControl.pageIndicatorTintColor=UIColor.whiteColor()
pageControl.currentPageIndicatorTintColor=UIColor.orangeColor()
pageControl.backgroundColor=UIColor.clearColor()
pageControl.alpha=0.5
self.addSubview(pageControl) leftImage=UIImageView(frame:CGRectMake(, , SW, selfHeight))
centerImage=UIImageView(frame:CGRectMake(SW, , SW, selfHeight))
centerImage.backgroundColor=UIColor.redColor()
rightImage=UIImageView(frame:CGRectMake(SW*, , SW, selfHeight))
scrollview.addSubview(leftImage)
scrollview.addSubview(centerImage)
scrollview.addSubview(rightImage) let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ZLScrollView.imageViewTapGestureAction))
scrollview.addGestureRecognizer(tapGesture)
} typealias SelectImageBlcok = Int -> Void
var selectImageBlcok : SelectImageBlcok! func imageViewTapGestureAction() {
let dic = imageArray[pageCount] for i in ...urlsArray.count- {
let str = urlsArray[i] if String(str)==String(dic.allKeys[]) { self.selectImageBlcok(i)
} }
} func scrollViewDidEndDecelerating(scrollView: UIScrollView) { if scrollview.contentOffset.x > SW {
pageCount=(pageCount+)%imageArray.count
}else if scrollview.contentOffset.x < SW {
pageCount=(pageCount-+imageArray.count)%imageArray.count
}
pageControl.currentPage = pageCount leftImage.image=getImage(imageView: (imageArray[(pageCount-+imageArray.count)%imageArray.count]).allValues[] as! UIImageView)
centerImage.image=getImage(imageView: (imageArray[(pageCount+imageArray.count)%imageArray.count]).allValues[] as! UIImageView)
rightImage.image=getImage(imageView: (imageArray[(pageCount++imageArray.count)%imageArray.count]).allValues[] as! UIImageView)
if isAutoMove==nil {
timer.fireDate.dateByAddingTimeInterval()
}
isAutoMove=false
} required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
} }

swift-自定义无限轮播图的更多相关文章

  1. 用UICollectionView实现无限轮播图

    用UICollectionView实现无限轮播图 效果 源码 https://github.com/YouXianMing/Animations 细节

  2. iOS最笨的办法实现无限轮播图(网络加载)

    iOS最笨的办法实现无限轮播图(网络加载) 简单的做了一下: 使用方法: 把 请求返回的 图片地址(字符串类型)放进数组中就行 可以使用SDWebImage(我就是用的这个)等..需要自己导入并引用, ...

  3. 简单介绍无限轮播图,js源代码

    无限轮播图js源代码,今天介绍一下用js简单的编写无限轮播图 <!DOCTYPE html> <html>   <head>     <meta charse ...

  4. swift 自定义图片轮播视图

    Swift封装图片轮播视图: import UIKit class XHAdLoopView: UIView { private var pageControl : UIPageControl? pr ...

  5. Android之无限轮播图源代码

    Android轮播广告图是大家经常用到的一个控件今天便撸了一把代码 实现步骤 使用Viewpager进行实现图片滑动 设置ViewPager的数据,让其无限切换 Activity代码 public c ...

  6. swift bannerview 广告轮播图

    class BannerView: UIView,UIScrollViewDelegate{ //图⽚⽔平放置到scrollView上 private var scrollView:UIScrollV ...

  7. 微信小程序中自定义swiper轮播图面板指示点的样式

    重置样式: .swiper{ width: 100%; height: 240px; margin-bottom: 0.5rem; position:relative; } div.wx-swiper ...

  8. iOS 无限轮播图的两种实现

    首先说一下实现的思想: 用UIScrollView实现,在scrollView上添加3个UIImageView,分别用来显示上一张图片,当前显示的图片,下一张图片.scrollView在不滑动的时候永 ...

  9. 自定义完美的ViewPager 真正无限循环的轮播图

    网上80%的思路关于Android轮播图无限循环都是不正确的,不是真正意义上的无限循环, 其思路大多是将ViewPager的getCount方法返回值设置为Integer.MAX_VALUE, 然后呢 ...

随机推荐

  1. Codeforces Round #337 (Div. 2) B. Vika and Squares 贪心

    B. Vika and Squares 题目连接: http://www.codeforces.com/contest/610/problem/B Description Vika has n jar ...

  2. change netbeans look and feel

    change netbeans look and feel: 方法一: 下载地址:https://kenai.com/projects/nbsubstance/downloads/directory/ ...

  3. data URI scheme

    优化网页效能,首要的任务是尽量减少HTTP请求(http request)的次数,例如把多个JavaScript文档合并,多个CSS文件合并等等.此外,还有有一种 data URL 的方法,可以直接把 ...

  4. Linux的内存回收和交换

    Linux的内存回收和交换 版权声明: 本文章内容在非商业使用前提下可无需授权任意转载.发布. 转载.发布请务必注明作者和其微博.微信公众号地址,以便读者询问问题和甄误反馈,共同进步. 微博ID:or ...

  5. PHP header 的几种用法

    跳转页面 header('Location:'.$url); //Location和":"之间无空格. 声明content-type header('content-type:te ...

  6. YYCache 设计思路

    iOS 开发中总会用到各种缓存,最初我是用的一些开源的缓存库,但到总觉得缺少某些功能,或某些 API 设计的不够好用.YYCache (https://github.com/ibireme/YYCac ...

  7. WEB免费打印控件推荐

    在WEB系统中,打印的确是个烦人的问题. 要么自己开发打印控件,如果项目时间紧,肯定来不及. 要么购买成熟的打印控件,如果是大项目可以考虑,但如果项目只有几K到1.2W之间,这就麻烦了. 前段时间有机 ...

  8. WinServer 之 访问同网段服务器 或 同一服务器多虚拟机间的访问

    今天在发布网站时遇到不能访问同网段数据库服务器.具体情况为:web服务端部署在192.168.10.1下,而数据库服务端部署在192.168.10.2下,数据库连接直接配置为192.168.10.2会 ...

  9. Entity Framework 使用注意:Where查询条件中用到的关联实体不需要Include

    来自博客园开发团队开发前线最新消息: 在Entity Framework中,如果实体A关联了实体B,你想在加载实体A的同时加载实体B.通常做法是在LINQ查询中使用Include().但是,如果你在查 ...

  10. go can't find import: "github.com/** 错误

    go get 后 go build 错误 can't find import: "github.com/ 原因: 1.gopath 没配好 2.go get 后要先 go install , ...