//
|
// BSKImagesPageView.m
|
// Shopping
|
//
|
// Created by aaaa on 2016/11/16.
|
// Copyright © 2016年 YouMeiYiKeJi. All rights reserved.
|
//
|
|
#import "BSKImagesPageView.h"
|
#import "AFNetworking.h"
|
//#import "BSKUtils.h"
|
#import "UIImageView+WebCache.h"
|
|
#ifndef BSKPlaceHolderImage
|
|
#define BSKPlaceHolderImage [UIImage imageNamed:@"默认加载图片"]
|
|
#endif
|
|
@interface BSKImagesPageView ()<UIScrollViewDelegate>
|
@property (nonatomic, strong) NSTimer * timer;
|
@property (nonatomic, strong) UIScrollView * imageScroView;
|
@property (nonatomic, strong) YYAnimatedImageView * firstImageView;
|
@property (nonatomic, strong) YYAnimatedImageView * middleImageView;
|
@property (nonatomic, strong) YYAnimatedImageView * lastImageView;
|
@property (nonatomic, assign) NSInteger currentPage;
|
@property (nonatomic, assign) BOOL isScroll;
|
@property (nonatomic, assign) BOOL initFlag;
|
@end
|
|
@implementation BSKImagesPageView
|
|
-(instancetype)initWithImages:(NSArray *)images{
|
CGFloat w= 200;//默认宽高
|
CGFloat h = 120;
|
self = [self initWithFrame:CGRectMake(0, 0,w,h) imageNames:images];
|
return self;
|
}
|
|
|
- (instancetype)initWithFrame:(CGRect)frame imageNames:(NSArray *)images
|
{
|
self = [self initWithFrame:frame];
|
if (self) {
|
self.images = images;
|
}
|
return self;
|
}
|
|
-(void)awakeFromNib{
|
[super awakeFromNib];
|
[self initialize];
|
}
|
|
- (instancetype)initWithFrame:(CGRect)frame
|
{
|
self = [super initWithFrame:frame];
|
if (self) {
|
[self initialize];
|
}
|
return self;
|
}
|
|
-(void)initialize{
|
_initFlag = NO;
|
self.imageSize = CGSizeZero;
|
self.canClickWhenScroll = YES;
|
self.isScroll = NO;
|
[self initializeUIserInterface];
|
}
|
|
-(void)layoutSubviews{
|
|
self.imageScroView.frame = self.bounds;
|
self.imageScroView.contentSize =CGSizeMake(self.bounds.size.width*3, self.bounds.size.height);
|
//self.pageControl.frame = CGRectMake(0, self.bounds.size.height-20, self.bounds.size.width, 20);
|
self.pageControl.frame = CGRectMake(0, self.bounds.size.height-30, self.bounds.size.width, 20);
|
self.firstImageView.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height);
|
self.middleImageView.frame = CGRectMake(self.bounds.size.width, 0, self.bounds.size.width, self.bounds.size.height);
|
self.lastImageView.frame = CGRectMake(self.bounds.size.width*2, 0, self.bounds.size.width, self.bounds.size.height);
|
[self.imageScroView setContentOffset:CGPointMake(self.bounds.size.width, 0) animated:NO];
|
[self openTimer:YES];
|
|
}
|
|
-(void)initializeUIserInterface{//初始化视图
|
|
self.imageScroView = [[UIScrollView alloc]init];
|
self.firstImageView = [[YYAnimatedImageView alloc]init];
|
self.middleImageView = [[YYAnimatedImageView alloc]init];
|
self.lastImageView = [[YYAnimatedImageView alloc]init];
|
self.pageControl = [[UIPageControl alloc]init];
|
[self.firstImageView setContentScaleFactor:[[UIScreen mainScreen] scale]];
|
[self.middleImageView setContentScaleFactor:[[UIScreen mainScreen] scale]];
|
[self.lastImageView setContentScaleFactor:[[UIScreen mainScreen] scale]];
|
self.firstImageView.contentMode = UIViewContentModeScaleToFill;
|
self.middleImageView.contentMode = UIViewContentModeScaleToFill;
|
self.lastImageView.contentMode = UIViewContentModeScaleToFill;
|
self.firstImageView.clipsToBounds = YES;
|
self.middleImageView.clipsToBounds = YES;
|
self.lastImageView.clipsToBounds = YES;
|
|
[self addSubview:self.imageScroView];
|
self.imageScroView.delegate = self;
|
self.imageScroView.pagingEnabled = YES;
|
self.imageScroView.showsVerticalScrollIndicator = NO;
|
self.imageScroView.showsHorizontalScrollIndicator = NO;
|
|
|
self.pageControl.currentPage = 0;
|
self.currentPage = 0;
|
self.pageControl.numberOfPages = self.images.count;
|
self.pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
|
// self.pageControl.currentPageIndicatorTintColor = UIColorHex(@"f4bb3dff");
|
// self.pageControl.currentPageIndicatorTintColor = UIColorFromRGB(0xFE7C21, 1.0);
|
self.pageControl.currentPageIndicatorTintColor = kGlobalYellowColor;
|
|
self.pageControl.userInteractionEnabled =NO;
|
[self addSubview:self.pageControl];
|
|
[self.imageScroView addSubview:self.firstImageView];
|
[self.imageScroView addSubview:self.middleImageView];
|
[self.imageScroView addSubview:self.lastImageView];
|
[self refreshImage];
|
|
UITapGestureRecognizer * tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
|
[self addGestureRecognizer:tapGesture];
|
|
}
|
//点击手势
|
-(void)tapAction:(UITapGestureRecognizer *)geture{
|
if (self.images.count==0) {
|
return;
|
}
|
if (self.isScroll) {
|
//NSLog(@"[BSKImagesPageView]: canClickWhenScroll = %@",self.canClickWhenScroll?@"YES":@"NO");
|
if(!self.canClickWhenScroll){
|
return;
|
}
|
}
|
if (self.delegate) {
|
if([self.delegate respondsToSelector:@selector(BSKImagesPageView:onClickImageView:atIndex:)]){
|
[self.delegate BSKImagesPageView:self onClickImageView:self.middleImageView atIndex:self.pageControl.currentPage];
|
}
|
}
|
}
|
|
//打开或关闭计时器
|
-(void)openTimer:(BOOL)open{
|
if (self.images.count<=1) {
|
[self.timer invalidate];
|
return;
|
}
|
if (self.timerTimeInterval<=0) {
|
[self.timer invalidate];
|
return;
|
}
|
if (open) {
|
[self.timer invalidate];
|
self.timer = [NSTimer scheduledTimerWithTimeInterval:self.timerTimeInterval target:self selector:@selector(nextPage) userInfo:nil repeats:YES];
|
}else{
|
[self.timer invalidate];
|
}
|
}
|
|
//根据当前的页码更新图片
|
-(void)refreshImage{
|
|
if (self.images.count==0) {
|
return;
|
}
|
|
NSInteger firstIndex = self.currentPage - 1;
|
if (firstIndex<0) {
|
firstIndex = self.images.count - 1;
|
}
|
NSInteger lastIndex = self.currentPage + 1;
|
if (lastIndex>=self.images.count) {
|
lastIndex=0;
|
}
|
//NSLog(@"%ld %ld %ld",firstIndex,self.currentPage,lastIndex);
|
[self setImage:self.images[firstIndex] toImageView:self.firstImageView];
|
[self setImage:self.images[self.currentPage] toImageView:self.middleImageView];
|
[self setImage:self.images[lastIndex] toImageView:self.lastImageView];
|
}
|
|
-(void)setImage:(id) image toImageView:(YYAnimatedImageView*)imageview{
|
NSString *imageString = (NSString *)image;
|
if (imageString.length == 0) {
|
[imageview setImage:BSKPlaceHolderImage];
|
return;
|
}
|
[imageview setYthImageWithURL:imageString placeholderImage:BSKPlaceHolderImage];
|
// if ([image isKindOfClass:[NSString class]]) {
|
// NSString * imageStr = image;
|
// if ([imageStr hasPrefix:@"http://"]) {
|
// //if (!CGSizeEqualToSize(self.imageSize, CGSizeZero)) {
|
// //[imageview setImageWithURL:[imageStr CIImageHttpsUrlWithSize:self.imageSize] placeholder:BSKPlaceHolderImage];
|
// [imageview sd_setImageWithURL:[NSURL URLWithString:imageStr] placeholderImage:BSKPlaceHolderImage];
|
//// }else{
|
//// [imageview setImageWithURL:[imageStr HttpsUrlFromeHttpString] placeholder:BSKPlaceHolderImage];
|
//// }
|
// }else{
|
// if ([imageStr hasSuffix:@".gif"]||[imageStr hasSuffix:@".GIF"]) {
|
// NSString * gifType = [imageStr substringFromIndex:[imageStr rangeOfString:@"." options:NSBackwardsSearch].location];
|
// NSString * gifName = [imageStr substringToIndex:imageStr.length-4];
|
// NSString * str = [[NSBundle mainBundle] pathForResource:gifName ofType:gifType];
|
// if (str) {
|
//// NSURL * url = [NSURL fileURLWithPath:str];
|
// [imageview setYthImageWithURL:str placeholderImage:BSKPlaceHolderImage];
|
// }
|
// }else{
|
// if ([image isKindOfClass:[NSNull class]]) {
|
// [imageview setImage:BSKPlaceHolderImage];
|
// }else{
|
// [imageview setImage:[UIImage imageNamed:imageStr]];
|
// }
|
// }
|
// }
|
// }else if([image isKindOfClass:[NSURL class]]){
|
// [imageview setYthImageWithURL:image placeholderImage:BSKPlaceHolderImage];
|
// }else if([image isKindOfClass:[UIImage class]]){
|
// [imageview setImage:image];
|
// }else{
|
// [imageview setImage:BSKPlaceHolderImage];
|
// }
|
}
|
|
//滚动到下一页,轮播。
|
-(void)nextPage{
|
|
if (self.images.count>1) {
|
self.isScroll = YES;
|
[self.imageScroView setContentOffset:CGPointMake(self.frame.size.width*2, 0) animated:YES];
|
}
|
if (!self.superview) {
|
[self openTimer:NO];
|
}
|
}
|
|
-(void)lastPage{
|
if (self.images.count>1) {
|
self.isScroll = YES;
|
[self.imageScroView setContentOffset:CGPointMake(0, 0) animated:YES];
|
}
|
}
|
|
-(void)scrollToIndex:(NSInteger)index{
|
if (index>=self.images.count||index<0||self.images.count==0) {
|
return;
|
}
|
[self setImage:self.images[index] toImageView:self.lastImageView];
|
[self nextPage];
|
self.currentPage = index-1>=0?index-1:self.images.count-1;
|
}
|
|
#pragma marck UIScrollViewDelegate
|
//当滚动动画完成时更新页码重置图片(只有轮播时才会触发)
|
-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{
|
[self scrollViewDidEndDecelerating:scrollView];
|
}
|
//当滚动到两边边缘时进行页码处理并重置图片
|
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
|
if (self.images.count==0) {
|
return;
|
}
|
if (scrollView.contentOffset.x<0) {
|
scrollView.contentOffset = CGPointMake(self.frame.size.width, 0);
|
self.currentPage--;
|
}else
|
if (scrollView.contentOffset.x>self.frame.size.width*2) {
|
scrollView.contentOffset = CGPointMake(self.frame.size.width, 0);
|
self.currentPage++;
|
|
}else{
|
return;
|
}
|
NSInteger arrayCount =self.images.count+0;
|
if (self.currentPage>=arrayCount) {
|
self.currentPage = 0;
|
}
|
if (self.currentPage<0) {
|
self.currentPage = self.images.count-1;
|
}
|
[self refreshImage];
|
[self.imageScroView setContentOffset:CGPointMake(self.frame.size.width, 0) animated:NO];
|
self.pageControl.currentPage=self.currentPage;
|
self.isScroll = YES;
|
}
|
|
//当减速动画完成时更新页码并重置图片。(拖拽时才会触发)
|
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
|
if (self.images.count==0) {
|
return;
|
}
|
if (scrollView.contentOffset.x==0) {
|
self.currentPage--;
|
}
|
else if(scrollView.contentOffset.x==self.frame.size.width*2){
|
self.currentPage++;
|
}
|
else{
|
return;
|
}
|
NSInteger arrayCount =self.images.count+0;
|
if (self.currentPage>=arrayCount) {
|
self.currentPage = 0;
|
}
|
if (self.currentPage<0) {
|
self.currentPage = self.images.count-1;
|
}
|
[self refreshImage];
|
[self.imageScroView setContentOffset:CGPointMake(self.frame.size.width, 0) animated:NO];
|
self.pageControl.currentPage=self.currentPage;
|
self.isScroll = NO;
|
}
|
//开始拖拽时关闭计时器
|
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
|
self.isScroll = YES;
|
[self openTimer:NO];
|
}
|
//结束拖拽时打开计时器继续轮播
|
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
|
[self openTimer:YES];
|
}
|
|
|
#pragma marck setter
|
|
-(void)setTimerTimeInterval:(NSInteger)timerTimeInterval{
|
_timerTimeInterval = timerTimeInterval;
|
[self openTimer:YES];
|
}
|
|
-(void)setImages:(NSArray *)images
|
{
|
_images = images;
|
self.pageControl.numberOfPages = _images.count;
|
self.pageControl.currentPage = 0;
|
self.currentPage = 0;
|
if (!(images.count > 1)) {
|
[self openTimer:NO];
|
self.pageControl.hidden = YES;
|
}else{
|
[self openTimer:YES];
|
self.pageControl.hidden = NO;
|
}
|
[self refreshImage];
|
self.imageScroView.scrollEnabled = _images.count>1;
|
}
|
|
-(void)setShowPageControl:(BOOL)showPageControl{
|
_showPageControl = showPageControl;
|
self.pageControl.hidden = !showPageControl;
|
}
|
|
|
-(YYAnimatedImageView * )curentImageView{
|
return self.middleImageView;
|
}
|
|
-(void)dealloc{
|
//NSLog(@"BSKImagesPageView-Delloc");
|
[self.timer invalidate];
|
}
|
|
|
@end
|