zoukankan      html  css  js  c++  java
  • iOS--轮播图的实现

       //创建scrollview
        self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0,self.frame.size.width,self.frame.size.height)];
        self.scrollView.bounces = YES;
        self.scrollView.pagingEnabled = YES;
        self.scrollView.showsHorizontalScrollIndicator = NO;
        self.scrollView.showsVerticalScrollIndicator = NO;
        //创建pageControl
        self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(self.frame.size.width-100, self.scrollView.frame.size.height-10 , 100, 10)];
        self.pageControl.currentPageIndicatorTintColor = [UIColor redColor];
        self.pageControl.pageIndicatorTintColor = [UIColor blackColor];
    
        //scrollview  的contentSize大小
                self.mainView.scrollView.contentSize = CGSizeMake(self.view.frame.size.width *(self.imageArr.count+2), self.mainView.scrollView.frame.size.height);
                //默认从第一页开始
                [self.mainView.scrollView setContentOffset:CGPointMake(0, 0)];
                [self.mainView.scrollView scrollRectToVisible:CGRectMake(ScreenWidth, 0, ScreenWidth, self.mainView.scrollView.frame.size.height) animated:NO];
                self.mainView.scrollView.delegate = self;
                self.mainView.pageControl.numberOfPages = self.imageArr.count;
                self.mainView.pageControl.currentPage = 0;
                [self.mainView.pageControl addTarget:self action:@selector(turnPage) forControlEvents:UIControlEventValueChanged];
                        //添加图片
                 for (int i = 0; i < self.imageArr.count; i ++) {
                     UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(i*ScreenWidth+ScreenWidth, 0, ScreenWidth, self.mainView.scrollView.frame.size.height)];
                     ScrollImage *image = [self.imageArr objectAtIndex:i];
                        [imageView sd_setImageWithURL:[NSURL URLWithString:image.imgsrc ]placeholderImage:[UIImage imageNamed:@"02.png"]];
                        imageView.userInteractionEnabled = YES;
                     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didClickImageView:)];
                     [imageView addGestureRecognizer:tap];
                     imageView.tag = 100+i;
                     [self.mainView.scrollView addSubview:imageView];
                    }
                //取最后一张图片放在第0页
                UIImageView *firstImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, self.mainView.scrollView.frame.size.height)];
                ScrollImage *firstImage = [self.imageArr objectAtIndex:self.imageArr.count - 1];
                //指定图片
                [firstImageView sd_setImageWithURL:[NSURL URLWithString:firstImage.imgsrc] placeholderImage:[UIImage imageNamed:@"02.png"]];
                [self.mainView.scrollView addSubview:firstImageView];
                //取第一张图片放在最后一页
                UIImageView *lastImageView = [[UIImageView alloc] initWithFrame:CGRectMake(ScreenWidth*(self.imageArr.count + 1), 0, ScreenWidth, self.mainView.scrollView.frame.size.height)];
                ScrollImage *lastImage = [self.imageArr objectAtIndex:0];
                [lastImageView sd_setImageWithURL:[NSURL URLWithString:lastImage.imgsrc] placeholderImage:[UIImage imageNamed:@"02.png"]];
                [self.mainView.scrollView addSubview:lastImageView];
                //定时器  循环播放
                self.myTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(runTimePage) userInfo:nil repeats:YES];
            }
    #pragma mark -----------轮播实现-------------
    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
        //关闭定时器
        [self.myTimer invalidate];
    }
    - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
    {
        //开启定时器
        self.myTimer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(runTimePage) userInfo:nil repeats:YES];
    }
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        
        CGFloat pagewidth = ScreenWidth;
        NSInteger page = floor((self.mainView.scrollView.contentOffset.x - pagewidth/([self.imageArr count]+2))/pagewidth)+1;
        page --;  // 默认从第二页开始
        self.mainView.pageControl.currentPage = page;
    
    }
    
    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
        
        CGFloat pagewidth = ScreenWidth;
        NSInteger currentPage = floor((self.mainView.scrollView.contentOffset.x - pagewidth/ ([self.imageArr count]+2)) / pagewidth) + 1;
        if (currentPage==0)
        {
            [self.mainView.scrollView scrollRectToVisible:CGRectMake(ScreenWidth * [self.imageArr count],0,ScreenWidth,self.mainView.scrollView.frame.size.height) animated:NO]; // 序号0 最后1页
        }
        else if (currentPage==([self.imageArr count]+1))
        {
            [self.mainView.scrollView scrollRectToVisible:CGRectMake(ScreenWidth,0,ScreenWidth,self.mainView.scrollView.frame.size.height) animated:NO]; // 最后+1,循环第1页
        }
    
    }
    
    - (void)turnPage {
        
        NSInteger page = self.mainView.pageControl.currentPage; // 获取当前的page
        [self.mainView.scrollView scrollRectToVisible:CGRectMake(ScreenWidth*(page+1),0,ScreenWidth,self.mainView.scrollView.frame.size.height) animated:NO]; // 触摸pagecontroller那个点点 往后翻一页 +1
    }
    
    - (void)runTimePage {
        NSInteger page = self.mainView.pageControl.currentPage; // 获取当前的page
        page++;
        page = page > (self.imageArr.count - 1) ? 0 : page ;
        self.mainView.pageControl.currentPage = page;
        [self turnPage];
    }

     

  • 相关阅读:
    memset功能的具体说明
    理解离散傅立叶变换(一. 傅立叶的起源变换)
    OutputCache说明
    二进制搜索
    UEditor用法
    —页面布局实例———win7自己的小算盘
    HDU 1698 Just a Hook (段树更新间隔)
    JDBC batch批量Statement executeBatch 详细解释
    Android ListView快速定位(三)
    Android ListView快速定位(二)
  • 原文地址:https://www.cnblogs.com/zhangshan/p/4202629.html
Copyright © 2011-2022 走看看