Git Product home page Git Product logo

wmzbanner's Introduction

WMZBanner - 最好用的轻量级轮播图+卡片样式+自定义样式

演示

banner.gif

特性

  • 链式语法 结构优雅
  • 支持常规轮播图样式
  • 支持卡片式样式
  • 支持跑马灯
  • 支持卡片叠加模式
  • 支持自定义轮播图cell
  • 支持自定义图片的偏移距离
  • 支持自定义pagecontrol
  • 支持循环滚动,支持自动滚动
  • 样式均可自定义
  • 支持网络图片和本地图片混合使用

用法

默认模式

banner1.gif

主要适用于普通样式的情况下使用

直观 清晰, 编码时可随初始化控件编写完成, 不影响编码思路.

WMZBannerParam *param =  BannerParam()
.wFrameSet(CGRectMake(0, BannerHeight/4*3+10, BannerWitdh, BannerHeight/5))
//传入数据
.wDataSet([self getData])
//开启循环滚动
.wRepeatSet(YES)
//开启自动滚动
.wAutoScrollSet(YES)
//自动滚动时间
.wAutoScrollSecondSet(3)
;
self.viewTwo = [[WMZBannerView alloc]initConfigureWithModel:param withView:self.view];

卡片模式

banner4.gif

BannerParam()
.wFrameSet(CGRectMake(0, BannerHeight/4*3+10, BannerWitdh, BannerHeight/5))
//item之间的间距
.wLineSpacingSet(15)
//开启缩放效果 
.wScaleSet(YES)
//缩放垂直系数
.wActiveDistanceSet(400)
//缩放系数
.wScaleFactorSet(0.5)
//item的size
.wItemSizeSet(CGSizeMake(BannerWitdh*0.8, BannerHeight/5))
//固定移动的距离 size*倍数
.wContentOffsetXSet(0.5)
//默认选中
.wSelectIndexSet(2)
.wRepeatSet(YES)
.wAutoScrollSecondSet(3)
.wAutoScrollSet(NO)
//item中心位置
.wPositionSet(BannerCellPositionCenter)
//整体左右偏移 item.width的一半 让第一个和最后一个可以居中
.wSectionInsetSet(UIEdgeInsetsMake(0,BannerWitdh*0.4, 0, BannerWitdh*0.4))
.wDataSet([self getData]);
跑马灯

banner6.gif

 WMZBannerParam *param =  BannerParam()
.wFrameSet(CGRectMake(10, BannerHeight/2-20, BannerWitdh-20, 30))
.wDataSet(@[@"热门商品",@"Hot",@"热点资讯",@"其他热门"])
//跑马灯
.wMarqueeSet(YES)
天猫精灵样式

banner3.gif

 BannerParam()
.wFrameSet(CGRectMake(0, BannerHeight/4*3+10, BannerWitdh, BannerHeight/5))
.wDataSet([self getData])
//关闭pageControl
.wHideBannerControlSet(YES)
//开启缩放
.wScaleSet(YES)
//垂直缩放参数
.wActiveDistanceSet(400)
//缩放系数
.wScaleFactorSet(0.5)
//自定义item的大小
.wItemSizeSet(CGSizeMake(BannerWitdh*0.7, BannerHeight/5))
//固定移动的距离
.wContentOffsetXSet(0.4)
//循环
.wRepeatSet(YES)
//item的间距
.wLineSpacingSet(10)
 //整体左右间距 右边偏移item.width的一半 让最后一个可以居中
.wSectionInsetSet(UIEdgeInsetsMake(0,10, 0, 10+BannerWitdh*0.35))
卡片叠加样式

banner5.gif

 WMZBannerParam *param =  BannerParam()
.wFrameSet(CGRectMake(10,100, BannerWitdh-20, BannerHeight*0.35))
.wItemSizeSet(CGSizeMake(BannerWitdh-60, BannerHeight*0.25))
.wDataSet([self getData])
//设置item的间距
.wLineSpacingSet(15)
//开启卡片叠加模式
.wCardOverLapSet(YES)
//毛玻璃背景
.wEffectSet(YES)
//开启自动滚动
.wAutoScrollSet(YES);
自定义pageControl

banner2.gif

   WMZBannerParam *param =  BannerParam()
  .wFrameSet(CGRectMake(10, BannerHeight*0.7+20, BannerWitdh-20, BannerHeight/6))
  .wBannerControlImageSet(@"bannerP3")
  .wBannerControlSelectImageSet(@"bannerP2")
  .wBannerControlImageSizeSet(CGSizeMake(10, 10))
  .wBannerControlSelectImageSizeSet(CGSizeMake(30, 30))
  //自定义pageControl的位置
  .wCustomControlSet(^(UIPageControl *pageControl) {
      //随意改变xy值
      CGRect rect = pageControl.frame;
      rect.origin.y =  10;
      pageControl.frame = rect;
  })
  .wDataSet([self getData]);
自定义cell
传入一个继承UICollectionViewCell的类
 BannerParam()
//自定义视图必传
.wMyCellClassNameSet(@"MyCell")
.wMyCellSet(^UICollectionViewCell *(NSIndexPath *indexPath, UICollectionView *collectionView, id model, UIImageView *bgImageView,NSArray*dataArr) {
    //自定义视图
    MyCell *cell = (MyCell *)[collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([MyCell class]) forIndexPath:indexPath];
    [cell.icon sd_setImageWithURL:[NSURL URLWithString:model[@"icon"]] placeholderImage:nil];
    cell.leftText.text = model[@"name"];
    //毛玻璃效果必须实现 看实际情况 取最后一个还是中间那个
    [bgImageView sd_setImageWithURL:[NSURL URLWithString:model[@"icon"]] placeholderImage:nil];
    [bgImageView sd_setImageWithURL:[NSURL URLWithString:dataArr[(indexPath.row == 0?:(indexPath.row-1))][@"icon"]] placeholderImage:nil];

    return cell;
})
.wEventClickSet(^(id anyID, NSIndexPath *path) {
    NSLog(@"点击 %@ %@",anyID,path);
})
.wFrameSet(CGRectMake(0, BannerHeight/4*3+10, BannerWitdh, BannerHeight/5))
淡入淡出

fade.gif

更新UI

-(void)updateUI; 改变.wDataSet(@[]),然后调用updateUI()实例方法即可

其他可配置的全部参数说明
布局方式 frame  必传 
wFrame
数据源 必传
wData
开启缩放 default NO
wScale
背景毛玻璃效果 default NO
wEffect
纵向(cell全屏的时候有效)  default NO
wVertical
跑马灯(文字效果) default NO
wMarquee
缩放系数 数值越大缩放越大 default 0.5
wScaleFactor
垂直缩放 数值越大缩放越小 default 400
wActiveDistance
item的size default 视图的宽高 item的width最小为父视图的一半 (为了保证同屏最多显示3个 减少不必要的bug)
wItemSize
item的之间的间距 default 0
wLineSpacing
滑动的时候偏移的距离 以倍数计算 default 0.5 正中间
wContentOffsetX
左右相邻item的中心点 default BannerCellPositionCenter
wPosition
图片不变形铺满 默认 YES
wImageFill
占位图片 默认 -
wPlaceholderImage
开启无线滚动 default NO
wRepeat
整体间距 default UIEdgeInsetsMake(0,0, 0, 0) 如果是一屏幕有2 3个的 要让第一个和最后一个居中最好设置偏移量
wSectionInset
开启自动滚动 default NO
wAutoScroll
自动滚动间隔时间 default 3.0f
wAutoScrollSecond
默认移动到第几个 default 0
wSelectIndex
自定义cell内容 default @“Collectioncell"
wMyCell
自定义cell的类名 自定义视图必传 不然会crash
wMyCellClassName
点击方法
wEventClick
隐藏pageControl default NO
wHideBannerControl
是否允许手势滑动 default YES
wCanFingerSliding
系统的圆点颜色  default  ffffff
wBannerControlColor
系统的圆点选中颜色  default  orange
wBannerControlSelectColor
自定义安全的圆点图标  default -
wBannerControlImage
自定义安全的选中圆点图标  default -
wBannerControlSelectImage
自定义安全的圆点图片圆角 default ImageSize/2
wBannerControlImageRadius
自定义安全的圆点图标的size  default (5,5)
wBannerControlImageSize
自定义安全的选中圆点图标的size default (10,5)
wBannerControlSelectImageSize
滚动减速时间 default UIScrollViewDecelerationRateFast
wDecelerationRate

依赖

SDWebImage

安装

CocoaPods

  1. 将 cocoapods 更新至最新版本. 2.pod 'WMZBanner', '~> 1.2.0'
  2. 导入 #import "WMZBannerView.h"。

手动安装

  1. 下载 WMZBanner 文件夹内的所有内容。
  2. 将 WMZBanner 内的源文件添加(拖放)到你的工程。
  3. 导入 #import "WMZBannerView.h"

系统要求

该库最低支持 iOS 9.0Xcode 9.0

许可证

使用 MIT 许可证,详情见 LICENSE 文件。

个人主页

使用过程中如果有什么bug欢迎给我提issue 我看到就会解决 我的简书

更新记录

  • 20191025 增加wAlpha属性 左右视图的透明度 default 1 范围0~1之间
  • 20191104 增加wScreenScale属性 全局缩放 default 1 范围0~1之间
  • 20191105 增加wVertical属性 开启纵向滚动(全屏有效) default NO
  • 20191105 增加wMarquee属性 开启跑马灯效果(全屏有效) default NO
  • 20191106 解除itemsize最低为视图一半的限制 可支持小图
  • 20191120 新增wEventCenterClick(可判断当前点击cell是否是中间那个)
  • 20191120 新增wEventScrollEnd滚动结束事件(每次滚动结束都会调用 最好是关闭自动滚动的场景使用)
  • 20191204 适配ipad pod 更新到1.0.4
  • 20191219 新增卡片叠加样式 优化定时器
  • 20200117 新年更新至1.1.0 修复bug
  • 20200117 更新至1.1.2 修复bug
  • 20200618 更新至1.1.3 修复bug 新增特殊样式 下划线/淡入淡出
  • 20200625 更新至1.1.4 修复bug
  • 20200920 更新至1.1.5 适配ios14
  • 20201207 更新至1.1.6 修复叠加bug
  • 20201213 更新至1.1.9 优化跑马灯 自定义cell支持xib
  • 20210422 更新至1.2.0 消除警告

wmzbanner's People

Contributors

wwmz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

wmzbanner's Issues

拖拽结束,点击没有反应

请问一下,手动滑到一个,立马点击,没有反应,需要等一下点击才能有点击事件的回调。自动滑动到下一个不存在这个问题。是有什么地方需要设置嘛

代码有些水!?没有仔细考虑性能、安全等因素

  1. 建议更改代码编码方式,不要霍霍啥都不懂的菜鸟

就 宏定义吧,官方已经不建议在宏定义中编写很多东西,而且这样写就毫无保留的为逆向留后门,可以说贻害无穷吗,
`#define WMZBannerPropStatementAndPropSetFuncStatement(propertyModifier,className, propertyPointerType, propertyName)
@Property(nonatomic,propertyModifier)propertyPointerType propertyName; \

  • (className * (^) (propertyPointerType propertyName)) propertyName##Set;

#define WMZBannerPropSetFuncImplementation(className, propertyPointerType, propertyName) \

  • (className * (^) (propertyPointerType propertyName))propertyName##Set{
    return ^(propertyPointerType propertyName) {
    _##propertyName = propertyName;
    return self;
    };
    }`
  1. 对于成员与属性的应用,要么对.m内开放,要么对App开放,你这个对 拿到你二进制包的人都开放,是担心别人逆向的时候找不到吧,请严格遵守 公有| 私有 | 局部公有 来编码
    `
    //布局方式 frame 必传
    WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, CGRect, wFrame)
    //数据源 必传
    WMZBannerPropStatementAndPropSetFuncStatement(strong, WMZBannerParam, NSArray*, wData)
    //特殊样式 default 无
    WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, SpecialStyle, wSpecialStyle)

//淡入淡出 default NO
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, BOOL, wFadeOpen)
//开启缩放 default NO
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, BOOL, wScale)
//开启卡片重叠模式 default NO
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, BOOL, wCardOverLap)
//卡片重叠模式开启偏移透明度变化 default NO
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, BOOL, wCardOverAlphaOpen)
//叠加模式透明度最小值 defalt 0.1
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, CGFloat, wCardOverMinAlpha)
//卡片重叠显示个数 default 4
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, NSInteger, wCardOverLapCount)
//背景毛玻璃效果 default NO
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, BOOL, wEffect)
//隐藏pageControl default NO
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, BOOL, wHideBannerControl)
//是否允许手势滑动 default YES
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, BOOL, wCanFingerSliding)
//图片不变形铺满 默认 YES
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, BOOL, wImageFill)
//开启无线滚动 default NO
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, BOOL, wRepeat)
//开启自动滚动 default NO
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, BOOL, wAutoScroll)
//纵向(cell全屏的时候有效) default NO
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, BOOL, wVertical)
//跑马灯(文字效果) default NO
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, BOOL, wMarquee)
//点击左右居中
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, BOOL, wClickCenter)
//中间视图放最上面 default NO
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, BOOL, wZindex)
//整体间距 默认UIEdgeInsetsMake(0,0, 0, 0)
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, UIEdgeInsets, wSectionInset)
//自定义图片圆角 default 5
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, CGFloat, wCustomImageRadio)
//整体视图缩放系数 default 1
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, CGFloat, wScreenScale)
//毛玻璃背景的高度 (视图的高度倍数) default 1 范围0~1
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, CGFloat, wEffectHeight)
//缩放系数 数值越大缩放越大 default 0.5 卡片叠加效果时默认为0.8
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, CGFloat, wScaleFactor)
//左右的透明度 default 1
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, CGFloat, wAlpha)
//垂直缩放 数值越大缩放越小 default 400
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, CGFloat, wActiveDistance)
//item的size default 视图的宽高 item的width最小为父视图的一半 (为了保证同屏最多显示3个 减少不必要的bug)
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, CGSize, wItemSize)
//item的之间的间距 default 0
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, int, wLineSpacing)
//滑动的时候偏移的距离 以倍数计算 default 0.5 正中间
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, CGFloat, wContentOffsetX)
//左右相邻item的中心点 default BannerCellPositionCenter
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, BannerCellPosition, wPosition)
//占位图片 默认 -
WMZBannerPropStatementAndPropSetFuncStatement(copy, WMZBannerParam, NSString
, wPlaceholderImage)
//数据源的图片字段 默认 icon
WMZBannerPropStatementAndPropSetFuncStatement(copy, WMZBannerParam, NSString*, wDataParamIconName)
//滚动减速时间 default UIScrollViewDecelerationRateFast
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, UIScrollViewDecelerationRate,wDecelerationRate)
//自动滚动间隔时间 default 3.0f
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, CGFloat, wAutoScrollSecond)
//默认移动到第几个 default 0
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, NSInteger, wSelectIndex)
//自定义cell内容 默认是Collectioncell类
WMZBannerPropStatementAndPropSetFuncStatement(copy, WMZBannerParam, BannerCellCallBlock, wMyCell)
//特殊样式SpecialLine 自定义下划线
WMZBannerPropStatementAndPropSetFuncStatement(copy, WMZBannerParam, BannerSpecialLine, wSpecialCustumLine)
//自定义cell的类名 自定义视图必传 不然会crash
WMZBannerPropStatementAndPropSetFuncStatement(copy, WMZBannerParam, NSString*, wMyCellClassName)
//自定义cell的类名 自定义视图必传 不然会crash 和上面的属性wMyCellClassName 二选一 此属性可以传数组
WMZBannerPropStatementAndPropSetFuncStatement(strong, WMZBannerParam, id, wMyCellClassNames)
//系统的圆点颜色 default ffffff
WMZBannerPropStatementAndPropSetFuncStatement(strong, WMZBannerParam, UIColor*, wBannerControlColor)
//系统的圆点选中颜色 default orange
WMZBannerPropStatementAndPropSetFuncStatement(strong, WMZBannerParam, UIColor*, wBannerControlSelectColor)
//自定义安全的圆点图标 default -
WMZBannerPropStatementAndPropSetFuncStatement(copy, WMZBannerParam, NSString*, wBannerControlImage)
//自定义安全的选中圆点图标 default -
WMZBannerPropStatementAndPropSetFuncStatement(copy, WMZBannerParam, NSString*, wBannerControlSelectImage)
//自定义安全的圆点图片圆角 default ImageSize/2
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, CGFloat, wBannerControlImageRadius)
//自定义安全的圆点图标的size default (5,5)
WMZBannerPropStatementAndPropSetFuncStatement(assign, WMZBannerParam, CGSize, wBannerControlImageSize)`
3.建议加入自动化测试,没有经过测试的使用起来总是有点担心的

wHideBannerControl

在数据刷新后 wHideBannerControl隐藏不生效,只有初始化的时候起作用

能否添加滚动到中间时的回调

当前有滚动结束的回调,进行背景的改变以及其他操作,但是看上去背景的切换会有一个延时的效果,就是当试图滚动结束之后,才切换背景。不知能否增加视图cell开始滚动,或者滚动到中间位置时的回调,进行背景切换的效果。

pagecontrol的问题

能否设置一张图不显示pagecontrol,多张图才显示,自定义的pagecontrol

自定义pagecontroller后,数组个数为4,出错

新加载出来pagecontroller显示第一个图,之后滚动闪了一下pagecontroller还显示的第一个,但是图已经变为第二个,再之后下标为0的那个图跑到了pagecontroller的最后一个,之后就一直是这样

自定义卡片

图片缩放不是等比缩放, 图片被压缩变形了

宽度如何压缩

image
这种效果的宽度如何压缩
下面是我设置效果明显不对,被压缩变形了
image

建议规范写法

#import "UIImageView+WebCache.h"这种用尖括号<>
因为我install! 'cocoapods',:deterministic_uuids=>false,generate_multiple_pod_projects: true,disable_input_output_paths: true

的时候,这个是cocoapods 7。1新特性,每一个pods作为一个xcode工程项目进行管理,这个时候你如果不用尖括号<>,我就访问不到,我就要改你的源码,以后我刷新pod或者install的时候就会被冲掉

卡片轮播图

卡片轮播图效果中,在设置数据源为1 或者2 的时候未居中

图片宽度固定了。。。

代码里固定的图片的宽度

else if(self.param.wItemSize.width<self.frame.size.width/2){
        self.param.wItemSize = CGSizeMake(self.frame.size.width/2, self.param.wItemSize.height);

请问能不能实现一下小图的滚动呢!~

有个小小的问题

手势左右滑动的时候,如果滑动的距离太小,当前item就会回弹,不能根据手势来滑动到左边或者右边

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.