欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

IOS開發(fā)之UIScrollView如何實現(xiàn)圖片輪播器的無限滾動-創(chuàng)新互聯(lián)

這篇文章主要介紹IOS開發(fā)之UIScrollView如何實現(xiàn)圖片輪播器的無限滾動,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

目前成都創(chuàng)新互聯(lián)已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機、網(wǎng)站托管維護、企業(yè)網(wǎng)站設(shè)計、稱多網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

IOS開發(fā)之UIScrollView實現(xiàn)圖片輪播器的無限滾動

簡介

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

輪播原理

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

無限滾動原理

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

具體的代碼實現(xiàn)

這個代碼是在開發(fā)一個項目中所寫的,已經(jīng)封裝稱一個View,只需要調(diào)用initWithFrame指定輪播器尺寸,然后通過設(shè)置images成員的值即可實現(xiàn)無限滾動的輪播。

// .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 &copy; 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

以上是“IOS開發(fā)之UIScrollView如何實現(xiàn)圖片輪播器的無限滾動”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站aaarwkj.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

新聞名稱:IOS開發(fā)之UIScrollView如何實現(xiàn)圖片輪播器的無限滾動-創(chuàng)新互聯(lián)
本文鏈接:http://aaarwkj.com/article42/csoghc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、App開發(fā)、標簽優(yōu)化、ChatGPT、網(wǎng)站建設(shè)、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
久久精品二区亚洲w码| 日韩免费在线观看av| 扒开少妇毛茸茸的大荫萍蒂| 黄色片在线观看中文字幕| 精品久久人人做爽综合| 青草成人在线视频观看| 亚洲成人av在线播放观看| 亚洲天堂欧美天堂淫人天堂| 久久av少妇亚洲精品| 亚洲一区二区三区在线观看| 久久免费国产精品电影| 国产原创av剧情在线观看| av人妻熟女少妇蒂亚| 日韩国产推荐一区二区| 日本午夜激情一区二区| 亚洲精品主播一区二区三区| 国产精品一级自拍视频| 亚洲精品中文字幕久久| 久久精品国产亚洲av麻豆尤物| 欧美国产日韩在线一区二区三区| 欧美日韩精品亚洲成人精品| 黄色av福利在线网站| 欧美日韩黄色在线观看| 成人在线免费观看视频国产| 深夜释放自己污在线看| 人妻系列少妇人妻偷人| 人妻少妇被猛烈进入久久精品| 麻豆印象传媒在线观看| 亚洲成人av福利网站| 亚洲国产av国产av| 国产亚洲一区二区三区午夜| 日韩精品中文字幕欧美激情 | 亚洲男人天堂黄色av| 亚洲精品在线观看日本| 日日夜夜久久一二三区| 黄色录像三级黄色录像三级黄色| 国产另类极品熟女露脸自拍| 91好色视频在线观看| 99热这里只有精品在线| 亚洲av久久一区二区| 亚洲精品理论片在线观看|