一  前言

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 #339 (Div. 1) A. Peter and Snow Blower 计算几何

    A. Peter and Snow Blower 题目连接: http://www.codeforces.com/contest/613/problem/A Description Peter got ...

  2. Codeforces Round #181 (Div. 2) A. Array 构造

    A. Array 题目连接: http://www.codeforces.com/contest/300/problem/A Description Vitaly has an array of n ...

  3. Codeforces Educational Codeforces Round 3 A. USB Flash Drives 水题

    A. USB Flash Drives 题目连接: http://www.codeforces.com/contest/609/problem/A Description Sean is trying ...

  4. GlusterFS创建volume失败的解决方法(* or a prefix of it is already part of a volume)

    问题描写叙述: 之前已经创建了一个replicated的volume gv0,replica=2,两个文件夹为:/test/data1和/test/data2,之后发现这两个文件夹不太合适,想在/te ...

  5. Android 使用 TableLayout 布局拉伸宽度

    转自:http://www.cnblogs.com/ghj1976/archive/2011/04/21/2023850.html 布局文件 <?xml version="1.0&qu ...

  6. ios开发——错误总结篇&开发中常见错误和警告总结(四)

    ios开发——开发总结&开发中常见错误和警告总结(四) 网易彩票实战总结(错误) 错误总结之类的实现 经典错误之重复定义与导入错误 经典错误关于父类的实现 通知对象: 控制器的定义 Xcode ...

  7. javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher--转载

    原文地址:http://songjianyong.iteye.com/blog/1571029 /** * AESHelper.java * cn.com.songjy.test * * Functi ...

  8. 乐观锁(optimistic locking)与悲观锁(pessimistic locking)

    首先,乐观锁(optimistic locking)与悲观锁(pessimistic locking)基本是针对数据处理来说,也就是跟数据库有关的术语,目的是为了解决并发处理时所遇到的相关性能问题,以 ...

  9. Win7下安装Apache+PHP+phpMyAdmin+wordpress+drupal+discuz

    [Apache] Listen 90 DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs&q ...

  10. C# 之 集合整理

    集合,表示可以通过遍历每个元素来访问的一组对象(特别是可使用foreach循环访问):一个集合包括多个元素,即有一个集合类对象和N个元素对象. BCL(Base Class Library, 基类库) ...