cell中加上无限轮播的效果

直接上代码

首先是建立一个继承UIView的文件

@interface GFCarouselView : UIView

///数据源

@property (nonatomic,copy) NSArray *dataArray;

.m文件

@implementation GFCarouselView

{

CGFloat _cellHeight;

CGFloat _cellWidth;

UIView *_backViewTotal;//控制循环播放

NSTimer *_timer;//定时器

}

- (void)dealloc{

[_timer invalidate];

_timer = nil;//记得释放定时器

}

- (instancetype)initWithFrame:(CGRect)frame{

if ([super initWithFrame:frame]) {

_cellHeight = frame.size.height/4.;

_cellWidth = frame.size.width;

self.clipsToBounds = YES;

}

return self;

}

- (void)setDataArray:(NSArray *)dataArray{

_dataArray = dataArray;

//清空之前的页面

[_backViewTotal removeFromSuperview];

_backViewTotal = nil;

//创建视图

[self createView];

}

///创建视图

- (void)createView{

if (_dataArray.count==0) {

return ;

}

_backViewTotal = [[UIView alloc] init];

//创建底部视图

UIView *backView = [[UIView alloc] init];

backView.frame = CGRectMake(0, 0, _cellWidth, _cellHeight*_dataArray.count);

[_backViewTotal addSubview:backView];

for (int i=0; i<_dataArray.count; i++) {

UILabel *label = [[UILabel alloc] init];

label.textAlignment = NSTextAlignmentLeft;

label.font = [UIFont systemFontOfSize:15];

label.textColor = [UIColor blackColor];

label.text = [NSString stringWithFormat:@"           %@",_dataArray[i]];

label.frame = CGRectMake(0, _cellHeight*i, _cellWidth, _cellHeight);

[backView addSubview:label];

//添加图片

UIImageView *imageView = [[UIImageView alloc] init];

imageView.backgroundColor = [UIColor redColor];

//添加图片

//imageView.image = [UIImage imageNamed:@""];

imageView.frame = CGRectMake(10, 10, _cellHeight-20, _cellHeight-20);

[label addSubview:imageView];

}

if (_dataArray.count>4) {

UIView *backViewTwo = [[UIView alloc] init];

backViewTwo.frame = CGRectMake(0, CGRectGetMaxY(backView.frame), _cellWidth, _cellHeight*_dataArray.count);

[_backViewTotal addSubview:backViewTwo];

for (int i=0; i<_dataArray.count; i++) {

UILabel *label = [[UILabel alloc] init];

label.textAlignment = NSTextAlignmentLeft;

label.font = [UIFont systemFontOfSize:15];

label.textColor = [UIColor blackColor];

label.text = [NSString stringWithFormat:@"           %@",_dataArray[i]];

label.frame = CGRectMake(0, _cellHeight*i, _cellWidth, _cellHeight);

[backViewTwo addSubview:label];

//添加图片

UIImageView *imageView = [[UIImageView alloc] init];

imageView.backgroundColor = [UIColor redColor];

//添加图片

//imageView.image = [UIImage imageNamed:@""];

imageView.frame = CGRectMake(10, 10, _cellHeight-20, _cellHeight-20);

[label addSubview:imageView];

}

_backViewTotal.frame = CGRectMake(0, 0, _cellWidth, _cellHeight*_dataArray.count*2);

_timer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(startCarouse) userInfo:nil repeats:YES];

[[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];

}else{

_backViewTotal.frame = CGRectMake(0, 0, _cellWidth, _cellHeight*_dataArray.count);

}

[self addSubview:_backViewTotal];

}

///开始轮播

- (void)startCarouse{

CGRect currentFrame = _backViewTotal.frame;

//在此做判断

if (currentFrame.origin.y <= 0 - _cellHeight*_dataArray.count) {

currentFrame.origin.y = 0;

}else{

currentFrame.origin.y -= 1;

}

_backViewTotal.frame = CGRectMake(0, currentFrame.origin.y, _cellWidth, _cellHeight*_dataArray.count*2);

}

第三步在VC文件中引用

#import "ViewController.h"

#import "GFCarouselView.h"//轮播图

@interface ViewController ()

/*注释*/

@property (nonatomic,strong)GFCarouselView *carouseView ;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

self.carouseView = [[GFCarouselView alloc] initWithFrame:CGRectMake(0, 100, 375, 200)];

_carouseView.dataArray = @[@"2017年1月1日 获得赠送流量10M",@"2017年2月1日 获得赠送流量9M",@"2017年3月1日 获得赠送流量8M",@"2017年4月1日 获得赠送流量7M",@"2017年5月1日 获得赠送流量6M",@"2017年6月1日 获得赠送流量5M",@"2017年7月1日 获得赠送流量4M"];

[self.view addSubview:_carouseView];

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

@end

时间: 2024-10-16 15:53:48

cell中加上无限轮播的效果的相关文章

ViewPager实现无限轮播踩坑记

最近笔者想通过ViewPager来实现一个广告Banner,并实现无限轮播的效果,但是在这个过程中踩了不少的坑,听我慢慢道来.如果大家有遇到和我一样的情况,可以参考我的解决方法,没有那就更好,如果针对我的解决方法,有啥更好的方案,欢迎和我分享 使用ViewPager实现无限轮播代码 MainActivity代码 public class MainActivity extends AppCompatActivity { private ViewPager mViewPager; private T

Html5如何快速在页面中写出多个轮播图效果

我们在做项目的过程中,有时候客户需求要求你在同一个页面中,写几个不同样式的轮播图效果,那么如何快速实现呢?(要知道若果你每个轮播图都要用原生javascript写的话,会很麻烦,代码也不够简洁) 这里我们就可以借助插件来实现这一功能,swiper.js就是一个专门处理轮播图效果的js库,下面举例来说明: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"&g

无限轮播的实现,未加自动轮播效果(非原创)

最近一直在看视频,学到了一个无限轮播,今天把它给写下来保存,方便日后自己查阅. html 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="keywords" content=""> 6 <meta name="description" content="

js无限轮播算法中干掉if判断

无限轮播在网页应用中经常见到,这其中算法各有千秋,在学习算法分析一书中发现自增取余方法可以干掉一些不必要的if判断,具体代码如下: 1 var arr= [1,2,3,4,5,6,7,8]; 2 var index=0; 3 var length=arr.length; 4 setInterval(function(){ 5 // 自增 6 console.log(arr[index++%length]); 7 // 自减 8 // console.log(arr[index=(index+le

ScrollView中图片的无限轮播(精简)

该Demo使用3长图片的轮播为例(此实例可以使用N多个图片轮播,只需要把第一张和第二张图片分别用两张即可),如下图: 只写实现部分代码,不写创建scrollview,和设置的基本代码了: -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { CGPoint pointZero =  CGPointMake(0 , 0);    //第一个图片的坐标点 CGPoint poinNow = scrollView.conten

iOS开发UI篇—无限轮播(功能完善)

iOS开发UI篇—无限轮播(功能完善) 一.自动滚动 添加并设置一个定时器,每个2.0秒,就跳转到下一条. 获取当前正在展示的位置. 1 [self addNSTimer]; 2 } 3 4 -(void)addNSTimer 5 { 6 // NSTimer timerWithTimeInterval:<#(NSTimeInterval)#> target:<#(id)#> selector:<#(SEL)#> userInfo:<#(id)#> repe

无限轮播(新闻数据展示)

无限轮播(新闻数据展示) 一.实现效果        二.实现步骤 1.前期准备 (1)导入数据转模型的第三方框架MJExtension (2)向项目中添加保存有“新闻”数据的plist文件 (3)导入用到的图片素材 2.步骤和代码 (1)新建一个数据模型 该模型的代码设计如下: YYnews.h文件 5 6 #import <Foundation/Foundation.h> 7 8 @interface YYnews : NSObject 9 @property(nonatomic,copy

无限轮播(功能完善)

无限轮播(功能完善) 一.自动滚动 添加并设置一个定时器,每个2.0秒,就跳转到下一条. 获取当前正在展示的位置. 1 [self addNSTimer]; 2 } 3 4 -(void)addNSTimer 5 { 6 // NSTimer timerWithTimeInterval:<#(NSTimeInterval)#> target:<#(id)#> selector:<#(SEL)#> userInfo:<#(id)#> repeats:<#

iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView

下载链接:github不断更新地址:https://github.com/gsdios/SDCycleScrollView 使用原理:采用UICollectionView的重用机制和循环滚动的方式实现图片的无限轮播,播放非常顺畅,解决了UISCrollView使用时从最后一张跳到第一张时的生硬状态. 主要类截图: SDCollectionViewCell:用来重用的item,即显示图片的视图: SDCycleScrollView: 对外提供的一个创建轮播器的接口类,使用者就是直接使用这个类来实现