移動設備的屏幕⼤大⼩小是極其有限的,所以直接展⽰示在⽤用戶眼前的內容也至關有限ide
當展⽰示的內容較多,超出⼀一個屏幕時,⽤用戶可經過滾動⼿手勢來查看屏幕之外的內容oop
普通的UIView不具有滾動功能,不能顯⽰示過多的內容性能
UIScrollView是⼀一個可以滾動的視圖控件,能夠⽤用來展⽰示⼤大量的內容,而且能夠經過滾 動查看全部的內容 atom
要想完成上述功能,前提條件就是可以監聽到UIScrollView的整個滾動過程spa
• 當UIScrollView發⽣生⼀一系列的滾動操做時, 會⾃自動通知它的代理(delegate)對象,給設計
它的代理髮送相應的消息,讓代理得知它的滾動狀況
• 也就是說,要想監聽UIScrollView的滾動過程,就必須先給UIScrollView設置⼀一個代理 3d
對象,而後經過代理得知UIScrollView的滾動過程 代理
UIScrollView的常⻅見屬性code
• @property(nonatomic)CGPointcontentOffset; ➢ 這個屬性⽤用來表⽰示UIScrollView滾動的位置orm
• @property(nonatomic)CGSizecontentSize;
➢ 這個屬性⽤用來表⽰示UIScrollView內容的尺⼨寸,滾動範圍(能滾多遠)
• @property(nonatomic)UIEdgeInsetscontentInset; ➢ 這個屬性可以在UIScrollView的4周增長額外的滾動區域
//Scroll View屬性
@property (weak, nonatomic) IBOutlet UIScrollView *ScllView;
//pageControl屬性
@property (weak, nonatomic) IBOutlet UIPageControl *PageControl;
//建立UIImageView在Scrool view中的位置 //W.H,Y值對是同樣的,但每一個UIImageView的X值就會不同了 CGFloat FloatW=self.ScllView.frame.size.width; CGFloat FloatH=self.ScllView.frame.size.height; CGFloat FloatY=0; //這裏5張圖片寫死了,循環全部圖片 //建立UIimageView,而後設置每一個UIimageView的位置, for (int i=0; i<imageCont; i++) { UIImageView *imageView=[[UIImageView alloc] init]; //計算X值, CGFloat FloatX=i*FloatW; imageView.frame=CGRectMake(FloatX, FloatY, FloatW, FloatH); NSString *imagename=[NSString stringWithFormat:@"img_0%i",i+1]; imageView.image=[UIImage imageNamed:imagename]; //把UIImageView增長到Scroll View中 [self.ScllView addSubview:imageView]; }
在這裏最主要的就是要計算每一個UIiamgeView的X值了,其實X值也簡單由於每一個圖片的W值和Scroll View同樣,因此每一個UIiamgeView的X值就能夠*ScllView.frame.size.width值就能夠了。
2.7這樣咱們就把圖片所有加到視圖上的Scroll View 中了,而後就要讓Scrool View裏面的圖片能夠滑動,要讓Scrool View裏面的圖片能夠滑動,咱們就要用到代理,用到代理就要導入UIScrollViewDelegate,以下:
@interface ViewController ()<UIScrollViewDelegate>
導入完UIScrollViewDelegate後,而後設置Scrool View相對應的屬性:
PagingEnabled這個分頁的屬性是每一次滑動都是滑動一整個圖片,讓屏幕只能顯示一張完整的圖片,
同時設置視圖中page control控件的個數,固然這個個數和圖片的個數是同樣多的。
//2.滾動視圖的內容的大小 self.ScllView.contentSize=CGSizeMake(FloatW *imageCont, 0); //去掉水平指示器 self.ScllView.showsHorizontalScrollIndicator=NO; //設置分頁 self.ScllView.pagingEnabled=YES; //設置pageControl顯示的頁數 self.PageControl.numberOfPages=imageCont;
2.8 作完這些,屏幕上的圖片就可能自由的滑動了,但有個小問題是屏幕上的page control這個控件不會當屏幕圖片變更時也跟着變更,
這個如何實現呢?這個要在代理方法中來作,以下:
//設置代理
self.ScllView.delegate=self;
//代理方法 //代理自帶方法,視圖正在滾動的時候一直在執行 -(void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat scrolViewW=self.ScllView.frame.size.width; CGFloat pageCount=(self.ScllView.contentOffset.x+scrolViewW *0.5)/scrolViewW; self.PageControl.currentPage=pageCount; }
這樣,整個圖片播放器就OK了,下面再來作個定時播放功能,當程序起動時,自動播放,多的不說了,直接上全部代碼:以下
#import "ViewController.h" #define imageCont 5 @interface ViewController ()<UIScrollViewDelegate> //Scroll View屬性 @property (weak, nonatomic) IBOutlet UIScrollView *ScllView; //pageControl屬性 @property (weak, nonatomic) IBOutlet UIPageControl *PageControl; //定時器 @property(strong,nonatomic)NSTimer *timer; @end @implementation ViewController //去掉手機最上面的狀態顯示 -(BOOL)prefersStatusBarHidden { return YES; } - (void)viewDidLoad { [super viewDidLoad]; //建立UIImageView在Scrool view中的位置 //W.H,Y值對是同樣的,但每一個UIImageView的X值就會不同了 CGFloat FloatW=self.ScllView.frame.size.width; CGFloat FloatH=self.ScllView.frame.size.height; CGFloat FloatY=0; //這裏5張圖片寫死了,循環全部圖片 //建立UIimageView,而後設置每一個UIimageView的位置, for (int i=0; i<imageCont; i++) { UIImageView *imageView=[[UIImageView alloc] init]; //計算X值, CGFloat FloatX=i*FloatW; imageView.frame=CGRectMake(FloatX, FloatY, FloatW, FloatH); NSString *imagename=[NSString stringWithFormat:@"img_0%i",i+1]; imageView.image=[UIImage imageNamed:imagename]; //把UIImageView增長到Scroll View中 [self.ScllView addSubview:imageView]; } //2.滾動視圖的內容的大小 self.ScllView.contentSize=CGSizeMake(FloatW *imageCont, 0); //去掉水平指示器 self.ScllView.showsHorizontalScrollIndicator=NO; //設置分頁 self.ScllView.pagingEnabled=YES; //設置pageControl顯示的頁數 self.PageControl.numberOfPages=imageCont; //設置代理 self.ScllView.delegate=self; [self addTime]; } //建立定時器方法 -(void)addTime{ self.timer=[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES ]; [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; } //移除計時器 -(void)removeTime{ [self.timer invalidate]; self.timer = nil; } -(void)nextPage{ int page=0; if(self.PageControl.currentPage==imageCont-1) { page=0; } else { page=self.PageControl.currentPage+1; } CGPoint point=CGPointMake(page *self.ScllView.frame.size.width, 0); //設置Scroll View 要顯示的圖片 [self.ScllView setContentOffset:point animated:YES]; } //代理方法 //代理自帶方法,視圖正在滾動的時候一直在執行 -(void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat scrolViewW=self.ScllView.frame.size.width; CGFloat pageCount=(self.ScllView.contentOffset.x+scrolViewW *0.5)/scrolViewW; self.PageControl.currentPage=pageCount; } -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ //會將計時器永久關掉 [self removeTime]; } -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)d{ [self addTime]; } @end