亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

IOS開發之UIScrollView實現圖片輪播器的無限滾動

2020-01-26 14:01:19
字體:
來源:轉載
供稿:網友

IOS開發之UIScrollView實現圖片輪播器的無限滾動

簡介

在現在的一些App中常常見到圖片輪播器,一般用于展示廣告、新聞等數據,在iOS內并沒有現成的控件直接實現這種功能,但是通過UIScrollView的允許分頁設置,可以實現滾動輪播的功能。

輪播原理

UIScrollView對象有pagingEnable成員,如果設置為YES,那么每一個scrollView尺寸這么大的區域就會被當作一頁,在滾動時會根據滾動的比例自動計算應該切換到哪一頁。

無限滾動原理

要實現無限滾動,需要額外的兩張圖片,假設我們的圖片有五張,存在images數組中,那么我們在將圖片插入到scrollView中時,在第一張圖片前面插入一個最后一張圖片作為輔助圖片,在最后一張后面插入一個第一張圖片作為輔助圖片。這樣,當滾動到第一張前面一張時,在頁面切換結束后無動畫的切換scrollView的偏移量為最后一張圖片(不包含最后一張后面的第一張那個輔助圖片),這樣就實現了由輔助圖片到真實圖片的過渡,之所以設置輔助圖片是為了在滾動中看到那個真實圖片。同理,當滾動到最后一張的后面一張時,我們吧scrollView的偏移量設置為第一張圖片即可。

具體的代碼實現

這個代碼是在開發一個項目中所寫的,已經封裝稱一個View,只需要調用initWithFrame指定輪播器尺寸,然后通過設置images成員的值即可實現無限滾動的輪播。

// .h//// ESPicPageView.h// 享技//// Created by 11 on 11/30/15.// Copyright © 2015 soulghost. All rights reserved.//#import <UIKit/UIKit.h>@interface ESPicPageView : UIView@property (nonatomic, strong) NSArray *images;@end// --------------------------------------------// .m//// ESPicPageView.m// 享技//// Created by 11 on 11/30/15.// Copyright © 2015 soulghost. All rights reserved.//#import "ESPicPageView.h"#import "UIImageView+WebCache.h"@interface ESPicPageView () <UIScrollViewDelegate>@property (nonatomic, weak) UIScrollView *scrollView;@property (nonatomic, weak) UIPageControl *pageControl;@property (nonatomic, assign) CGFloat imgW;@property (nonatomic, assign) CGFloat imgH;@property (nonatomic, strong) NSTimer *timer;@property (nonatomic, strong) NSArray *imageViews;@property (nonatomic, assign) NSInteger imageCount;@end@implementation ESPicPageView- (instancetype)initWithFrame:(CGRect)frame{  if (self = [super initWithFrame:frame]) {    self.backgroundColor = [UIColor blueColor];    UIScrollView *scrollView = [[UIScrollView alloc] init];    self.scrollView = scrollView;    self.scrollView.delegate = self;    self.scrollView.pagingEnabled = YES;    self.scrollView.showsHorizontalScrollIndicator = NO;    self.scrollView.backgroundColor = [UIColor whiteColor];    [self addSubview:scrollView];    self.imgW = frame.size.width;    self.imgH = frame.size.height;    [self setNeedsLayout];    UIPageControl *pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(frame.size.width - 50, frame.size.height - 10, 0, 0)];    self.pageControl = pageControl;    self.pageControl.numberOfPages = 1;    [self addSubview:pageControl];    self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];  }  return self;}- (void)nextImage{  NSInteger page = self.pageControl.currentPage;  page = self.pageControl.currentPage + 1;  CGPoint offset = CGPointMake((1 + page) * self.imgW, 0);  [self.scrollView setContentOffset:offset animated:YES];}- (void)setupImageViews{  for (int i = 0; i < self.images.count + 2; i++) {    UIImageView *imageView = [[UIImageView alloc] init];    CGFloat imageX = i * self.imgW;    CGFloat imageY = 0;    CGFloat imageW = self.imgW;    CGFloat imageH = self.imgH;    imageView.frame = CGRectMake(imageX, imageY, imageW,imageH);    [self.scrollView insertSubview:imageView atIndex:0];  }}- (NSArray *)imageViews{  if (_imageViews == nil) {    NSMutableArray *arr = [NSMutableArray array];    for (int i = 0; i < self.images.count + 2; i++) {      UIImageView *imageView = [[UIImageView alloc] init];      CGFloat imageX = i * self.imgW;      CGFloat imageY = 0;      CGFloat imageW = self.imgW;      CGFloat imageH = self.imgH;      imageView.frame = CGRectMake(imageX, imageY, imageW,imageH);      [self.scrollView insertSubview:imageView atIndex:0];      [arr addObject:imageView];    }    _imageViews = arr;  }  return _imageViews;}- (void)setImages:(NSArray *)images{  _images = images;  self.imageCount = images.count;  self.pageControl.numberOfPages = self.imageCount;  [self addPics];}- (void)addPics{  for (int i = 0; i < self.images.count + 2; i++) {    UIImageView *imageView = self.imageViews[i];    if (i == 0) {      imageView.image = [self.images lastObject];    }else if(i == self.images.count + 1){      imageView.image = [self.images firstObject];    }else{      imageView.image = self.images[i - 1];    }  }}- (void)layoutSubviews{  [super layoutSubviews];  self.scrollView.frame = self.bounds;  self.scrollView.contentSize = CGSizeMake((self.imageCount + 2) * self.imgW, 0);  [self.scrollView setContentOffset:CGPointMake(self.imgW, 0) animated:NO];}- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{  [self.timer invalidate];  self.timer = nil;}- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{  self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];  [[NSRunLoop currentRunLoop ] addTimer:self.timer forMode:NSRunLoopCommonModes];}- (void)scrollViewDidScroll:(UIScrollView *)scrollView{  if (scrollView.contentOffset.x == self.imgW * (self.imageCount + 1)) {    [self.scrollView setContentOffset:CGPointMake(self.imgW, 0) animated:NO];  }else if(scrollView.contentOffset.x == 0){    [self.scrollView setContentOffset:CGPointMake(self.imgW * (self.imageCount), 0) animated:NO];  }  self.pageControl.currentPage = (self.scrollView.contentOffset.x + self.imgW * 0.5f) / self.imgW - 1;}@end

以上就是使用UIScrollView實現圖片的輪播的功能,如有疑問大家可以留言,也可以到本站社區留言討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美视频二区36p| 中文字幕国产精品久久| 国产视频精品自拍| 日韩大片免费观看视频播放| 久久91亚洲人成电影网站| 亚洲第五色综合网| 亚洲欧美精品中文字幕在线| 日韩电视剧免费观看网站| 性金发美女69hd大尺寸| 免费av一区二区| 欧美在线免费看| 亚洲精品女av网站| 亚洲性生活视频在线观看| 国产精品久久久久久久av大片| 国产精品精品久久久久久| 国产一区二区三区高清在线观看| 亚洲国产精品高清久久久| 在线视频中文亚洲| 日韩精品免费在线观看| 国产成人小视频在线观看| 亚洲经典中文字幕| 国产欧美日韩丝袜精品一区| 久久精品免费播放| 亚洲人成自拍网站| 伦伦影院午夜日韩欧美限制| 国内精品中文字幕| 亚洲天堂av在线免费| 欧美日韩一区二区免费视频| 91豆花精品一区| 国产成人精品视频| 国产精品美女午夜av| 欧美午夜性色大片在线观看| 国产亚洲激情视频在线| 俺去啦;欧美日韩| 欧美成人精品在线| 68精品国产免费久久久久久婷婷| 欧美寡妇偷汉性猛交| 亚洲最新av在线| 亚洲精品动漫100p| 日韩毛片在线观看| 日韩精品极品在线观看| 青草青草久热精品视频在线网站| 亚洲精品一区二三区不卡| 亚洲欧美三级伦理| 51精品在线观看| 97成人精品视频在线观看| 大伊人狠狠躁夜夜躁av一区| 中文字幕亚洲综合久久筱田步美| 久久精品美女视频网站| 亚洲另类欧美自拍| 亚洲在线一区二区| 孩xxxx性bbbb欧美| 国产欧美精品一区二区三区-老狼| 久久精品国产免费观看| 91精品在线一区| 亚洲国产古装精品网站| 日韩精品免费在线| 国产精品爱久久久久久久| 日韩成人av在线播放| 中文在线资源观看视频网站免费不卡| 成人精品在线视频| 国产亚洲精品久久久优势| 国产精品免费久久久久影院| 日韩中文第一页| 这里只有精品视频| 国产做受高潮69| 91精品视频在线| 日本午夜在线亚洲.国产| 午夜精品www| 911国产网站尤物在线观看| 久久久久久91| 欧美午夜影院在线视频| 在线视频欧美日韩精品| 亚洲综合国产精品| 日韩欧美视频一区二区三区| 黑人巨大精品欧美一区免费视频| 亚洲人永久免费| 日韩国产欧美精品一区二区三区| 欧美老肥婆性猛交视频| 国产女精品视频网站免费| 日韩亚洲精品电影| 久久天天躁日日躁| 中文字幕亚洲欧美日韩在线不卡| 国产一区二区欧美日韩| 成人a级免费视频| 91麻豆国产语对白在线观看| 91久久精品久久国产性色也91| 欧美怡红院视频一区二区三区| 日韩欧美中文免费| 欧美亚洲国产视频小说| 久久久久久九九九| 国产成人激情小视频| 亚洲免费视频一区二区| 亚洲欧美视频在线| 亚洲无av在线中文字幕| 日韩欧美在线播放| 亚洲日韩欧美视频一区| 精品久久久国产精品999| 国产精品美女久久久久久免费| 在线看日韩av| 久久夜色精品国产| 久久久久久国产精品三级玉女聊斋| 亚洲级视频在线观看免费1级| 成人激情黄色网| 在线视频精品一| 国产精品嫩草影院一区二区| 欧美午夜美女看片| 午夜精品久久久久久久男人的天堂| 亚洲视频axxx| 在线观看91久久久久久| 国产成人精品av| 这里只有视频精品| 久久久免费av| 国产精品精品一区二区三区午夜版| 亚洲一区二区三区毛片| 亚洲精品在线观看www| 伊人久久久久久久久久久| 亚洲欧洲在线看| 91亚洲国产精品| 欧美午夜片欧美片在线观看| 午夜精品久久久久久99热软件| 91沈先生作品| 日本亚洲精品在线观看| 精品国产乱码久久久久久婷婷| 亚洲午夜性刺激影院| 欧美性猛交xxxx黑人猛交| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲美女av黄| 久久影视三级福利片| 上原亚衣av一区二区三区| 国产精品欧美一区二区三区奶水| 亚洲综合视频1区| 欧美在线性爱视频| 亚洲女人天堂色在线7777| 中文字幕日韩精品有码视频| 欧美日韩激情美女| 亚洲视频一区二区| 亚洲免费伊人电影在线观看av| 久久精品久久久久电影| 国产精品久久99久久| 91久久久久久久一区二区| 亚洲第一页在线| 中文字幕欧美日韩va免费视频| 国产97在线视频| 亚洲精品在线不卡| 欧美精品免费播放| 欧亚精品在线观看| 亚洲伊人久久综合| 国产亚洲欧洲在线| 亚洲免费小视频| 高清视频欧美一级| 亚洲国产成人爱av在线播放| 久久亚洲精品一区| 亚洲精品日韩丝袜精品| 久久国产加勒比精品无码| 韩国精品美女www爽爽爽视频| 国产亚洲欧美日韩精品| 国产精品爽爽ⅴa在线观看| 日韩av电影手机在线观看| 国产精品国产亚洲伊人久久| 国产精品免费视频xxxx| 欧美黑人性猛交| 日韩亚洲在线观看| 欧美日本啪啪无遮挡网站|