美文网首页
UIScrollView 实现循环轮播图

UIScrollView 实现循环轮播图

作者: 蛮大人_3b6c | 来源:发表于2018-04-25 10:18 被阅读0次

    //

    //  ViewController.m

    //  UCTestAutoScroll

    //

    //  Created by heju on 2018/4/20

    #define UC_TEST_SCROLLVIEW_WITH250

    #define UC_TEST_SCROLLVIEW_HEIGHT60

    #import "ViewController.h"

    #define card_page_conrol_width70

    #define card_page_control_height10

    #define card_page_control_bottom_margin20

    @interface ViewController ()

    @property (nonatomic,strong)UIScrollView *scrollview;

    @property (nonatomic,strong)UIPageControl *pageControl;

    @property (nonatomic,strong)NSTimer *timer;

    @property (nonatomic,strong)NSMutableArray *items;

    @property (nonatomic, assign) int currentIndex;

    @property (nonatomic,assign) CGSize viewSize;

    @end

    @implementation ViewController

    - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view, typically from a nib.

        self.view.backgroundColor = [UIColor grayColor];

        _currentIndex = 0;

        [self setupSubView];

    }

    - (NSMutableArray *)items{

        if(_items==nil) {

            _items= [@[@"1",@"2",@"3"]mutableCopy];

        }

        return _items;

    }

    - (void)setupSubView {

        _viewSize = self.view.frame.size;

        _scrollview = [[UIScrollView alloc] initWithFrame: CGRectMake(0, 200, _viewSize.width,100)];

        _scrollview.showsVerticalScrollIndicator = NO;

        _scrollview.showsHorizontalScrollIndicator = NO;

        _scrollview.delegate = self;

        _scrollview.scrollEnabled = YES;

        _scrollview.pagingEnabled = YES;

        _scrollview.bounces = NO;

        _scrollview.backgroundColor = [UIColor yellowColor];

        [self.view addSubview:_scrollview];

        _pageControl= [[UIPageControlalloc]init];

        _pageControl.frame = CGRectMake((_viewSize.width - card_page_conrol_width)/2 ,280,card_page_conrol_width,card_page_control_height);

        _pageControl.numberOfPages = 3;

        _pageControl.currentPageIndicatorTintColor =[UIColor purpleColor];

        _pageControl.pageIndicatorTintColor = [UIColor yellowColor]  ;

        _pageControl.currentPage = 0;

        [_pageControl addTarget:self action:@selector(changePage:)forControlEvents:UIControlEventValueChanged];

        _pageControl.backgroundColor = [UIColor grayColor];

        [self.view addSubview:_pageControl];

        _scrollview.contentSize = CGSizeMake(_viewSize.width * [self.items count], _viewSize.height);

        for(NSIntegeri =0; i <= [self.itemscount]; i++)

        {

            UIImageView*itemImageView = [[UIImageViewalloc]initWithFrame:CGRectMake(i*_viewSize.width,0,_viewSize.width,100)];

            if(i ==3) {

                [itemImageViewsetImage:[selfimageWithName:self.items[0]andType:@"jpg"]];

            }else{

                [itemImageViewsetImage:[selfimageWithName:self.items[i]andType:@"jpg"]];

            }

            itemImageView.userInteractionEnabled=YES;

            [self.scrollviewaddSubview:itemImageView];

        }

        /*自动轮播*/

        [self setupTimer];

    }

    - (void)setupTimer {

        [self invalidateTimer]; // 创建定时器前先停止定时器,不然会出现僵尸定时器,导致轮播频率错误

        self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(automaticScroll) userInfo:nil repeats:YES];

        [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

    }

    - (void)automaticScroll {

        if (self.currentIndex >= self.items.count) {

            self.currentIndex=1;

        }else{

            self.currentIndex+=1;

        }

        [self.scrollview setContentOffset:CGPointMake(_viewSize.width * self.currentIndex, 0) animated:YES];

    }

    - (void)invalidateTimer

    {

        if(self.timer!=nil) {

            [self.timerinvalidate];

            self.timer=nil;

        }

    }

    #pragma mark UIScrollViewDelegate Method

    - (void)scrollViewWillBeginDragging:(UIScrollView*)scrollView

    {

        [self invalidateTimer];

    }

    - (void)scrollViewDidScroll:(UIScrollView*)scrollView

    {

        intpage = scrollView.contentOffset.x/ scrollView.frame.size.width;

        _pageControl.currentPage= page;

    }

    - (void)scrollViewDidEndDragging:(UIScrollView*)scrollView willDecelerate:(BOOL)decelerate

    {

        [self setupTimer];

    }

    - (void)scrollViewDidEndScrollingAnimation:(UIScrollView*)scrollView {

        if (self.currentIndex >= self.items.count) {

            [scrollViewsetContentOffset:CGPointMake(0, 0) animated:NO];

        }

    }

    - (void)changePage:(UIPageControl*)sender {

        intpage = (int)sender.currentPage;

        [_scrollview setContentOffset:CGPointMake(page *self.viewSize.width , 0) animated:YES];

    }

    - (UIImage*)imageWithName:(NSString*)name andType:(NSString*)type {

        if(name.length>0&& type.length>0) {

            NSString*imagePath = [[NSBundlemainBundle]pathForResource:nameofType:type];

            UIImage*image = [UIImageimageWithContentsOfFile:imagePath];

            returnimage;

        }

        return nil;

    }

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

    @end

    相关文章

      网友评论

          本文标题:UIScrollView 实现循环轮播图

          本文链接:https://www.haomeiwen.com/subject/hlyelftx.html