iOS首页广告无限轮播

#import <UIKit/UIKit.h>

//========用法============
/*
    //1.先包含头文件
    //#import "ZJLoopScrollView.h"


 //创建循环滚动视图
 ZJLoopScrollView *loopScrollView = [[ZJLoopScrollView alloc] init];
 loopScrollView.frame = CGRectMake(0, 20, 320, 460);
 loopScrollView.pageCount = 4;

 //设置本地图片


//设置网络图片
_imageArray = @[@"http://mp.manzuo.com/pic/act/wap.jpg",
                @"http://mp.manzuo.com/pic/act/banner_20141110154630.jpg",
                @"http://mp.manzuo.com/pic/act/banner_20141106115308.jpg",
                @"http://mp.manzuo.com/pic/act/hlbanner.jpg"];
for (int i=0; i<_imageArray.count; i++) {
    [loopScrollView setImageWithUrlString:_imageArray[i] atIndex:i];
}

loopScrollView.autoScroll = YES;
[self.view addSubview:loopScrollView];

*/


//功能: 自动循环滚动显示多张图片
@interface ZJLoopScrollView : UIView

//需要显示的页数
@property (nonatomic) int pageCount;

//设置某个位置处的图片
-(void)setImage:(UIImage *)image atIndex:(int)index;
-(void)setImageWithUrlString:(NSString *)urlString atIndex:(int)index;

//是否自动滚动
@property (nonatomic) BOOL autoScroll;
@property (strong,nonatomic) UIScrollView *scrollView;
@property (strong,nonatomic) UIPageControl *pageControl;
@end




#import "ZJLoopScrollView.h"

@interface ZJLoopScrollView ()<UIScrollViewDelegate>
{
    NSTimer *_myTimer;

    UIImageView *_preImageView;
    UIImageView *_lastImageView;
    NSMutableArray *_imageViewArray;
}
@end

@implementation ZJLoopScrollView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

-(void)setFrame:(CGRect)frame
{
    [super setFrame:frame];
    [self refreshUI];
}

-(void)setPageCount:(int)pageCount
{
    _pageCount = pageCount;
    [self refreshUI];
}
//设置某个位置处的图片
-(void)setImage:(UIImage *)image atIndex:(int)index
{
    if(index<0 || index >_pageCount - 1)
    {
        return;
    }
    if(index == _pageCount - 1)
    {
        _preImageView.image = image;
    }
    if(index == 0)
    {
        _lastImageView.image = image;
    }

    UIImageView *view = _imageViewArray[index];
    view.image = image;

}
-(void)setImageWithUrlString:(NSString *)urlString atIndex:(int)index
{
    if(index<0 || index >_pageCount - 1)
    {
        return;
    }

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        //下载图片
        NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:urlString]];

        //下载完成设置图片
        dispatch_async(dispatch_get_main_queue(), ^{


            if(index == _pageCount - 1)
            {
                _preImageView.image = [UIImage imageWithData:data];
            }
            if(index == 0)
            {
                _lastImageView.image = [UIImage imageWithData:data];
            }

            UIImageView *view = _imageViewArray[index];
            view.image = [UIImage imageWithData:data];

        });


    });



}

-(void)refreshUI
{
    if(_pageCount == 0)
    {
        return;
    }

    //先移除以前的视图
    for (UIView *view in self.subviews) {
        [view removeFromSuperview];
    }

    //创建滚动视图
    _scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
    [self addSubview:_scrollView];
    _scrollView.bounces = YES;
    _scrollView.pagingEnabled = YES;
    _scrollView.delegate = self;
    _scrollView.userInteractionEnabled = YES;
    _scrollView.showsHorizontalScrollIndicator = NO;
    _scrollView.showsVerticalScrollIndicator = NO;


    //add the last image first
    //  [UIImage imageNamed:[_imageArray objectAtIndex:([_imageArray count]-1)]]
    _preImageView = [[UIImageView alloc] initWithImage:nil];

    _preImageView.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    [_scrollView addSubview:_preImageView];


    //[UIImage imageNamed:[_imageArray objectAtIndex:i]]
    _imageViewArray = [[NSMutableArray alloc] init];
    for (int i = 0;i<_pageCount;i++) {
        //loop this bit
        UIImageView *imageView = [[UIImageView alloc] initWithImage:nil];
        imageView.frame = CGRectMake((self.frame.size.width * i) + 0 + self.frame.size.width, 0, self.frame.size.width, self.frame.size.height);
        [_scrollView addSubview:imageView];
        [_imageViewArray addObject:imageView];
    }

    //add the first image at the end
    //  [UIImage imageNamed:[_imageArray objectAtIndex:0]]
    _lastImageView = [[UIImageView alloc] initWithImage:nil];
    _lastImageView.frame = CGRectMake((self.frame.size.width * (_pageCount + 1)) + 0, 0, self.frame.size.width, self.frame.size.height);
    [_scrollView addSubview:_lastImageView];



    [_scrollView setContentSize:CGSizeMake(self.frame.size.width * (_pageCount + 2), self.frame.size.height)];
    [_scrollView setContentOffset:CGPointMake(0, 0)];

    [_scrollView scrollRectToVisible:CGRectMake(self.frame.size.width,0,self.frame.size.width,self.frame.size.height) animated:NO];

    //添加页面控制
    //创建pageControl
    _pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
    _pageControl.center = CGPointMake(self.frame.size.width/2, self.frame.size.height - 20);
    [self addSubview:_pageControl];
    _pageControl.numberOfPages = _pageCount;

    //添加自动滚动
    [self performSelector:@selector(updateScrollView) withObject:nil afterDelay:0.0f];

}

#pragma mark - 循环滚动

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    int currentPage = floor((scrollView.contentOffset.x - scrollView.frame.size.width / (_pageCount+2)) / scrollView.frame.size.width) + 1;
    if (currentPage==0) {
        //go last but 1 page
        [scrollView scrollRectToVisible:CGRectMake(self.frame.size.width * _pageCount,0,self.frame.size.width,self.frame.size.height) animated:NO];
    } else if (currentPage==(_pageCount+1)) { //如果是最后+1,也就是要开始循环的第一个
        [scrollView scrollRectToVisible:CGRectMake(self.frame.size.width,0,self.frame.size.width,self.frame.size.height) animated:NO];
    }

    [self updatePageControl];
}

-(void)updatePageControl
{
    if(_scrollView.frame.size.width == 0)
    {
        return;
    }
    int index = _scrollView.contentOffset.x / _scrollView.frame.size.width;
    //NSLog(@"index = %d",index);
    _pageControl.currentPage = index-1;
}

#pragma mark - 自动滚动

- (void) updateScrollView
{
    [_myTimer invalidate];
    _myTimer = nil;
    //time duration
    NSTimeInterval timeInterval = 3;
    //timer
    _myTimer = [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(handleMaxShowTimer:) userInfo:nil repeats:YES];
}

- (void)handleMaxShowTimer:(NSTimer*)theTimer
{
    //控制是否自动滚动
    if(_autoScroll == NO)
    {
        return;
    }

    CGPoint pt = _scrollView.contentOffset;
    int count = _pageCount;
    if(pt.x == _scrollView.frame.size.width * count){
        [_scrollView setContentOffset:CGPointMake(0, 0)];
        [_scrollView scrollRectToVisible:CGRectMake(_scrollView.frame.size.width,0,_scrollView.frame.size.width,_scrollView.frame.size.height) animated:YES];
    }else{
        [_scrollView scrollRectToVisible:CGRectMake(pt.x+_scrollView.frame.size.width,0,_scrollView.frame.size.width,_scrollView.frame.size.height) animated:YES];
    }

}
-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
    [self updatePageControl];
}


/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

@end
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值