IOS學習筆記(8)UIPageViewController UIProgressView 監聽和響應鍵盤通知 – iPhone手機開發技術文章 iPhone軟體開發教學課程

使用UIPageViewController啟用分頁

新建程序:file–> new–>new project–>page-based Application模版–>next–>device Family (Universal)–>next–>create;

DataViewController 類 在頁面視圖控制器的每一個頁面裡都會提供這個類的一個實例給用戶,這個類是UIViewController的一個子類。

ModelController 類 這僅僅是一個遵守UIPageViewControllerDataSource協議的一個NSObject的子類,這個類是頁面視圖控制器的數據資源類。

 

– (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished

previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed;

 

當用戶從一個頁面轉向下一個或者前一個頁面,或者當用戶開始從一個頁面轉向另一個頁面的途中後悔 瞭,並撤銷返回到瞭之前的頁面時,將會調用這個方法。假如成功跳轉到另一個頁面時,transitionCompleted 會被置成 YES,假如在跳轉途中取消瞭跳轉這個動作將會被置成 NO。

 

– (UIPageViewControllerSpineLocation) pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation;

 

當設備的方向改變瞭將會調用這個方法。你可以使用這個方法通過返回 UIPageViewControllerSpinelocation 類型的一個值來設定頁面主鍵的位置:

 

enum {

UIPageViewControllerSpineLocationNone = 0, UIPageViewControllerSpineLocationMin = 1, UIPageViewControllerSpineLocationMid = 2, UIPageViewControllerSpineLocationMax = 3

};

typedef NSInteger UIPageViewControllerSpineLocation;

 

這個可能對於你來說有點復雜,讓我來給你演示一下。假如我們使用一個 UIpageViewControllerSpineLocationMin 值,頁面視圖將隻會提供一個視圖給用戶,當轉向另一個新頁面時將提 供一個新頁面給用戶。但是,當我們給 UIPageViewControllerSpineLocationMid 設置書脊時,我們需要同時提 供兩個視圖。一個在左邊一個在右邊,中間放置一個書脊。你可以看到一個頁面視圖控制器在水平 模式下的例子,並設置瞭 UIpageViewControllerSpineLocationMin 的書脊。書脊被放置在兩個視圖控制器的中間。一旦用戶將頁面從右邊翻向左邊,這個頁

 

面就停在瞭左邊,而右邊則顯示一個新的視圖控制器。整個邏輯關系都在下面的委托方法裡,如下代碼所示:

 

-(UIPageViewControllerSpineLocation) pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation;

 

我們現在講瞭頁面控制器的委托,那數據資源優勢怎麼一回事呢?一個頁面視圖控制器的數據資源必須遵 守 UIPageViewControllerDataSource 協議。在協議裡的兩個很重要的方法是:

 

– (UIViewController *)

pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController;

 

– (UIViewController *)

pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController;

 

當頁面視圖控制器已經有一個視圖控制器在屏幕裡並需要知道下一個即將要顯示的視圖控制器時將調用第 一個方法。當用戶決定翻轉下一個頁面時將發生此事件。當這個視圖正在翻轉的同時頁面視圖控制器想要判斷 哪一個視圖控制器需要顯示的時候將調用第二個方法。

 

使用UIProgressView顯示進度條

 

@property(monatomic,strong)UIProgressView *progressView;

 

@synthesize progressView;

 

-(void)viewDidLoad{

 

    [super viewDidLoad];

 

    self.view.backgroundColor = [UIColor whiteColor];

 

    self.progressView = [ [UIProgressView alloc]initWithProgressViewStyle:UIProgressViewStyleBar];

 

    self.progressView.center = self.view.center;

 

    self.progressView.progress = 0.5f;

 

    [self.view addSubview:self.progressView];

 

}

 

-(void)viewDidUnload{

 

    [super viewDidUnload];

 

    self.progressView = nil;

 

}

 

創建一個進度視圖是很簡單的,所需要註意的就是能夠正確的顯示進度,因為進度視圖的progress屬性值必須是在 +0到1.0之間,假設你有30個任務需要被監控,而且已經完成瞭20個任務,你需要指定下面的方程來表示進展程度:

 

self.progressView.progress = 20.0f/30.0f;

 

註:此處必須使用浮點數,若用整形 20/30為0;

 

監聽和響應鍵盤通知

 

UIKeyboardWillShowNotification  //當鍵盤即將要顯示的時候會發生這個通知,包含信息庫。

 

UIKeyboardDidShowNotification //當鍵盤顯示在屏幕上時將發出這個通知

 

UIKeyboardWillHideNotification  //當鍵盤將要從屏幕上移除時將會發出此通知。通知裡包含瞭用戶信息庫,庫裡包含瞭各種關於鍵盤信息的詳細信息,當鍵盤隱藏時動畫,動畫持續時間,等等。

 

UIKeyboardDidHideNotification  //當鍵盤完全隱藏後將發出此通知

 

UIKeyboardAnimationCurveUserInfoKey //指明瞭動畫類型,用來顯示和隱藏鍵盤,這個關鍵字包含瞭一個NSNumber類型的值,此類型包含瞭一個NSUInteger類型無符號整數

 

UIKeyboardAnimationDurationUserInfoKey //這個鍵值指明瞭鍵盤顯示和隱藏的動畫所用的時間,這個包含一個NSNumber類型的值,此類包含一個double類型的雙字節值。

 

UIKeyboardFrameBeginUserInfoKey

 

這個鍵值指明瞭鍵盤在動畫之前的框架。假如鍵盤將要顯示時,在顯示之前將這個框架傳遞給這個動 畫。假如鍵盤已經顯示瞭並即將要隱藏時,這個框架將會傳遞給這個隱藏動畫,在鍵盤消失之前。這個鍵包含 瞭一個 CGRect 類型的值。

 

UIKeyboardFrameEndUserInfoKey

 

這個鍵值指明瞭動畫完成後的鍵盤框架。假如鍵盤即將要顯示時,這個框架將會在鍵盤完全顯示後傳 遞給鍵盤。。假如鍵盤已經完全顯示,而且將要隱藏時,在完全隱藏後這個框架將會傳遞給鍵盤。這個鍵值包 含瞭一個 CGRect 類型的值。使用UIPageViewController啟用分頁

新建程序:file–> new–>new project–>page-based Application模版–>next–>device Family (Universal)–>next–>create;

DataViewController 類 在頁面視圖控制器的每一個頁面裡都會提供這個類的一個實例給用戶,這個類是UIViewController的一個子類。

ModelController 類 這僅僅是一個遵守UIPageViewControllerDataSource協議的一個NSObject的子類,這個類是頁面視圖控制器的數據資源類。

 

– (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished

previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed;

 

當用戶從一個頁面轉向下一個或者前一個頁面,或者當用戶開始從一個頁面轉向另一個頁面的途中後悔 瞭,並撤銷返回到瞭之前的頁面時,將會調用這個方法。假如成功跳轉到另一個頁面時,transitionCompleted 會被置成 YES,假如在跳轉途中取消瞭跳轉這個動作將會被置成 NO。

 

– (UIPageViewControllerSpineLocation) pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation;

 

當設備的方向改變瞭將會調用這個方法。你可以使用這個方法通過返回 UIPageViewControllerSpinelocation 類型的一個值來設定頁面主鍵的位置:

 

enum {

UIPageViewControllerSpineLocationNone = 0, UIPageViewControllerSpineLocationMin = 1, UIPageViewControllerSpineLocationMid = 2, UIPageViewControllerSpineLocationMax = 3

};

typedef NSInteger UIPageViewControllerSpineLocation;

 

這個可能對於你來說有點復雜,讓我來給你演示一下。假如我們使用一個 UIpageViewControllerSpineLocationMin 值,頁面視圖將隻會提供一個視圖給用戶,當轉向另一個新頁面時將提 供一個新頁面給用戶。但是,當我們給 UIPageViewControllerSpineLocationMid 設置書脊時,我們需要同時提 供兩個視圖。一個在左邊一個在右邊,中間放置一個書脊。你可以看到一個頁面視圖控制器在水平 模式下的例子,並設置瞭 UIpageViewControllerSpineLocationMin 的書脊。書脊被放置在兩個視圖控制器的中間。一旦用戶將頁面從右邊翻向左邊,這個頁

 

面就停在瞭左邊,而右邊則顯示一個新的視圖控制器。整個邏輯關系都在下面的委托方法裡,如下代碼所示:

 

-(UIPageViewControllerSpineLocation) pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation;

 

我們現在講瞭頁面控制器的委托,那數據資源優勢怎麼一回事呢?一個頁面視圖控制器的數據資源必須遵 守 UIPageViewControllerDataSource 協議。在協議裡的兩個很重要的方法是:

 

– (UIViewController *)

pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController;

 

– (UIViewController *)

pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController;

 

當頁面視圖控制器已經有一個視圖控制器在屏幕裡並需要知道下一個即將要顯示的視圖控制器時將調用第 一個方法。當用戶決定翻轉下一個頁面時將發生此事件。當這個視圖正在翻轉的同時頁面視圖控制器想要判斷 哪一個視圖控制器需要顯示的時候將調用第二個方法。

 

使用UIProgressView顯示進度條

 

@property(monatomic,strong)UIProgressView *progressView;

 

@synthesize progressView;

 

-(void)viewDidLoad{

 

    [super viewDidLoad];

 

    self.view.backgroundColor = [UIColor whiteColor];

 

    self.progressView = [ [UIProgressView alloc]initWithProgressViewStyle:UIProgressViewStyleBar];

 

    self.progressView.center = self.view.center;

 

    self.progressView.progress = 0.5f;

 

    [self.view addSubview:self.progressView];

 

}

 

-(void)viewDidUnload{

 

    [super viewDidUnload];

 

    self.progressView = nil;

 

}

 

創建一個進度視圖是很簡單的,所需要註意的就是能夠正確的顯示進度,因為進度視圖的progress屬性值必須是在 +0到1.0之間,假設你有30個任務需要被監控,而且已經完成瞭20個任務,你需要指定下面的方程來表示進展程度:

 

self.progressView.progress = 20.0f/30.0f;

 

註:此處必須使用浮點數,若用整形 20/30為0;

 

監聽和響應鍵盤通知

 

UIKeyboardWillShowNotification  //當鍵盤即將要顯示的時候會發生這個通知,包含信息庫。

 

UIKeyboardDidShowNotification //當鍵盤顯示在屏幕上時將發出這個通知

 

UIKeyboardWillHideNotification  //當鍵盤將要從屏幕上移除時將會發出此通知。通知裡包含瞭用戶信息庫,庫裡包含瞭各種關於鍵盤信息的詳細信息,當鍵盤隱藏時動畫,動畫持續時間,等等。

 

UIKeyboardDidHideNotification  //當鍵盤完全隱藏後將發出此通知

 

UIKeyboardAnimationCurveUserInfoKey //指明瞭動畫類型,用來顯示和隱藏鍵盤,這個關鍵字包含瞭一個NSNumber類型的值,此類型包含瞭一個NSUInteger類型無符號整數

 

UIKeyboardAnimationDurationUserInfoKey //這個鍵值指明瞭鍵盤顯示和隱藏的動畫所用的時間,這個包含一個NSNumber類型的值,此類包含一個double類型的雙字節值。

 

UIKeyboardFrameBeginUserInfoKey

 

這個鍵值指明瞭鍵盤在動畫之前的框架。假如鍵盤將要顯示時,在顯示之前將這個框架傳遞給這個動 畫。假如鍵盤已經顯示瞭並即將要隱藏時,這個框架將會傳遞給這個隱藏動畫,在鍵盤消失之前。這個鍵包含 瞭一個 CGRect 類型的值。

 

UIKeyboardFrameEndUserInfoKey

 

這個鍵值指明瞭動畫完成後的鍵盤框架。假如鍵盤即將要顯示時,這個框架將會在鍵盤完全顯示後傳 遞給鍵盤。。假如鍵盤已經完全顯示,而且將要隱藏時,在完全隱藏後這個框架將會傳遞給鍵盤。這個鍵值包 含瞭一個 CGRect 類型的值。

You May Also Like