123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- //
- // AutoScView.m
- // 丰生活
- //
- // Created by 隋林栋 on 16/1/25.
- // Copyright © 2016年 Sl. All rights reserved.
- //
- #import "AutoScView.h"
- //big image
- #import "ImageDetailBigView.h"
- //网络加载图片
- #import <SDWebImage/UIImageView+WebCache.h>
- @interface AutoScView()<UIScrollViewDelegate>
- @property (nonatomic, strong) UIScrollView * scView;
- @property (nonatomic, strong) UIPageControl * pageControl;
- @property (strong, nonatomic) UIButton *labelNum;
- @end
- @implementation AutoScView
- @synthesize pageCurrentColor = _pageCurrentColor;
- @synthesize pageDefaultColor = _pageDefaultColor;
- #pragma mark lazy init
- -(UIButton *)labelNum{
- if (_labelNum == nil) {
- _labelNum = [UIButton buttonWithType:UIButtonTypeCustom];
- _labelNum.backgroundColor = [UIColor colorWithHexString:@"#000000" alpha:0.4];
- _labelNum.titleLabel.font = [UIFont systemFontOfSize:F(10)];
- [GlobalMethod setRoundView:_labelNum color:[UIColor clearColor] numRound:W(22)/2 width:0];
- _labelNum.widthHeight = XY(W(40),W(22));
- [_labelNum setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)];
- }
- return _labelNum;
- }
- - (void)setPageControlToBottom:(CGFloat)pageControlToBottom{
- _pageControlToBottom = pageControlToBottom;
- _pageControl.centerXBottom = XY(self.width/2.0,self.height-pageControlToBottom);
- }
- - (UIColor *)pageCurrentColor{
- if (!_pageCurrentColor) {
- _pageCurrentColor = COLOR_PAGEBACK;
- }
- return _pageCurrentColor;
- }
- - (void)setPageCurrentColor:(UIColor *)pageCurrentColor{
- _pageCurrentColor = pageCurrentColor;
- _pageControl.currentPageIndicatorTintColor = pageCurrentColor;
- }
- - (UIColor *)pageDefaultColor{
- if (!_pageDefaultColor) {
- _pageDefaultColor = COLOR_CURRENTPAGE;
- }
- return _pageDefaultColor;
- }
- -(void)setPageDefaultColor:(UIColor *)pageDefaultColor{
- _pageDefaultColor = pageDefaultColor;
- _pageControl.pageIndicatorTintColor = pageDefaultColor;
- }
- - (NSMutableArray *)aryImage{
- if (!_aryImage) {
- _aryImage = [NSMutableArray new];
- }
- return _aryImage;
- }
- - (UIScrollView *)scView{
- if (!_scView) {
- //添加sc
- _scView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, self.width, self.height)];
- _scView.delegate = self;
- _scView.pagingEnabled = YES;
- _scView.showsHorizontalScrollIndicator = NO;
- _scView.showsVerticalScrollIndicator = NO;
- _scView.backgroundColor = [UIColor whiteColor];
- _scView.bounces = NO;
- _scView.contentSize = CGSizeMake(CGRectGetWidth(self.frame)*3, 0);
- }
- return _scView;
- }
- - (UIPageControl *)pageControl{
- if (!_pageControl) {
- _pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, 0, self.width, W(30)) ];
- _pageControl.currentPage = 0;
- _pageControl.backgroundColor = [UIColor clearColor];
- }
- return _pageControl;
- }
- #pragma mark init
- - (instancetype)initWithFrame:(CGRect)frame{
- self = [super initWithFrame:frame];
- if (self) {
- [self addSuview];
- }
- return self;
- }
- - (instancetype)initWithFrame:(CGRect)frame image:(NSArray *)aryImage{
- self = [super initWithFrame:frame];
- if (self ) {
- [self addSuview];
- //refresh rect
- [self resetWithImageAry:aryImage];
- }
- return self;
- }
- - (void)addSuview{
- self.backgroundColor = [UIColor whiteColor];
- self.isClickValid = true;
- //add subview
- [self addSubview:self.scView];
- [self addSubview:self.pageControl];
- [self addSubview:self.labelNum];
- }
- #pragma mark resetView
- - (void)resetWithImageAry:(NSArray *)aryImage{
- self.aryImage = aryImage.mutableCopy;
- //reset sc
- self.scView.widthHeight = XY(self.width, self.height);
- self.scView.contentSize = CGSizeMake(CGRectGetWidth(self.frame)*3, 0);
-
- //reset control
- self.pageControl.currentPageIndicatorTintColor = self.pageCurrentColor;
- self.pageControl.pageIndicatorTintColor = self.pageDefaultColor;
- self.pageControl.numberOfPages = self.aryImage.count;
- self.pageControl.hidden = _pageControl.numberOfPages <= 1;
- self.pageControl.width = self.width;
- self.pageControl.centerXBottom = XY(self.width/2.0,self.height-self.pageControlToBottom);
- CGSize pointSize = [self.pageControl sizeForNumberOfPages:self.aryImage.count];
- CGFloat page_x = -(self.pageControl.bounds.size.width - pointSize.width) / 2 ;
- [self.pageControl setBounds:CGRectMake(page_x + 10, self.pageControl.bounds.origin.y,
- self.pageControl.bounds.size.width, self.pageControl.bounds.size.height)];
-
- [_labelNum setTitle:[NSString stringWithFormat:@" %@",[NSString stringWithFormat:@" %d/%ld ",self.numNow+1,self.aryImage.count]] forState:(UIControlStateNormal)];
- self.labelNum.rightBottom = XY(self.width-W(15),self.height-W(10));
- self.labelNum.hidden = self.isShowNum;
- [self resetImageAnimated:NO];
-
- }
- #pragma mark 布置图片
- - (void)resetImageAnimated:(BOOL)animated{
- if (!isAry(self.aryImage))return;
- [self.scView removeAllSubViews];
- self.numNow = self.numNow<0?self.numNow+(int)self.aryImage.count:self.numNow;
- int numTmp =self.numNow-1<0?(int)self.aryImage.count-1+self.numNow:self.numNow-1;
- int numFirst = numTmp%self.aryImage.count;
- int numSec = self.numNow%self.aryImage.count;
- int numThird = (self.numNow+1)%self.aryImage.count;
-
- [self addImage:numFirst index:0];
- [self addImage:numSec index:1];
- [self addImage:numThird index:2];
- [self.scView setContentOffset:CGPointMake(CGRectGetWidth(self.frame), 0) animated:animated];
- self.pageControl.currentPage = numSec;
- [_labelNum setTitle:[NSString stringWithFormat:@" %@",[NSString stringWithFormat:@" %d/%ld ",numSec+1,self.aryImage.count]] forState:(UIControlStateNormal)];
- if (self.blockNum) {
- self.blockNum(self.aryImage.count,numSec+1);
- }
- }
- - (void)addImage:(NSUInteger)num index:(int)index{
- UIImageView * iv = [[UIImageView alloc]initWithFrame:CGRectMake(index*CGRectGetWidth(self.frame), 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame))];
- iv.backgroundColor = [UIColor clearColor];
- if (self.aryImage.count<=num) {
- return;
- }
- id imgStr = self.aryImage[num];
- if ([(imgStr) isKindOfClass:[NSString class]]) {
- iv.image = [UIImage imageNamed:self.aryImage[num]];
- }else{
- iv.image = self.aryImage[num];
- }
- // iv.image = [UIImage imageNamed:self.aryImage[num]];
- // iv.contentMode = UIViewContentModeScaleAspectFit;
- if (iv.image == nil) {
- if (self.isShowProductImageStyle) {
- [iv sd_setProductImageWithURL:[NSURL URLWithString:self.aryImage[num]] placeholderImage:[UIImage imageNamed:IMAGE_BIG_DEFAULT]];
- }else{
- [iv sd_setImageWithURL:[NSURL URLWithString:self.aryImage[num]] placeholderImage:[UIImage imageNamed:IMAGE_BIG_DEFAULT] options:SDWebImageAllowInvalidSSLCertificates];
- }
- }
- iv.clipsToBounds = true;
- [iv addTarget:self action:@selector(imageClick:)];
- [self.scView addSubview:iv];
- }
- #pragma mark sc代理
- - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
- [self countNum];
-
- }
- - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
- if (decelerate ==NO) {
- [self countNum];
- }
- }
- - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
- {
- self.numNow++;
- [self resetImageAnimated:NO];
- }
- #pragma mark 重新计算
- - (void)countNum{
- _numTime = 1;
- if (self.scView.contentOffset.x<=5) {
- self.numNow--;
- [self resetImageAnimated:NO];
- }if (self.scView.contentOffset.x>=(CGRectGetWidth(self.frame)*2-5)) {
- self.numNow++;
- [self resetImageAnimated:NO];
- }
-
- }
- #pragma mark image click
- - (void)imageClick:(UITapGestureRecognizer *)tap{
- if (!isAry(self.aryImage)) return;
- if (!self.isClickValid) return;
- if (self.blockModel) {
- int numSec = self.numNow%self.aryImage.count;
- self.blockModel(self.aryImageModel[numSec]);
- }else if (self.blockCilck){
- int numSec = self.numNow%self.aryImage.count;
- self.blockCilck(self.aryImage[numSec]);
- } else{
- UIImageView * iv = (UIImageView *)tap.view;
- if (iv && [iv isKindOfClass:[UIImageView class]]) {
- ImageDetailBigView * detailView = [ImageDetailBigView new];
- int numSec = self.numNow%self.aryImage.count;
- for (id strImage in self.aryImage) {
- if ([strImage isKindOfClass:[UIImage class]]) {
- [GlobalMethod showAlert:@"预览期间不能查看"];
- return;
- }
- }
- [detailView resetView:^(){
- NSMutableArray * aryImages = [NSMutableArray new];
- for (NSString * strImage in self.aryImage) {
- ModelImage * model = [ModelImage new];
- model.url = strImage;
- [aryImages addObject:model];
- }
- return aryImages;
- }() isEdit:false index: numSec];
- [detailView showInView:[GB_Nav.lastVC view] imageViewShow:iv];
- }
- }
- }
- #pragma mark 定时器相关
- - (void)timerStart{
- //开启定时器
- if (_timer == nil) {
- _timer =[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(timerRun) userInfo:nil repeats:YES];
- }
- _numTime = 0;
- }
- - (void)timerRun{
- //每秒的动作
- if (_numTime >0) {
- //有人触碰 时间重置
- _numTime--;
- return;
- }
- [self.scView setContentOffset:CGPointMake(CGRectGetWidth(self.frame)*2, 0) animated:YES];
- }
- - (void)timerStop{
- //停止定时器
- if (self.timer != nil) {
- [self.timer invalidate];
- self.timer = nil;
- }
- }
- - (void)dealloc{
- [self timerStop];
- }
- @end
|