实现思路:
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