swift-自定义无限轮播图
一 前言
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-自定义无限轮播图的更多相关文章
- 用UICollectionView实现无限轮播图
用UICollectionView实现无限轮播图 效果 源码 https://github.com/YouXianMing/Animations 细节
- iOS最笨的办法实现无限轮播图(网络加载)
iOS最笨的办法实现无限轮播图(网络加载) 简单的做了一下: 使用方法: 把 请求返回的 图片地址(字符串类型)放进数组中就行 可以使用SDWebImage(我就是用的这个)等..需要自己导入并引用, ...
- 简单介绍无限轮播图,js源代码
无限轮播图js源代码,今天介绍一下用js简单的编写无限轮播图 <!DOCTYPE html> <html> <head> <meta charse ...
- swift 自定义图片轮播视图
Swift封装图片轮播视图: import UIKit class XHAdLoopView: UIView { private var pageControl : UIPageControl? pr ...
- Android之无限轮播图源代码
Android轮播广告图是大家经常用到的一个控件今天便撸了一把代码 实现步骤 使用Viewpager进行实现图片滑动 设置ViewPager的数据,让其无限切换 Activity代码 public c ...
- swift bannerview 广告轮播图
class BannerView: UIView,UIScrollViewDelegate{ //图⽚⽔平放置到scrollView上 private var scrollView:UIScrollV ...
- 微信小程序中自定义swiper轮播图面板指示点的样式
重置样式: .swiper{ width: 100%; height: 240px; margin-bottom: 0.5rem; position:relative; } div.wx-swiper ...
- iOS 无限轮播图的两种实现
首先说一下实现的思想: 用UIScrollView实现,在scrollView上添加3个UIImageView,分别用来显示上一张图片,当前显示的图片,下一张图片.scrollView在不滑动的时候永 ...
- 自定义完美的ViewPager 真正无限循环的轮播图
网上80%的思路关于Android轮播图无限循环都是不正确的,不是真正意义上的无限循环, 其思路大多是将ViewPager的getCount方法返回值设置为Integer.MAX_VALUE, 然后呢 ...
随机推荐
- 仿Android网易新闻客户端,并增加水平图片滑动,改进阅读体验
仿网易新闻Android端APP 主要功能展示和代码实现 差不多花了一周的时间,目前实现的了新闻下的包括头条.体育.娱乐的一系列的新闻展示,以及点击后进入的新闻详情展示. 目前效果 目前效果请访问该网 ...
- [Angular2 Router] CanDeactivate Route Guard - How To Confirm If The User Wants To Exit A Route
In this tutorial we are going to learn how we can to configure an exit guard in the Angular 2 Router ...
- java生成汉字验证码
java实现的汉字输入验证码,主要包含两个类,一个是生成验证码,一个是判断验证码输入是否正确,实现原理非常简单,将汉字和干扰线生成图片并将汉字保存到session,前台获取每次生成验证码图片并用文本框 ...
- 关于CQRS(老外经典好文)
CQRS means Command Query Responsibility Segregation. Many people think that CQRS is an entire archit ...
- 0c-34-自动释放池
#import <Foundation/Foundation.h> #import "Person.h" Person * creatPerson() { Person ...
- VM参数简介
http://www.cnblogs.com/yuzhaoxin/p/4083612.html block_dump Linux 内核里提供了一个 block_dump 参数用来把 block 读写( ...
- 一款纯css3实现的条纹加载条
之前为大家带来了很多加载动画. 基于prefixfree.js的进度加载条 ,基于jquery带百分比的响应式进度加载条.今天给大家分享一款纯css3实现的条纹加载条.带有响应式的效果.效果图如下 : ...
- Asp.Net 之 枚举类型的下拉列表绑定
有这样一个学科枚举类型: /// 学科 /// </summary> public enum Subject { None = , [Description("语文") ...
- IIS 之 托管管道模式
IIS 7.0 支持两种管道模式: (1)IIS 7.0 最新提供的集成管道模式(Integrated), (2)经典管道模式(Classic),经典管道模式是由先前版本的IIS提供的. 我们可以通过 ...
- jquery . fancybox()
1.父页面 function chooseTopic(btn) {//选择议题 $.fancybox({ type : 'iframe', href : '', fitToView : false, ...