使用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 類型的值。