使用UICollectionView实现的swift轮播图FYSliderView

使用UICollectionView实现的swift轮播图FYSliderView

  • 带有动画效果的pageControl,可自定义pageControl元素之间的间距/大小/位置
  • 可自定义文字标题的字体大小/颜色/内边距
  • 有两种风格的文字标题遮罩背景(渐变色背景/半透明背景)

项目结构


目录说明

├── FYSliderView  #核心库文件夹,如果不使用 CocoaPods 集成,请直接将这个文件夹拖拽带你的项目中
    └── FYSliderView.swift 核心类
    └── FYPageControl.swift 自定义的PageControl
    └── FYAnimatedLayer.swift 组成pageControl元素的图层
    └── FYSliderViewCustomizable.swift 参数配置

使用FYSliderView


第一步:使用CocoaPods导入FYSliderView

Podfile中进行如下导入:

pod 'FYSliderView'

然后使用cocoaPods进行安装

第二步:遵守FYSliderViewCustomizable协议,并在初始化方式中指定为自己

class ViewController: UIViewController,FYSliderViewCustomizable {
    var sliderView:FYSliderView!
    func setupSliderView(){
        sliderView = FYSliderView(frame: CGRect(x: 0, y: 0, width: view.bounds.size.width, height: 200),option:self)
        view.addSubview(sliderView)
    }
}

第三步:为sliderView指定数据源

//声明成员变量
var dataSource:[FYImageObject]!

//请求数据,存到dataSource数组中
…

//指定为数据源
sliderView.imageObjectGroup = dataSource
 

第四步:指定代理,实现当点击图片会触发回调方法(可选的)

//指定代理对象为self
sliderView.delegate = self

//遵守协议FYSliderViewDelegate,代理方法如下
extension ViewController:FYSliderViewDelegate{
    //轮播图滚动过程中会触发此方法,检索位置
    func sliderView(didScrollToIndex index: Int) {
        print("滚到了\(index)")
    }
    //用户点击图片,检索位置
    func sliderView(didSelectItemAtIndex index: Int) {
        print("点了\(index)")
    }
}

参数说明

    //默认背景图
    var placeholderImage:UIImage 
    
    //是否需要无限循环
    var infiniteLoop:Bool 
    
    //是否自动滚动
    var autoScroll:Bool 
    
    //默认滚动间隔时间
    var scrollTimeInterval:NSTimeInterval 
    
    //滚动方向
    var scrollDirection:UICollectionViewScrollDirection 
    
    //图片的填充方式
    var imageContentMode:UIViewContentMode  
    
    //只有一个元素时就隐藏pageControl
    var hidesForSinglePage:Bool 
    
    //分页控件的类型
    var controlType:FYPageControlType
    
    //文字背景遮罩样式
    var maskType:FYSliderCellMaskType
    
    //文字样式
    var titleStyle:FYTitleStyle

1.pageControl相关


其中分页控件的类型有:

  • custom 自定义有动画效果的pageControl(默认)
  • system 使用系统自带的pageControl

效果如图

  • custom
    custom
  • system
    system

使用方法:

1.在ViewController类中,只需重写controlType属性,将返回值改为.system并按照参数要求补齐完整即可切换成系统样式

var controlType:FYPageControlType{
    return .system(currentColor: UIColor(red: 1, green: 1, blue: 1, alpha: 1),
                   normalColor:UIColor(red: 1, green: 1, blue: 1, alpha: 0.8),
                   point:(x:.centerX,y:.bottom(10)))
}

2.你想改变动画样式的pageControl元素之间的间距或者大小,仅仅只需重写controlType属性,将返回值改为.custom并按照参数要求补齐完整即可

var controlType:FYPageControlType{ 
    return .custom(currentColor: UIColor(red: 1, green: 1, blue: 1, alpha: 1),
                   normalColor:UIColor(red: 1, green: 1, blue: 1, alpha: 0.8),
                   layout:[.point(x:.right(10), y:.bottom(16)),
                           .size(borderWidth:2,circleWidth:10),
                           .margin(12)
                                ])        
}

3.如果我不想要pageControl了,想把它隐藏掉,那么只需要这样就可以

var controlType:FYPageControlType{
    return .none
}

4.我想自定义pageControl的位置,如果我用的是系统的pageControl的话,我只需要改变参数point的值即可,它分为x轴和y轴,
x轴方向可表示为:

  • .left(20) 到sliderView试图左边距离20个单位
  • .centerX 相对于sliderView水平居中
  • .right(10)到sliderView试图右边距离10个单位

y轴方向可表示为:

  • .top(10) 到sliderView试图顶部距离10个单位
  • .centerY 相对于sliderView垂直居中
  • .bottom(20)到sliderView试图底部距离20个单位

效果如图

  • 右下角显示
    右下角显示
  • 水平垂直居中
    水平垂直居中

2.带文字效果的轮播图,介绍关于遮罩视图的不同选择样式


其中遮罩试图的类型有:

  • translucent 半透明
  • gradient 渐变色(默认)

效果如图

  • 半透明
    半透明
  • 渐变背景色
    渐变背景色

使用方法:
1、设置成为渐变色的遮罩样式

var maskType:FYSliderCellMaskType{
    return .gradient(backgroundColors: [UIColor(red: 0, green: 0, blue: 0, alpha: 0),
                                        UIColor(red: 0, green: 0, blue: 0, alpha: 0.5)],
                     offsetY: 100)
}

2、设置成为半透明的遮罩样式

var maskType:FYSliderCellMaskType{
    return .translucent(backgroundColor:UIColor(red: 0, green: 0, blue: 0, alpha: 0.5))
}

注:如果传入数据源中的title字段为空,将不再显示遮罩背景

3.带文字效果的轮播图,介绍关于设置文字标题的字体大小/内边距/字体颜色


var titleStyle:FYTitleStyle{
    return [.fontSize(16)]
}

注:返回的是数组样式,数组元素存在枚举类型FYTitleLabelStyle中,可传入多个或单个例如:

//我想改变字体大小和字体颜色:
var titleStyle:FYTitleStyle{
    return [.fontSize(16),textColor(UIColor.redColor())]
}

结语

将FYSliderView导入到工程项目中以后,开发者需将轮播图的占位图添加到项目图片目录下,可将占位图的图片资源名称命名为fy_placeholderImage或重写var placeholderImage:UIImage属性。如果开发者导入占位图资源图片到项目中,轮播图的占位图会替换成一张绘制而成的灰色背景图

有任何疑问请到个人博客留言

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容