斯坦福大學iOS應用開發教程學習筆記(第八課)viewController生命週期

第七課的主要內容:View Controller Lifecycle ImageView ScrollView WebView


1、View Controller Lifecycle  

 creation 
通過 一個segue或故事版的instantiateViewControllerWithIdentifer:實例化。
一般情況不要自己定義UIViewController的初始化方法。
awakeFromNib 可選的,awakeFromNib是view的方法,有很多方法可以替代awakeFromNib放置。
awakeFromNib很早期就被調用了,那時候outlet還沒連起來。那時候viewController還沒完全構建完畢,不過可能有一些事情比如設置 split view delegate需要在非常早的時間完成。

- (void)viewDidLoad;
在實例化和outlet-setting後, viewDidload被調用。
在viewController已經構建完畢,只是沒顯示出來。
可以放置大部分的初始化的代碼,
但是不能放置關於設置view大小的代碼。view 是controller的一個property,是指在視圖中最頂層的矩形區域,是你在故事版中編輯的最頂層的那個東西。
view的尺寸放在下個方法。

- (void)viewWillAppear:(BOOL)animated;
在view準備要顯示的時候調用。
另外一個合適在viewWillAppear裏做的就是 laziy do stuff  緩式動作。比如lazy init.
viewWillAppear是做那些很費資源的事情的地方
不過太費時的 話就得開啓新線程來搞。
總之 viewWillAppear適合做兩件事:1.最後時刻延時加載高開銷的操作,2.改變view的幾何特性。
- (void)viewWillDisappear:(BOOL)animated
當你的視圖將要在屏幕上消失的時候調用
可以在這裏記錄你view的狀態,數據。一般要寫到磁盤裏,下次進來的時候
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated]; // 這個要寫
    [self rememberScrollPosition]; // 記住滾動的位置
    [self saveDataToPermanentStore]; // maybe do in did instead?
   // 注意不要在這裏進行比耗時的操作,界面更流暢。 
}

Did版本的兩個方法。
- (void)viewDidAppear:(BOOL)animated; //可以在顯示之後做一些操作,比如動畫之類的。
- (void)viewDidDisappear:(BOOL)animated;
都需要調用 super版本方法。在你的操作之前之後都行,看自己的需求。

Frame 改變,如果 struts and spring 不足夠的話就用
- (void)view{Will,Did}LayoutSubviews;

[html] view plaincopy
  1. - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)anOrientation  
  2.                                 duration:(NSTimeInterval)seconds;  
  3. - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOriention)orient  
  4.                                 duration:(NSTimeInterval)seconds;  
  5. - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)anOrientation;  
  6. @property UIInterfaceOrientation interfaceOrientati  

viewDidUnload
當內存不足的時候系統會卸載你的view.
最好在這裏試着outlet爲nil
[html] view plaincopy
  1. - (void)viewDidUnload  
  2. {  
  3.     self.faceView = nil;  
  4. }  

view controller的初始化:
從.xib創建一個UIViewController。
那是4.x才創建方式。
用alloc  init 創建
初始化方法的設計。

從代碼創建UIViewController:
覆蓋方法- (void)loadView和 設置 self.view 
如果從故事版和.xib創建那麼請遵守下面幾個原則:
不要是實現loadview方法。
不要設置self.view.除了loadview能設置self.view之外,其他都不能設置。
沒有設置self.view的話就不要實現Loadview。

儘量不要使用awakeFromNib。

UIView's frame 
誰來設置UIView的 frame呢?
答案是:把view放到view組織架構裏的那個對象。一般情況下對象是誰啊? 是故事版。

2、UIImageView

- (id)initWithImage:(UIImage *)image; // 他是個UIView, 
@property (nonatomic, strong) UIImage *image; // will not adjust frame size

記住UIView’s contentMode property
Top  Left ScaleToFit 等屬性。設置image的在UIImageView的邊界縮放等。

3、UIWebView

一個內置在UIView的完整的瀏覽器。
基於Webkit,一個HTML的開源的渲染框架。
支持javascript
重要的屬性:
@property (nonatomic) BOOL scalesPagesToFit;
設置是否縮放到合適尺寸。YES就縮放到合適尺寸,如果NO,則保持原網頁大小不變。

@property (nonatomic, readonly, strong) UIScrollView *scrollView;
控制滾動。

加載HTML的三個方法:
[html] view plaincopy
  1. - (void)loadRequest:(NSURLRequest *)request;  
  2. - (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;  
  3. - (void)loadData:(NSData *)data  
  4.         MIMEType:(NSString *)MIMEtype  
  5. textEncodingName:(NSString *)encodingName  
  6.          baseURL:(NSURL *)baseURL;  
可以指定文件類型,比如pdf來顯示。

NSURLRequest
[html] view plaincopy
  1. NSURLRequest  
  2. + (NSURLRequest *)requestWithURL:(NSURL *)url;  
  3. + (NSURLRequest *)requestWithURL:(NSURL *)url  
  4.                      cachePolicy:(NSURLRequestCachePolicy)policy  
  5.                  timeoutInterval:(NSTimeInterval)timeoutInterval;  
NSURL 基本和NSString類似,一個好的 格式而已,比如 :file://  http://
上面兩個方法的區別主要是緩存策略,超時的設置。如果不指定,那就是默認的。

4、ScrollView

ScrollView設計的兩個作用是:
1、讓用戶拖拽到想展示的內容區域
2、讓用戶可以放大縮小內容的區域


我自己找了張手機裏的圖片,用代碼實現scrollview:
  1. UIImage *image = [UIImage imageNamed:@"bigimage"];  
  2. UIImageView *iv = [[UIImageView alloc] initWithImage:image];  
  3. iv.frame = CGRectMake(0, 0, image.size.width, image.size.height) ;  
  4.   
  5.   
  6.   
  7. CGRect fullScreenRect=[[UIScreen mainScreen] applicationFrame];  
  8. UIScrollView *scrollView=[[UIScrollView alloc] initWithFrame:fullScreenRect];  
  9. [scrollView addSubview:iv];  
  10. scrollView.contentSize=CGSizeMake(2592 ,1952);  
  11.    
  12. [self.view addSubview:scrollView];  
效果如下:



下圖中的方法可以這樣是測試:
scrollViewWillEndDragging:withVelocity:targetContentOffset是UIScrollViewDelegate的方法。
  1. -(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{  
  2.     CGPoint upperLeftOfVisible = scrollView.contentOffset;  
  3.     NSLog(@"x:%f, y:%f", upperLeftOfVisible.x, upperLeftOfVisible.y);  
  4. }  



[html] view plaincopy
  1. CGRect visibleRect = [scrollView convertRect:scrollView.bounds toView:subview];  


放大縮小:
在.h文件實現

UIScrollViewDelegate協議,

  1. UIImage *image = [UIImage imageNamed:@"bigimage"];  
  2.    imageView = [[UIImageView alloc] initWithImage:image];  
  3.    imageView.frame = CGRectMake(0, 0, image.size.width, image.size.height) ;  
  4.      
  5.      
  6.    CGRect fullScreenRect=[[UIScreen mainScreen] applicationFrame];  
  7.    UIScrollView *scrollView=[[UIScrollView alloc] initWithFrame:fullScreenRect];  
  8.    scrollView.delegate = self;  
  9.    scrollView.minimumZoomScale = 0.2;  
  10.    scrollView.maximumZoomScale = 2.0;  
  11.    [scrollView addSubview:imageView];  
  12.    scrollView.contentSize=CGSizeMake(2592 ,1952);  
  13.       
  14.    [self.view addSubview:scrollView];  
  1. - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView  
  2. {  
  3.     return imageView;  
  4. }  
這樣就可以放大縮小了:


  1.   
參考:https://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/UIScrollView_pg/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008179-CH1-SW1

容芳志 (http://blog.csdn.net/totogo2010)

本文遵循“署名-非商業用途-保持一致”創作公用協議

原文地址:http://blog.csdn.net/totogo2010/article/details/8471739

發佈了27 篇原創文章 · 獲贊 3 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章