美文网首页
轮播图的实现

轮播图的实现

作者: 灯红酒绿映不出的落寞 | 来源:发表于2017-06-02 15:35 被阅读51次
前言 : 因为看到技术文章有很多关于轮播图的实现,可是并没有想象中的那么的实现简单,于是自己写一个当作以后的笔记。加深印象
轮播图的实现
有对轮播图实现原理不清楚的朋友可以自行百度也可以看下这篇文章。本文不做赘述(ps通过scroll来实现轮播效果)。
直接进入正文
  • 假设 scrollview展示三个View 红 黄 蓝, 为了实现无限轮播需求,我们可以最左边加个 蓝 右边加个红 用于循环
    创建代码如下
NSArray *colorArray = @[[UIColor blueColor],[UIColor redColor],[UIColor yellowColor],[UIColor blueColor],[UIColor redColor]];
    self.colorsArray = [NSArray arrayWithArray:colorArray];

这里用到了for循环创建

for (int i = 0; i < colorArray.count; i++) {
        
        UIView *view = [[UIView alloc] init];
        view.backgroundColor = colorArray[i];
        view.frame = CGRectMake(i*CGRectGetWidth(self.view.frame), 0, CGRectGetWidth(self.view.frame), CGRectGetHeight(_myscrollView.frame));
        UILabel *lable = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
        lable.center = CGPointMake(CGRectGetWidth(self.view.frame)/2, CGRectGetHeight(_myscrollView.frame)/2 - 15);
        
        [lable setFont:[UIFont systemFontOfSize:21]];
        
        lable.textAlignment = NSTextAlignmentCenter;
        lable.text = [NSString stringWithFormat:@"%d",i];
        [view addSubview:lable];
        [_myscrollView addSubview:view];
    }
    
    _myscrollView.pagingEnabled = YES;
    _myscrollView.showsHorizontalScrollIndicator = NO;
    _myscrollView.contentSize = CGSizeMake(colorArray.count*CGRectGetWidth(self.view.frame), 0);
    _myscrollView.contentOffset = CGPointMake(CGRectGetWidth(self.view.frame), 0);
    _myscrollView.bounces = NO;
[self addTimer];

当然了无限滚动还需要一个定时器
创建

(void)addTimer
{
    if (self.timer)return;
    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(runImage) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}

再来一个移除

(void)invalidateTimer
{
    [self.timer invalidate];
    
    self.timer = nil;
}

定时器开启,走方法,管控轮播

(void)runImage
{
    CGPoint apoint = self.myscrollView.contentOffset;
    [self.myscrollView setContentOffset:CGPointMake(apoint.x+CGRectGetWidth(self.view.frame), 0) animated:YES];
    }

定时器 以动画形式改变scrollview的contentOffset 调用

(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
   NSLog(@"endani");
   if (scrollView.contentOffset.x==0) {
       [scrollView setContentOffset:CGPointMake(CGRectGetWidth(self.view.frame)*(self.colorsArray.count-2), 0)];
   }else if (scrollView.contentOffset.x==scrollView.contentSize.width-CGRectGetWidth(self.view.frame)){
       [scrollView setContentOffset:CGPointMake(CGRectGetWidth(self.view.frame), 0)];
   }
}

当然免不了测试人员会拖拽
开始拖拽(关闭定时器)

 (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [self invalidateTimer];
}

结束拖拽(开启定时器)

(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    NSLog(@"enddra");
    [self addTimer];
}
这样就实现了一个简单的轮播图,当然对于数据量大的轮播来说,还是用collection实现为好。有时间我会再写一个collection实现轮播的方式,最后Demo地址

相关文章

  • 轮播图心得

    轮播图 写轮播图之前我们要认识到几个问题:一、什么是轮播图?二、怎么实现轮播效果?三、轮播图还有什么小功能可以实现...

  • 轮播图实现

    轮播图在实际应用开发使用较多,本文说明一下具体的实现过程。 一、实现轮播图的基本控件介绍。实现轮播图需要将多张图片...

  • swift UICollectionView 实现无限轮播图

    无线轮播图的实现方式有很多,这里介绍如何通过 UICollectionView 实现无线轮播图.效果图如下: 具体...

  • swift轮播图的实现-UIScrollView

    目标 :UIScrollView+三UIImageView的轮播图实现 原理:利用UIScrollView实现轮播...

  • 项目-轮播图

    整个轮播图分为三部分:轮播指标、轮播项目及轮播导航。用boostrap实现轮播图要比用js、jQuery方便的多,...

  • UIScrollView实现循环轮播Banner(自定义Cell

    实现循环轮播图的各种方案 轮播图的实现方案有很多种,大体上分为CollectionView和ScrollView实...

  • 传统&呼吸 轮播

    传统的轮播图 一个 carousel 轮播图,图片实现自动轮播,可以左右按钮播放,点小圆点也能实现换图。同时设置节...

  • 仿造天猫、京东、凡客等,轮播图的开发(jQuery)

    轮播图思路:1、轮播图布局2、定时器实现轮播效果3、指示器的鼠标移入(mouseenter)、移出(mousele...

  • Swift实现轮播图以及自定义UIPageControl

    无限轮播的实现思路 轮播图最核心的部分是如何实现无限轮播。我的实现方式是: 在UIScrollView上添加三个U...

  • 2019-03-05

    实现轮播图 HTML: css样式 body {...

网友评论

      本文标题:轮播图的实现

      本文链接:https://www.haomeiwen.com/subject/bgrufxtx.html