你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> [IOS實例小計]UIImageView

[IOS實例小計]UIImageView

編輯:關於IOS

預備知識:

UIImage   是一個專門存儲圖片數據的對象,默認兼容的圖片格式是 PNG,可以通過文件、Quartz image對象或 image Data數據得到一個圖片對象。   UIImage相關功能比較多,除了代表圖片數據外,還可以對圖片中的數據進行處理,從而產生不同的圖片效果。     UIImage創建   用UIImage加載圖像的方法很多,最常用的是下面四種:    一、從當前工程目錄中得到圖片,用imageNamed函數   [UIImage imageNamed:ImageName];   [UIImage imageNamed:@"a.png"];     二、從數據庫得到圖片、用NSData的方式加載,一般從數據庫讀取圖片使用,例如:    NSString *filePath = [[NSBundle mainBundle]pathForResource:fileName ofType:extension];   NSData *image = [NSDatadataWithContentsOfFile:filePath];   [UIImage imageWithData:image];    三,從文件目錄中得到圖片,使用[UIImage imageWithContentOfFile:] 或者[imageinitWithContentOfFile:]    NSString *filePath = [[NSBundle mainBundle]pathForResource:fileName ofType:@"圖片擴展名"];   [UIImage imageWithContentsOfFile:aImagePath];    //綁定文件夾中  icon.png 的圖片   NSString *path = [[NSBundle mainBundle]pathForResource:@”icon”ofType:@”png”];   NSImage *myImage = [UIImageimageWithContentsOfFile:path];      四、從網絡得到圖片   UIImage *image = [[UIImage alloc]initWithData:[NSData dataWithContentsOfURL[NSURLURLWithString:@"http://up.2cto.com/2013/0702/20130702085459778.jpg"]]];    UIImageView *imageView = [[UIImageView alloc]initWithImage:image];   UIImageView    UIImageView:可以通過UIImage加載圖片賦給UIImageView,加載後你可以指定顯示的位置和大小。      1、初始化    UIImageView *imageView = [[UIImageView alloc]      initWithFrame:CGRectMake(0.0,45.0,300,300)];    imageView.image = [UIImageimageNamed:@"a.png"];//加載入圖片    [self.view addSubView:image];    [imageView release];    //imageNamed方法是不能通過路徑進行加載圖片的,此方式容易引起發生內存警告從而導致自動退出的問題。   //最好是通過直接讀取文件路徑[UIImageimageWithContentsOfFile]解決掉這個問題.   NSImage *image = [[NSImagealloc]initWithContentsOfURL:(NSURL *)];    NSImage *image = [[NSImagealloc]initWithContentsOfFile:(NSString *)];    //讓一個UIImageView響應點擊事件    //創建一個指定大小的圖片區域   UIImageView *imgView =[[UIImageView alloc]initWithFrame:CGRectMake(0, 0,320, 44)];   //允許用戶操作該 區域   imgView.userInteractionEnabled=YES;   //創建用戶“輕擊手勢”的響應,並通過 @selector() 指定,用戶點擊後調用的方法   UITapGestureRecognizer *singleTap=[[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(onClickImage)];   //把手勢對象,添加給視圖對象   [imgView addGestureRecognizer:singleTap];   //釋放資源   [singleTap release];     -(void)onClickImage{      //here, do whatever you wantto do      NSLog(@"imageview is clicked!");   }   1)用imageNamed的方式加載時,系統會把圖像Cache到內存。如果圖像比較大,或者圖像比較多,用這種方式會消耗很大的內存,而且釋放圖像的內存是一件相對來說比較麻煩的事情。例如:如果利用imageNamed的方式加載圖像到一個動態數組NSMutableArray,然後將將數組賦予一個UIView的對象的animationImages進行逐幀動畫,那麼這將會很有可能造成內存洩露。並且釋放圖像所占據的內存也不會那麼簡單。但是利用imageNamed加載圖像也有自己的優勢。對於同一個圖像系統只會把它Cache到內存一次,這對於圖像的重復利用是非常有優勢的。例如:你需要在一個TableView裡重復加載同樣一個圖標,那麼用imageNamed加載圖像,系統會把那個圖標Cache到內存,在Table裡每次利用那個圖像的時候,只會把圖片指針指向同一塊內存。這種情況使用imageNamed加載圖像就會變得非常有效。  2)利用NSData方式加載時,圖像會被系統以數據方式加載到程序。當你不需要重用該圖像,或者你需要將圖像以數據方式存儲到數據庫,又或者你要通過網絡下載一個很大的圖像時,請盡量使用imageWithData的方式加載圖像。 用NSTimer去實現apple的UIImageView animation的效果(這是一種解決辦法)   擴展: 為UIImageView增加手勢   [ImageView addGestureRecognizer:我們自己的手勢recognizer];   如何創建一個手勢?看看UITapGestureRecognizer 的用法吧      //單指單擊    UITapGestureRecognizer *singleFingerOne = [[UITapGestureRecognizer alloc] initWithTarget:self  action:@selector(handleSingleFingerEvent:)];  singleFingerOne.numberOfTouchesRequired = 1; //手指數  singleFingerOne.numberOfTapsRequired = 1; //tap次數  singleFingerOne.delegate= self;    //單指雙擊  UITapGestureRecognizer *singleFingerTwo = [[UITapGestureRecognizer alloc] initWithTarget:self  action:@selector(handleSingleFingerEvent:)];  singleFingerTwo.numberOfTouchesRequired = 1;  singleFingerTwo.numberOfTapsRequired = 2;  singleFingerTwo.delegate= self;    //雙指單擊  UITapGestureRecognizer *doubleFingerOne = [[UITapGestureRecognizer alloc] initWithTarget:self  action:@selector(handleDoubleFingerEvent:)];  doubleFingerOne.numberOfTouchesRequired = 2;  doubleFingerOne.numberOfTapsRequired = 1;  doubleFingerOne.delegate= self;    UITapGestureRecognizer *doubleFingerTwo = [[UITapGestureRecognizer alloc] initWithTarget:self  action:@selector(handleDoubleFingerEvent:)];  doubleFingerTwo.numberOfTouchesRequired = 2;  doubleFingerTwo.numberOfTapsRequired = 2;  doubleFingerTwo.delegate= self;    //如果不加下面的話,當單指雙擊時,會先調用單指單擊中的處理,再調用單指雙擊中的處理  [singleFingerOne requireGestureRecognizerToFail:singleFingerTwo];  //同理雙指亦是如此  [doubleFingerOne requireGestureRecognizerToFail:doubleFingerTwo];    [self.view addGestureRecognizer:singleFingerOne];  [self.view addGestureRecognizer:singleFingerTwo];  [self.view addGestureRecognizer:doubleFingerOne];  [self.view addGestureRecognizer:doubleFingerTwo];    [singleFingerOne release];  [singleFingerTwo release];  [doubleFingerOne release];  [doubleFingerTwo release]; 處理事件的方法,代碼:  //處理單指事件 - (void)handleSingleFingerEvent:(UITapGestureRecognizer *)sender { if(sender.numberOfTapsRequired == 1) { //單指單擊 NSLog(@"單指單擊");  }elseif(sender.numberOfTapsRequired == 2){ //單指雙擊 NSLog(@"單指雙擊"); }  }  //處理雙指事件  - (void)handleDoubleFingerEvent:(UITapGestureRecognizer *)sender  {  if(sender.numberOfTapsRequired == 1) {  //雙指單擊  NSLog(@"雙指單擊");  }elseif(sender.numberOfTapsRequired == 2){  //雙指雙擊  NSLog(@"雙指雙擊");  }  }
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved