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

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è)
久久精品国产亚洲av超一| 亚洲av男人的天堂看| 亚洲六月丁香六月婷婷| 欧美激情另类综合国内| 老司机午夜视频在线观看| 欧美二区三区精品在线| 亚洲精品a在线观看av| 91免费视频精品麻豆| 日本h电影一区二区三区| 亚洲激情欧美激情在线| 久久精品一品二品三品| 日韩在线免费色视频| 日本国内一区二区三区四区视频 | 一区二区亚洲免费的视频| 国产精品一区二区高潮| 人妻中字幕出轨中文字幕| 欧美午夜福利一级高清| 一级黄片一区二区三区| jk黑丝白丝国产精品| 中文字幕五月久久婷热| 成年人国产免费在线观看| 国产91对白在线观看| 国产日韩欧美另类专区| 怡红院怡春院视频免费看| 日韩欧美一区二区大片| 日韩中文不卡人成在线视频| 精品一区二区三区高清| 夫妻性生活短是什么原因| 91九色国产在线播放| 日本三卡=卡无人区| 亚洲成年人黄色在线观看| av男人的天堂在线免费| 人妻的秘密一区二区三区| 欧美日韩加勒比综合在线| 偷拍福利视频一区二区三区| 欧美黄色成人免费网站| 国产女人高潮流白丝视频| 国产精品一区二区三区乱色| 日本a级免费大片网站| 久激情内射婷内射蜜桃| 欧美日韩在线观看黄色|