iOS 编程 利用UIScrollView 编写无缝循环显示图片

实现思路:

1、使用UIScrollView来显示图片

2、UIScrollView中使用三个UIImageView左中右来显示

3、UISCollView动画滚动,滚动完毕后立即把三个UIImageview中的图片循环更换

4、重视定时滚动使用NSTime定时器,当然也可以用多线程,实际选用那种方式看情况吧



#import "MyScrollView.h"

static float nChangeTime=3.0;

static NSUInteger nCurrentImage=1;



@interface MyScrollView()

{

    UILabel *_adLabel;

    UIImageView *leftImageView;

    UIImageView *centerImageView;

    UIImageView *rightImageView;

    

    NSTimer *_moveTime;

    

    BOOL _isTimeUp;

    UILabel *_leftLabel;

    UILabel *_centerLabel;

    UILabel *_rightLabel;

    

    

}

@property (strong, nonatomic,readonly) UIImageView *leftImageView;

@property (strong, nonatomic, readonly) UIImageView *centerImageView;

@property (strong, nonatomic, readonly) UIImageView *rightImageView;

@end



@implementation MyScrollView


- (instancetype)initWithFrame:(CGRect)frame

{

    if (self=[super initWithFrame:frame]) {

        NSUInteger x=0;

        NSLog(@"initwithFrame:%lu",x);

        x=(x-1)%6;

        NSLog(@"initwithFrame:%lu",x);

        

        [self setPageControlShowStyle];

        

        self.bounces=NO;//拖动view不可以超出范围

        self.showsHorizontalScrollIndicator=NO;

        self.showsVerticalScrollIndicator=NO;

        self.pagingEnabled=YES;

        self.contentOffset=CGPointMake([UIScreen mainScreen].bounds.size.width, 0);

        self.contentSize=CGSizeMake([UIScreen mainScreen].bounds.size.width*3, 150);

        

        self.delegate=self;

        

        _leftImageView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 150)];

        _centerImageView=[[UIImageView alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width, 0, [UIScreen mainScreen].bounds.size.width, 150)];

        _rightImageView=[[UIImageView alloc] initWithFrame:CGRectMake([UIScreen mainScreen].bounds.size.width*2, 0, [UIScreen mainScreen].bounds.size.width, 150)];

        

        [self addSubview:_leftImageView];

        [self addSubview:_centerImageView];

        [self addSubview:_rightImageView];

        

        _moveTime=[NSTimer scheduledTimerWithTimeInterval:nChangeTime target:self selector:@selector(animalMoveImage) userInfo:nil repeats:YES];

        _isTimeUp=NO;

        

        

    }

    

    

    

    return self;

}


- (void)setImgArray:(NSArray *)imgArray

{

    NSLog(@"set iamgeArray");

    _imgArray=imgArray;

    _leftImageView.image=[UIImage imageNamed:_imgArray[0]];

    _centerImageView.image=[UIImage imageNamed:_imgArray[1]];

    _rightImageView.image=[UIImage imageNamed:_imgArray[2]];

    

}

- (void)setTitleArray:(NSArray *)titleArray

{

    NSLog(@"settitlearray");

    _titleArray=titleArray;

    

    _leftLabel=[[UILabel alloc] init];

    _centerLabel=[[UILabel alloc] init];

    _rightLabel=[[UILabel alloc] init];

    

    _leftLabel.frame=CGRectMake(0, [UIScreen mainScreen].bounds.size.height-40, [UIScreen mainScreen].bounds.size.width, 50);

    _centerLabel.frame=CGRectMake(0, [UIScreen mainScreen].bounds.size.height-40, [UIScreen mainScreen].bounds.size.width, 50);

    _rightLabel.frame=CGRectMake(0, [UIScreen mainScreen].bounds.size.height-40, [UIScreen mainScreen].bounds.size.width, 50);

    

    

    _leftLabel.text=_titleArray[0];

    _centerLabel.text=_titleArray[1];

    _rightLabel.text=_titleArray[2];

    

    

    [_leftImageView addSubview:_leftLabel];

    [_centerImageView addSubview:_centerLabel];

    [_rightImageView addSubview:_rightLabel];

    

}

- (void)addPageControl:(NSSet *)objects

{

    NSLog(@"addPageControl");

    [[self superview] addSubview:_pageControl];

}


- (void)setPageControlShowStyle

{

    _pageControl=[[UIPageControl alloc] init];

    _pageControl.numberOfPages=_imgArray.count;

    

    _pageControl.frame=CGRectMake(30, [UIScreen mainScreen].bounds.size.height-60, 100, 40);

    

    _pageControl.currentPage=0;

    _pageControl.enabled=NO;

    

    [self performSelector:@selector(addPageControl:) withObject:nil afterDelay:0.2];

}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{

    if (self.contentOffset.x==0) {

        NSLog(@"%lu",nCurrentImage);

        if (nCurrentImage==0) {

            nCurrentImage=_imgArray.count;

        }

        nCurrentImage=(nCurrentImage -1)%_imgArray.count;

        NSLog(@"%lu",nCurrentImage);

        _pageControl.currentPage=(nCurrentImage- 1)%_imgArray.count;

    } else {

        if (self.contentOffset.x==[UIScreen mainScreen].bounds.size.width * 2) {

            nCurrentImage=(nCurrentImage + 1)%_imgArray.count;

            _pageControl.currentPage=(nCurrentImage +1)%_imgArray.count;

        } else {

            return ;

        }

    }

    _leftImageView.image=[UIImage imageNamed:_imgArray[(nCurrentImage-1)%_imgArray.count]];

    _leftLabel.text=_titleArray[(nCurrentImage-1)%_imgArray.count];

    

    _centerImageView.image=[UIImage imageNamed:_imgArray[nCurrentImage%_imgArray.count]];

    _centerLabel.text=_titleArray[nCurrentImage%_imgArray.count];

    

    _rightImageView.image=[UIImage imageNamed:_imgArray[(nCurrentImage +1) % _imgArray.count]];

    _rightLabel.text=_titleArray[(nCurrentImage+1)%_imgArray.count];

    

    [self setContentOffset:CGPointMake([UIScreen mainScreen].bounds.size.width, 0) animated:NO];

    

    if (!_isTimeUp) {

        [_moveTime setFireDate:[NSDate dateWithTimeIntervalSinceNow:nChangeTime]];

    }

}

- (void)animalMoveImage

{

    [self setContentOffset:CGPointMake([UIScreen mainScreen].bounds.size.width * 2, 0) animated:YES];

    _isTimeUp=YES;

    [NSTimer scheduledTimerWithTimeInterval:0.4f target:self selector:@selector(scrollViewDidEndDecelerating:) userInfo:nil repeats:NO];

}

- (instancetype)initWithAdTitle:(NSArray *)adTitleArray andTheStyle:(NSInteger)nShowStyle

{

    if (self=[super init]) {

        

        

    }

    return self;

}


/*

// Only override drawRect: if you perform custom drawing.

// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect {

    // Drawing code

}

*/


@end



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值