[IOS執行個體小計]UIImageView

來源:互聯網
上載者:User

預備知識: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://www.bkjia.com/uploadfile/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(@"雙指雙擊"); } }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.