swift 自定义图片轮播视图
Swift封装图片轮播视图:
import UIKit class XHAdLoopView: UIView { private var pageControl : UIPageControl?
private var imageScrollView : UIScrollView?
private var currentPage: NSInteger? /******************* 重写get方法 **************/
private var currentImgs = NSMutableArray()
private var currentImages :NSMutableArray? {
get{
currentImgs.removeAllObjects()
let count = self.images!.count
var i = NSInteger(self.currentPage!+count-)%count
currentImgs.addObject(self.images![i])
currentImgs.addObject(self.images![self.currentPage!])
i = NSInteger(self.currentPage!+)%count
currentImgs.addObject(self.images![i])
return currentImgs
}
}
/************************************************/ private var images: NSArray?
private var autoPlay : Bool?
private var isFromNet : Bool?
private var delay : NSTimeInterval? var delegate:XHAdLoopViewDelegate? override init(frame: CGRect) {
super.init(frame: frame)
} required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
} convenience init(frame:CGRect ,images:NSArray, autoPlay:Bool, delay:NSTimeInterval, isFromNet:Bool){
self.init(frame: frame)
self.images = images;
self.autoPlay = autoPlay
self.isFromNet = isFromNet
self.delay = delay
self.currentPage = createImageScrollView()
createPageView() if self.autoPlay == true {
startAutoPlay()
}
} //创建图片滚动视图
private func createImageScrollView(){
if images?.count == {
return
}
imageScrollView = UIScrollView(frame: self.bounds)
imageScrollView?.showsHorizontalScrollIndicator = false
imageScrollView?.showsVerticalScrollIndicator=false
imageScrollView?.bounces = false
imageScrollView?.delegate = self
imageScrollView?.contentSize = CGSizeMake(self.bounds.width*, )
imageScrollView?.contentOffset = CGPointMake(self.frame.width, )
imageScrollView?.pagingEnabled = true
self.addSubview(imageScrollView!) for index in ..< {
let imageView = UIImageView(frame: CGRectMake(self.bounds.width*CGFloat(index), , self.bounds.width, self.bounds.height))
imageView.userInteractionEnabled = true
imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "imageViewClick")) if self.isFromNet == true { }
else{
imageView.image = UIImage(named: self.currentImages![index] as! String);
}
imageScrollView?.addSubview(imageView)
} } //创建pageControl视图
private func createPageView(){
if images?.count == {
return
}
let pageW: CGFloat =
let pageH: CGFloat =
let pageX: CGFloat = self.bounds.width - pageW
let pageY: CGFloat = self.bounds.height - pageH
pageControl = UIPageControl(frame: CGRectMake(pageX, pageY, pageW, pageH))
pageControl?.numberOfPages = images!.count
pageControl?.currentPage =
pageControl?.userInteractionEnabled = false
self.addSubview(pageControl!) } private func startAutoPlay() {
self.performSelector("nextPage", withObject: nil, afterDelay: delay!)
} func nextPage() {
NSObject.cancelPreviousPerformRequestsWithTarget(self, selector: "nextPage", object: nil)
imageScrollView!.setContentOffset(CGPointMake( * self.frame.width, ), animated: true)
self.performSelector("nextPage", withObject: nil, afterDelay: delay!)
} //每次图片滚动时刷新图片
private func refreshImages(){
for i in ..<imageScrollView!.subviews.count {
let imageView = imageScrollView!.subviews[i] as! UIImageView
if self.isFromNet == true { }
else{
imageView.image = UIImage(named: self.currentImages![i] as! String);
}
} imageScrollView!.contentOffset = CGPointMake(self.frame.width, )
} //图片点击
func imageViewClick(){
if self.delegate != nil && (self.delegate?.respondsToSelector("adLoopView:IconClick:")) != nil {
self.delegate!.adLoopView(self, IconClick: currentPage!)
}
} } extension XHAdLoopView : UIScrollViewDelegate{
func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
scrollView.setContentOffset(CGPointMake(self.frame.width, ), animated: true)
} func scrollViewDidScroll(scrollView: UIScrollView) { let x = scrollView.contentOffset.x
let width = self.frame.width
if x >= *width {
currentPage = (currentPage!+) % self.images!.count
pageControl!.currentPage = currentPage!
refreshImages()
}
if x <= {
currentPage = (currentPage!+self.images!.count-) % self.images!.count
pageControl!.currentPage = currentPage!
refreshImages()
}
}
} //自定义代理方法
protocol XHAdLoopViewDelegate:NSObjectProtocol {
func adLoopView(adLoopView:XHAdLoopView ,IconClick index:NSInteger)
}
调用封装的类:
import UIKit class ViewController: UIViewController { override func viewDidLoad() {
super.viewDidLoad()
let frame = CGRectMake(, , view.bounds.width, view.bounds.width*0.6)
let imageView = ["2.jpg","3.jpg","4.jpg"] let loopView = XHAdLoopView(frame: frame, images: imageView, autoPlay: true, delay: 2.5, isFromNet: false)
loopView.delegate = self view.addSubview(loopView) } } //遵循协议代理,调用代理方法
extension ViewController : XHAdLoopViewDelegate {
func adLoopView(adLoopView: XHAdLoopView, IconClick index: NSInteger) {
print(index)
}
}
效果图:
刚接触Swift,菜鸟一枚,望大神指点!由于懒得导入SDWebImage,所以图片来自网络时的加载省略了:
if self.isFromNet == true {
// 加载网络图片
}
Demo下载地址:https://github.com/huahua0809/XHAdScrollView
swift 自定义图片轮播视图的更多相关文章
- iOS开发项目实战——Swift实现图片轮播与浏览
近期開始开发一个新的iOS应用,自己决定使用Swift.进行了几天之后,发现了一个非常严峻的问题.那就是无论是书籍,还是网络资源,关于Swift的实在是太少了,随便一搜全都是OC实现某某某功能.就算是 ...
- EUI Scroller实现自定义图片轮播 组件ScrollView
一 自定义组件如下 /** * 文 件 ScrollView.ts * 功 能: 滚动组件 * 内 容: 自定义组件,支持多张图片水平(垂直)切换滚动 * * Example: * 1. 从自定义组件 ...
- swift:创建滚动视图的图片轮播器
用swift创建图片轮播器和用OC创建的方式是一样的,都主要用到UIScrollView和UIImageview这两个控件,有几张图片,就将滚动视图的内容区域大小设置为每一张图片的大小乘以张数即可.然 ...
- PgwSlideshow-基于Jquery的图片轮播插件
0 PgwSlideshow简介 PgwSlideshow是一款基于Jquery的图片轮播插件,基本布局分为上下结构,上方为大图轮播区域,用户可自定义图片轮播切换的间隔时间,也可以通过单击左右方向按键 ...
- Swift 使用CollectionView 实现图片轮播封装就是这样简单
前言: 这篇你可以学会自定义视图,创建collectionView,协议的使用,定时器; 自制图片 先上Demo:Github上封装好的下载即用, 好用请Star Thanks首先新建一个继承于UIV ...
- 【iOS之轮播视图、自定义UIPageControl】
基于UISrollView实现的无限循环轮播视图. 实现的思路:使用三个UIImageView不断循环利用,始终将最中间一个View显示在UIScrolView的contentSize上,每次滚动后, ...
- 高效图片轮播,两个imageView实现
本文是投稿文章,作者:codingZero 导语 在不少项目中,都会有图片轮播这个功能,现在网上关于图片轮播的框架层出不穷,千奇百怪,笔者根据自己的思路,用两个imageView也实现了图片轮播,这里 ...
- Android零基础入门第49节:AdapterViewFlipper图片轮播
原文:Android零基础入门第49节:AdapterViewFlipper图片轮播 上一期学习了ExpandableListView的使用,你已经掌握了吗?本期开始学习AdapterViewFilp ...
- 原生JS实现"旋转木马"效果的图片轮播插件
一.写在最前面 最近都忙一些杂七杂八的事情,复习软考.研读经典...好像都好久没写过博客了... 我自己写过三个图片轮播,一个是简单的原生JS实现的,没有什么动画效果的,一个是结合JQuery实现的, ...
随机推荐
- EasyUI、Struts2、Hibernate、spring 框架整合
经历了四个月的学习,中间过程曲折离奇,好在坚持下来了,也到了最后框架的整合中间过程也只有自己能体会了. 接下来开始说一下整合中的问题和技巧: 1, jar包导入 c3p0(2个).jdbc(1个). ...
- The communication of Linux Server and Localtion
当用Secure CRT远程登录服务器时,若建立本地与服务器间文件自由传输的机制,我们就可以实现远程办公.具体方法如下: 1. 确定远程服务器的IP.可以通过Secure CRT进行远程登录. 2.在 ...
- Date Picker和UITool Bar的使用
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Verdana } span.s1 { } span.s2 { background-colo ...
- hightcharts 3d 堆积图下钻
图片效果 ***************代码部分****************************************************** <!doctype html> ...
- (转)awk实例练习(二)
文章转自 http://www.cnblogs.com/zhuyp1015/archive/2012/07/14/2591842.html 先来总结一下awk内置变量: ARGC 命 ...
- 在ionic/cordova中使用百度地图插件
在ionic项目中,如果想实现定位功能,可以使用ng-cordova提供的cordova-plugin-geolocation. 但由于高墙的缘故,国内andorid环境下,此插件不起作用(ios环境 ...
- Javascript 知识点整理
1.十进制和十六进制相互转换 /* 十六进制转十进制 */ var test = FF; var x = parseInt(test ,16); //方法一 x = parseInt('0x'+tes ...
- 工具网站gallery
jQuery各个版本齐全的api 在线编辑器codepen
- jQuery 查找父元素
function deletesec1Div5(obj){ $(obj).closest(".sec1-div5").remove();}自己写的一段代码,实现了table中的全选 ...
- ps
快速恢复默认值 有些不擅长Photoshop的朋友为了调整出满意的效果真是几经周折,结果发现还是原来的默认效果最好,这下傻了眼,后悔不该当初呀!怎么恢复到默认值呀?试着轻轻点按选项栏上的工具图标,然 ...