1. 程式人生 > >IOS控制元件之ScrollView,PageControl---APP首次開啟引導頁面效果實現~

IOS控制元件之ScrollView,PageControl---APP首次開啟引導頁面效果實現~

前言:

最近學了下UIScrollView的用法,然後自己實現了一個常見的APP首次開啟的引導頁面效果,效果圖如下:
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
主要就是一個滑動頁面的效果,在最後一頁上有一個立即體驗的按鈕,點選按鈕會跳轉到APP主頁面。
主要用到的就是ScrollView,PageControl這兩種控制元件。

實現思路:

把主頁面的根檢視設定成一個ImageView,用來顯示背景圖片,然後再在背景圖片上面放置一個ScrollView,用來顯示滑動的前景圖片,因為一共有4張圖片,所以向ScrollView中新增4個ImageView,依次放置這4張圖片,最後在最後一個ImageView上放置一個“立即體驗”按鈕。

這些都做完了之後,發現少了一個我們經常會見到的頁面正下方的小圓點,顯示總頁數和當前為第幾頁。這就是PageControl,我們最後在根檢視上建立一個pageControl,顯示頁面滑動到哪一頁了,這裡需要注意的是,PageControl要新增到根檢視上,而不是ScrollView上,因為如果新增到ScrollView要設定相對位置,當頁面滑動時候,顯示的是不同的相對位置裡面的內容,所以如果要每一頁顯示不同的內容,就把父檢視設定為ScrollView,如果是每一頁都要顯示的內容,比如PageControl,就不要設定父檢視為ScrollView,其實想想很簡單,ScrollView是要滑動的嘛。不是固定的。

OK,新增完了所有控制元件之後,就要新增事件響應了,同ActionSheet一樣,ScrollView也無法新增訊息響應,只能設定代理,所以只要實現一個代理方法讓ScrollView頁面翻動時下面的小圓點PageControl也跟著動~~

主要程式碼如下:

我把步驟簡簡單單分為4步~很容易就搞定!

Step1:》》》設定根檢視為一個顯示背景的ImageView:

-(void)loadView{
    [super loadView];
//    要設定背景圖片,建立一個rootImageView作為父檢視
    [self createRootImageView];
}
#pragma mark 建立rootImageView
-(void)createRootImageView{ UIImageView *rootImageView=[[UIImageView alloc] initWithFrame:self.view.bounds]; [rootImageView setImage:[UIImage imageNamed:@"new_feature_background.png"]]; [self.view addSubview:rootImageView]; // 因為父檢視是一個imageView,要開啟互動,否則無法做任何操作 // 預設是NO [self.view setUserInteractionEnabled:YES]; }

Step2》》》建立顯示滑動頁面的ScrollView和最後一頁的“立即體驗”按鈕,並新增按鈕訊息響應

#pragma mark 建立第二層檢視scrollView
-(void)createScrollView{
    UIScrollView *scrollView=[[UIScrollView alloc]initWithFrame:self.view.bounds];
//    設定scrollView內容大小--可滑動範圍
    [scrollView setContentSize:CGSizeMake(self.view.bounds.size.width*kImageCount, 0)];
//    向其中新增pageImageView
    CGFloat width=self.view.bounds.size.width;
    CGFloat height=self.view.bounds.size.height;
    for (NSInteger i=0; i<kImageCount; i++) {
//        相對於scrollView內容的位置
        UIImageView *pageImageView=[[UIImageView alloc] initWithFrame:CGRectMake(i*width, 0, width, height)];
        [pageImageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"new_feature_%ld.png",i + 1]]];
        if (i==kImageCount - 1) {
            [self createIntoButton:pageImageView];
        }
        [scrollView addSubview:pageImageView];
    }
//    設定分頁,否則滾動效果很糟糕
    [scrollView setPagingEnabled:YES];
//    去掉彈性
    [scrollView setBounces:NO];
//    去掉滾動條
    [scrollView setShowsHorizontalScrollIndicator:NO];
    [scrollView setShowsVerticalScrollIndicator:NO];
//    scrollView目前為第二層檢視
    [self.view addSubview:scrollView];
}
#pragma mark 建立最後一頁的“立即體驗”按鈕
-(void)createIntoButton:(UIImageView*)pageImageView{
//    開啟父檢視互動
    [pageImageView setUserInteractionEnabled:YES];
    UIButton *intoButton=[[UIButton alloc] init];
//    設定背景圖片
    UIImage *backImage=[UIImage imageNamed:@"new_feature_finish_button.png"];
    UIImage *backImageHL=[UIImage imageNamed:@"new_feature_finish_button_highlighted.png"];
    [intoButton setBackgroundImage:backImage forState:UIControlStateNormal];
    [intoButton setBackgroundImage:backImageHL forState:UIControlStateHighlighted];
//    設定中心點和大小,大小根據背景
    CGFloat centerX=pageImageView.bounds.size.width/2;
    CGFloat centerY=pageImageView.bounds.size.height * kIntoButtonRatio;
    CGFloat width=backImage.size.width;
    CGFloat height=backImage.size.height;
    [intoButton setBounds:CGRectMake(0, 0, width, height)];
    [intoButton setCenter:CGPointMake(centerX, centerY)];
//    訊息響應
    [intoButton addTarget:self action:@selector(intoButtonClick) forControlEvents:UIControlEventTouchUpInside];
//    新增到pageImageView
    [pageImageView addSubview:intoButton];

}
#pragma mark "立即體驗"按鈕訊息響應
-(void)intoButtonClick{
    SubViewController *subView=[[SubViewController alloc] init];
    [self presentViewController:subView animated:YES completion:nil];
}

Step3》》》建立PageControl並新增到父檢視

#pragma mark 建立和scrollView同為第二層檢視的pageControl
-(void)createPageControl{

    _pageControl=[[UIPageControl alloc] init];
//    設定位置
    [_pageControl setCenter:CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height * kPageControlRatio)];
    [_pageControl setBounds:CGRectMake(0, 0, 150, 44)];
//    設定頁數
    [_pageControl setNumberOfPages:kImageCount];
//    設定頁面軌道顏色
    [_pageControl setPageIndicatorTintColor:[UIColor grayColor]];
    [_pageControl setCurrentPageIndicatorTintColor:[UIColor orangeColor]];
//    注意,父檢視不是ScrollView!
    [self.view addSubview:_pageControl];
}

Step4: 執行!

Oh,No!發現不論到哪一頁,PageControl那個小圓點都不變化:這裡寫圖片描述
什麼原因?因為沒有為ScrollView設定代理,沒有實現代理方法。所以ScrollView變化無法影響到PageControl的變化。
所以現在我們在createScrollView方法裡面加一行程式碼:

//    設定代理,以便於滑動時改變pageControl
    [scrollView setDelegate:self];
然後再實現代理方法:
#pragma mark scrollView的代理方法
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    NSInteger index=scrollView.contentOffset.x/scrollView.bounds.size.width;
    [_pageControl setCurrentPage:index];
}

一些最後的廢話~:

好啦,到目前為止,我們就學會了如何做一個看起來很diao的APP引導頁面~
原始碼?當然要提供啦!所以我會上傳到csdn上,大家免費下載來學習了~
PS:發現一個很讓我傷心的事情,就是我堅持寫了這麼久的部落格,可是卻沒有人評論。。。。沒有一點關注度。。。但是。。。儘管如此,我還是會堅持寫,練好文筆,相信有一天會成為一個關注度很高的技術部落格!
下一篇的內容是:如何實現一個迴圈顯示的ScrollView,我們會使用一個假迴圈來顯示~
程式碼連結:
http://download.csdn.net/detail/u012320459/9230433