程式日誌--ios“頁面控制”程式

來源:互聯網
上載者:User

標籤:iphone30天精通   第13天+第14天的集合   

</pre>交代一下我做程式的工具:mac os x虛擬機器10.9.3         Xcode6         百度^-^         參考書iPhone30天精通:本程式是第13天+第14天的集合<p></p><p></p><p>這是參考書上的第13天的程式:書上的程式是為程式中的每一個視圖控制項頁面指定一個小圓點,並使用白色的原點來顯示當前頁面,點擊Page Control控制項上面的小圓點來引導程式翻頁。。。。但是,這種翻頁手段是在是不方便,所以頁面控制最好是滑動翻頁,接下來就做一個滑動和點擊小圓點都可以實現翻頁(UIScrollView和UIPageControl)的demo。</p><p></p><p>參考:http://www.gowhich.com/blog/522</p><p><span style="font-size:18px;"><span style="font-size:12px;">參考:http://blog.csdn.net/a351945755/article/details/8290552</span></span></p><p><span style="font-size:18px;"><span style="font-size:12px;"><span style="font-size:12px;"><span style="font-size:18px;"><span style="font-size:12px;"><span style="font-size:18px;"><span style="font-size:12px;">參考:</span></span></span></span>http://www.cnblogs.com/wendingding/p/3754210.html</span></span></span></p><p><span style="background-color:rgb(255,255,255)"><span style="font-size:18px;"><span style="font-size:12px;"><span style="font-size:12px;"></span></span></span></span></p><pre class="brush:cpp;toolbar:false"><span style="color:#009900;"><span style="font-size:18px;"><span style="font-size:12px;">參考:</span></span>http://blog.sina.com.cn/s/blog_87a824440101a0p5.html</span>

1.UIScrollView滾動視圖和UIPageControl分頁控制項的簡單應用

       




建立一個簡單的storyboard,在裡面添加一個UIViewContoller,在view裡面添加一個PageControl和一個ScrollView,並做連結。

//.h檔案

@property (strong, nonatomic) IBOutlet UIScrollView *pageScroll;//建立一個滾屏控制項的對象@property (strong, nonatomic) IBOutlet UIPageControl *pageControl;//建立小圓點控制項的對象

同時添加一個儲存要展示圖片的陣列變數

@property (strong, nonatomic) NSArray *photoList;- (IBAction)changePage:(id)sender;//建立人機互動的方法,監聽Page Control的value change事件

同時要加入

UIScrollViewDelegate

代理

基礎工作做完之後,開始我們的過程實現

初始化的工作如下:

- (void)viewDidLoad//視圖載入完成時調用的方法{    [super viewDidLoad];//預設語句// Do any additional setup after loading the view.    NSString *img1 = [[NSBundle mainBundle] pathForResource:@"bg_welcome1"                                                     ofType:@"png"];    NSString *img2 = [[NSBundle mainBundle] pathForResource:@"bg_welcome2"                                                     ofType:@"png"];    NSString *img3 = [[NSBundle mainBundle] pathForResource:@"bg_welcome3"                                                     ofType:@"png"];    //NSBundle其實是一個目錄類,其中包含程式中會使用到的資源,比像、聲音、編譯好的代碼、nib檔案等。    //對於mainbandel:在Finder中,一個應用程式看上去和其他檔案沒什麼區別,但是實際上它是一個包含了nib檔案,編譯代碼,以及其他資源的一個目錄,而我們把這個     目錄叫做程式的mainbandel。所以[NSBundle mainBundle]就是擷取本次project的目錄,而“pathForResource:檔案名稱 ofType:格式”方法就是擷取相應的檔案地址。    //綜上:擷取三個圖片的地址,並賦值給三個字串對象。        _photoList = [[NSArray alloc] initWithObjects:                  [UIImage imageWithContentsOfFile:img1],                  [UIImage imageWithContentsOfFile:img2],                  [UIImage imageWithContentsOfFile:img3],                  ,nil];    //“imageWithContentsOfFile:地址”方法是將地址所在圖片載入到UIImage對象上,然後由這些對象組成一個數組。(前三個數組元素)    //對於第四個數組元素,它調用程式本身的方法去得帶一個數組元素,後面再去講它。    //到現在為止,在視圖載入完成的時候,會產生一個裝有UIImage對象的數組。    NSInteger pageCount = [_photoList count];//建立了一個整形的對象,用來儲存數組裡面元素(圖片)的數量。    _pageControl.currentPage = 0;            //把第一個版面設定為當前頁面    _pageControl.numberOfPages = pageCount;  //設定一共有pageCount個頁面   //下面的代碼涉及到了OC裡面的一種類型CGRect                 _pageScroll.frame = CGRectMake(0.0,        //frame是該view在父view中的為止和大小。                                   0.0,        //CGRectMake定義(x,y,width,height)                                   320.0,                                   400.0);    _pageScroll.delegate = self;               //設定UIScrollView的代理為其對象本身。    for(NSInteger i=0;i<pageCount;i++)         //給每一個版面設定圖片    {        CGRect frame;                          //建立一個CGRect對象        frame.origin.x = _pageScroll.frame.size.width * i;        frame.origin.y = 0;        frame.size = _pageScroll.frame.size;    //這段代碼錶示以前面的pageScroll的尺寸為模板,縱座標不變,橫座標一次向右移動pageScroll的size,相當於以相同                                                //的大小,將這幾個圖片拼接起來,第一個圖片的橫縱座標都是0,因為0*width = 0;
                //這裡又出現了新的知識點:UIImageView的contentMode屬性        //這個屬性是用來設定圖片的顯示方式,如局中局右是否顯示縮放等    參考:http://blog.csdn.net/sqc3375177/article/details/17415635        //UIViewContentModeScaleAspectFill作用是圖片的比例保持不變,但是填充整個ImageView的內容可能會只顯示部分,有部分顯示不出來。        //因為前面對這些圖片的操作只是從project裡面以ImageView形式儲存到數組裡面,並沒有對圖片的大小做出規範,所以現在對UIImageView的frame做出規範,並且控        //制屬性,滿足圖片比例的同時填充滿UIImageView

       UIImageView *pageView;
pageView.frame = frame;
        pageView.contentMode = UIViewContentModeScaleAspectFill;
  pageView = [[UIImageView alloc] initWithImage:[_photoList objectAtIndex:i]];//得到數組裡面的圖片對象(UIImageView對象的圖片)        [_pageScroll addSubview:pageView];//addSubview方法將UIImageView加到UIScrollView上面    }}-(void) viewWillAppear:(BOOL)animated //系統預設的方法,視圖將要出現時調用的{ //下面的代碼就是把UIScrollView的尺寸設定成幾個UIImageView拼接成之後的尺寸    CGSize pageScrollViewSize = _pageScroll.frame.size;    _pageScroll.contentSize = CGSizeMake(pageScrollViewSize.width * _photoList.count, pageScrollViewSize.height); //contentSize是UIScrollView可以滾動的地區。 //UIScrollView的大小實際就是frame的大小,上層固定不動,顯示的變化,由下層的滾動來控制。而下層滾動的地區的大小,就是由contentSize來控制的了。 [super viewWillAppear]; }

監控PageControl的方法

- (IBAction)changePage:(id)sender {    // 更新Scroll View到正確的頁面    CGRect frame;    frame.origin.x = _pageScroll.frame.size.width * _pageControl.currentPage;//_pageControl.currentPage = 0(前面定義的)    frame.origin.y = 0;    frame.size = _pageScroll.frame.size;    [_pageScroll scrollRectToVisible:frame animated:YES];//這個方法是切換圖片的話,就將圖片切換到指定的frame,YES表示開啟動畫效果,就是切換的時候不那麼生硬}

視圖滾動的方法

-(void) scrollViewDidScroll:(UIScrollView *)scrollView{    CGFloat pageWidth = _pageScroll.frame.size.width;//CGFloat就是CGRect的浮點型值     寬度    // 在滾動超過頁面寬度的50%的時候,切換到新的頁面    int page = floor((_pageScroll.contentOffset.x + pageWidth/2)/pageWidth) ;//floor是向下取整      _pageControl.currentPage = page;}


2.我自己的程式


<span style="color:#6600CC;">//  ViewController.h//  13////  Created by 李迪 on 15-7-29.//  Copyright (c) 2015年 李迪. All rights reserved.//#import <UIKit/UIKit.h>@interface ViewController : UIViewController<UIScrollViewDelegate>{    IBOutlet UIPageControl *pageControl;    IBOutlet UIScrollView *scrollView;}@property UIPageControl *pageControl;@property(strong,nonatomic) UIScrollView *scrollView;@property NSArray *photoArray;-(IBAction)pageChange;//這裡的pageChange和上面的pageControl都是和UIPageControl相連的,這裡可以串連兩次,因為一個是屬性,一個是方法@end//  ViewController.m//  13////  Created by 李迪 on 15-7-29.//  Copyright (c) 2015年 李迪. All rights reserved./* 思路:通過storyboard和代碼的結合,實現UIPageControl和UIScrollView兩種翻頁方式 就要建立IBOutlet形式的UIPageControl和UIScrollView對象,並且在storyboard添加這兩個對象的控制項(雖然程式裡面設定了UISrollView的大小,但是在storyboard裡面還是要將UISrollView空間調整到相應的大小的,否則跟代碼編寫的還是不符)</span>


 將圖片添加到工程中,隨便添加到哪個檔案夾下面都可以,將圖片儲存到數組中,通過數組對圖片進行操作





<span style="color:#006600;"> 通過迴圈將數組裡面的圖片加到UIScrollView裡面 逐個實現兩種翻頁的方法,一個是IBAction,一個是實現代理  具體的再看下面的代碼 */#import "ViewController.h"@interface ViewController ()            @end@implementation ViewController@synthesize photoArray,scrollView,pageControl;            - (void)viewDidLoad {    [super viewDidLoad];    scrollView.delegate =self;  //設定scrollView的代理為self    scrollView.pagingEnabled =YES;  //pagingEnabled-scrollView的屬性-判斷是否啟用整頁翻動(預設為NO,這樣滑動翻頁的時候頁面翻動的很慢,所以傾向與開啟)    scrollView.showsHorizontalScrollIndicator = NO;    scrollView.showsVerticalScrollIndicator = NO;        //這兩個屬性 顯示水平滾動指標 顯示垂直滾動指標 不關閉就會顯示進度條        NSString *img1 = [[NSBundle mainBundle] pathForResource:@"11" ofType:@"png"];    NSString *img2 = [[NSBundle mainBundle] pathForResource:@"21" ofType:@"png"];    NSString *img3 = [[NSBundle mainBundle] pathForResource:@"31" ofType:@"png"];    NSString *img4 = [[NSBundle mainBundle] pathForResource:@"41" ofType:@"png"];        //將滑動用到的圖片添加到檔案夾內部後,用[[NSBundel mainBundel] pathForResource: ofType:]方法擷取到圖片的地址,然後賦值給字串對象        photoArray = [NSArray arrayWithObjects:                  [UIImage imageWithContentsOfFile:img1],                  [UIImage imageWithContentsOfFile:img2],                  [UIImage imageWithContentsOfFile:img3],                  [UIImage imageWithContentsOfFile:img4],nil];        //用[UIImage imageWithContentsOfFile:string]方法,通過地址得到映像對象,將映像對象添加到photoArray數組裡面,所以映像也是可以添加到數組裡面的        //這裡說一下,之前總是把UIImageView和UIImage搞混,UIImageView是視圖控制項,可以用它來儲存UIImage(映像類)的對象    NSInteger pageCount = [photoArray count];   //將數組裡的圖片個數單獨建立對象方便操作    pageControl.numberOfPages = pageCount;  //設定UIPageControl的小白點個數(頁數)    pageControl.currentPage = 0;    //設定當前頁為第一頁        scrollView.frame = CGRectMake(0, 0, 320, 443);  //設定介面座標和長寬(顯示介面)    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * pageCount, 0);//設定範圍           滑動外掛程式的顯示介面大小 和 可滑動大小是兩個概念!顯示介面大小是每一張圖片的大小,而後面有滑動範圍,就是所有的圖片平鋪在一起的大小        for (NSInteger i = 0; i<pageCount; i++) {//通過for迴圈來實現將每張圖片添加到UIScrollView上面        CGRect frame;        frame.origin.x = scrollView.frame.size.width * i;        frame.origin.y = 0;        frame.size = scrollView.frame.size;        //通過迴圈實現每一張圖片對應的frame的大小不變,橫座標改變的目的                UIImageView *imageDemo;        imageDemo = [[UIImageView alloc] initWithImage:[photoArray objectAtIndex:i]];        //把對應的圖片取出來給imageDemo,然後給imageDemo添加屬性        imageDemo.contentMode = UIViewContentModeScaleAspectFill;//圖片完全填充在imageDemo中        imageDemo.frame = frame;        //對於UIImageView的屬性、大小,一定要在UIImageView對象被賦值後才可以進行調整,否則就會出現顯示的視圖與目標視圖不相符的情況。        [scrollView addSubview:imageDemo];//將imageDemo添加到UIScrollView視圖上面    }    }//UIPageControl方法實現翻頁-(IBAction)pageChange{//    CGRect frame;//    frame.origin.y = 0;//    frame.origin.x = self.scrollView.frame.size.width * pageControl.currentPage;//    frame.size = self.scrollView.frame.size;//    [self.scrollView scrollRectToVisible:frame animated:YES];    //上面註解裡面的方法我的XCode運行後實現不了翻頁,只能使用下面的方法代替    [scrollView setContentOffset:CGPointMake(self.scrollView.frame.size.width * pageControl.currentPage, 0) animated:YES];    //直接調用UIScrollView的setContentOffset(設定內容位移,改變的是座標)   animated(動畫)使位移更流暢,而不顯得生硬}-(void)scrollViewDidScroll:(UIScrollView *)scrollView{    CGFloat pageWidth = self.scrollView.frame.size.width;   //得到顯示視圖的寬度    int page = floor((self.scrollView.contentOffset.x + pageWidth/2)/pageWidth);//滑動超過視圖的一半就觸發翻頁    pageControl.currentPage = page;    //位移的一種演算法}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end</span>


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

程式日誌--ios“頁面控制”程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.