一  前言

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. poj 1845 Sumdiv 约数和定理

    Sumdiv 题目连接: http://poj.org/problem?id=1845 Description Consider two natural numbers A and B. Let S ...

  2. C# 6与VB 12即将加入模式匹配

    又有一种源自于函数式编程语言中的概念加入了C#和VB的阵营,这就是被称为模式匹配(Pattern Matching)的特性.初看上去,模式匹配的作用类似于一段switch/select语句块,但它的功 ...

  3. iOS开发——多线程OC篇&多线程总结

    多线程总结 //1.NSThread /** 优点:NSThread 比其他两个轻量级. 缺点:需要自己管理线程的生命周期,线程同步,线程同步时对数据的加锁会有一定的系统开销. cocoa给我提供了两 ...

  4. Xcode常见的编译、运行等错误的解决

    Xcode常见的编译.运行等错误的解决 项目没找到Info.plist的错误 The solution for this particular instance of the error was “I ...

  5. 剑指 offer set 2 从头到尾打印链表

    总结 1. 书中给出的最终解法是递归或用堆栈模拟递归. 之前我一直不清楚是否还有更优雅的做法, 看样是没了

  6. 设备文件的创建mknod

    设备文件是通过mknod命令来创建的.其命令格式为: mknod [OPTION]... NAME TYPE [MAJOR MINOR] TYPE取值: 主设备号和次设备号两个参数合并成一个16位的无 ...

  7. 一款基于jQuery的支持鼠标拖拽滑动焦点图

    记得之前我们分享过一款jQuery全屏广告图片焦点图,图片切换效果还不错.今天我们要分享另外一款jQuery焦点图插件,它的特点是支持鼠标拖拽滑动,所以在移动设备上使用更加方便,你只要用手指滑动屏幕即 ...

  8. MUI功能列表

    打开App引导页面 - http://www.bcty365.com/content-146-4970-1.html 页面传值   - http://www.bcty365.com/content-1 ...

  9. 记录一下bing的图片 - 升级版冰糖葫芦

    记录一下bing的图片 - 升级版冰糖葫芦

  10. 用PredicateBuilder实现Linq动态拼接查询

    在使用Linq查询的时候,特别是如果你在使用Entiry Framwork,有时会遇到动态查询的情况(客户的查询条件是不固定的拼接查询).我们能想到的第一方案应该是拼接SQL,的确这样是可以达到我们的 ...