2014年8月13日 星期三

UIScrollView and Page Control programmatically using Swift and Object-C language

【說明】

此份筆記紀錄如何用Storyboard實現UIScrollView,並用程式碼控制UIScrollView與Page Control之間的互動。


【專案開發步驟】

建立專案:

使用Single View Application模板建立一個名為ScrollView的專案,使用iPhone裝置。

設計使用者介面:

替View加入NavigationController,並將title設為ScrollView,如下圖所示。

設計使用者介面
加入ScrollView:

拖曳ScrollView物件至ViewController內,並水平垂直置中,如下圖。

加入ScrollView物件
設定ScrollView的內容:

將UIScrollView的Constraints上下左右都做設定,如下圖所示。

設定ScrollView的Constraints
拖曳一個View的物件到Storyboard內,並設定水平垂直置中,如下圖所示。

拖曳View物件至Storyboard
點選到該頁的ViewController,設定模擬的大小為960,如下圖所示。

設定頁面大小
將方才所額外加入的View物件添加背景顏色,方便我們辨別,如下圖所示。

更改View的背景顏色
再新增兩個與前一個加入的View相同大小的View至頁面內,將拉長的頁面填滿,並更換頁面的背景顏色方便識別,如下圖所示。

新增View物件
設定左邊View的Constraints為上下左右與寬跟高,如下圖所示。

設定左邊View的Constraints
設定中間View的Constraints為上下左右與寬,如下圖所示。

設定中間View的Constraints
設定右邊View的Constraints為上下左右與寬,如下圖所示。

設定右邊View的Constraints
設定完畢後即可將模擬的大小調回320,如下圖所示。

調整模擬頁面的大小
點選該頁面的ViewController,到屬性裡面將「Adjust Scroll View Insets」取消勾選,如下圖所示。

取消勾選項目
點選ScrollView物件,到屬性裡面將「Paging Enabled」勾選,如下圖所示。

勾選項目
加入Page Control:

拖曳一個Page Control物件至View裡面,一定要放在ScrollView下面,否則會被蓋住,如下圖所示。

加入ScrollView
調整ScrollView至適當的位置,如下圖所示。

調整Page Control位置
撰寫UIScrollView與Page Control的互動:

建立實體變數名稱,並與Storyboard做連接,如下所示。

<Swift>
@IBOutlet var scrollView: UIScrollView!
@IBOutlet var pageControl: UIPageControl!

<Object-C>
@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;
@property (strong, nonatomic) IBOutlet UIPageControl *pageControl;

設定UIScrollView的代理人是自己,如下所示。

<Swift>
scrollView.delegate = self

<Object-C>
self.scrollView.delegate = self;

代理人必須採納Protocol,如下所示。

<Swift>
class ModalViewController: UIViewController, UIScrollViewDelegate {

    @IBOutlet var scrollView: UIScrollView!
    @IBOutlet var pageControl: UIPageControl!
}

<Object-C>
@interface ViewController () <UIScrollViewDelegate>

@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;
@property (strong, nonatomic) IBOutlet UIPageControl *pageControl;


@end

實作Delegate的method,如下所示。

<Swift>
func scrollViewDidEndDecelerating(scrollView: UIScrollView!) {


}

<Object-C>
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
   

}

將以下程式碼放至Delegate的method內,如下所示。

<Swift>
var stopPoint: CGPoint = scrollView.contentOffset
var stopIndex: NSNumber = (stopPoint.x)/320
pageControl.currentPage = stopIndex

<Object-C>
CGPoint stopPoint = scrollView.contentOffset;
int stopIndex = (int)stopPoint.x/320;
self.pageControl.currentPage = stopIndex;
利用stopPoint得到scrollView的偏移量。利用偏移量除320得知Index,stopIndex應為0,1,2。最後設定Page control現在正確的頁面是在哪一個。


【執行結果】

    


【專案範例】

沒有留言:

張貼留言