UIImageView

1.初始化

UIImageView? *imageView=[[UIImageView alloc] initWithFrame:CGRectMake(100, 200, 120, 120)];

??:fram和bounds的區別

我的理解是,frame設置其位置和大小,而bounds只能設置其大小,其參數中的x、y不起作用即便是之前沒有設定frame屬性,控件最終的位置也不是bounds所設定的參數。bounds實現的是將UIImageView控件以原來的中心為中心進行縮放。例如有如下代碼:

復制代碼 代碼如下:

imageView.frame = CGRectMake(0, 0, 320, 460);?

imageView.bounds = CGRectMake(100, 100, 160, 230);

執行之后,這個imageView的位置和大小是(80, 115, 160, 230)。

2.設置圖片

第一種:

[imageView setImage:[UIImage imageNamed:@"1.jpeg"]];

//第二種:

NSString *filePath=[[NSBundle mainBundle] pathForResource:@"1" ofType:@"jpeg"];

UIImage *images=[UIImage imageWithContentsOfFile:filePath];

//[imageView setImage:images];

//第三種:

NSData *data=[NSData dataWithContentsOfFile:filePath];

UIImage *image2=[UIImage imageWithData:data];

[imageView setImage:image2];

??:

其中第一 二種屬于一種,共兩種:

1)用imageNamed的方式加載時,系統會把圖像Cache到內存。如果圖像比較大,或者圖像比較多,用這種方式會消耗很大的內存,而且釋放圖像的內存是一件相對來說比較麻煩的事情。例如:如果利用imageNamed的方式加載圖像到一個動態數組NSMutableArray,然后將將數組賦予一個UIView的對象的animationImages進行逐幀動畫,那么這將會很有可能造成內存泄露。并且釋放圖像所占據的內存也不會那么簡單。但是利用imageNamed加載圖像也有自己的優勢。對于同一個圖像系統只會把它Cache到內存一次,這對于圖像的重復利用是非常有優勢的。例如:你需要在一個TableView里重復加載同樣一個圖標,那么用imageNamed加載圖像,系統會把那個圖標Cache到內存,在Table里每次利用那個圖像的時候,只會把圖片指針指向同一塊內存。這種情況使用imageNamed加載圖像就會變得非常有效。

2)利用NSData方式加載時,圖像會被系統以數據方式加載到程序。當你不需要重用該圖像,或者你需要將圖像以數據方式存儲到數據庫,又或者你要通過網絡下載一個很大的圖像時,請盡量使用imageWithData的方式加載圖像。

無論用哪種方式加載圖像,圖像使用結束后,一定要記得顯示釋放內存。

3.UIImageView的常用方法

UIImage *oneImage = [UIImage imageNamed:@"max.png"]; // 使用ImageView通過name找到圖片

UIImageView *oneImageView = [[UIImageView alloc] initWithImage:oneImage]; //把oneImage添加到oneImageView上

oneImageView.frame = CGRectMake(10, 10, 300, 300); // 設置圖片位置和大小

oneImageView.bounds = CGRectMake(10, 10, 280, 280); // 設置圖片位置和大小,如果設置了frame,那么它這是的位置將不起作用

oneImageView.backgroundColor = [UIColor redColor]; // 設置背景顏色

oneImageView.alpha = 1.0; // 設置透明度

4.contentMode屬性

oneImageView.contentMode = UIViewContentModeTop;

// 有以下一些相對位置關系

//? ? UIViewContentModeScaleToFill

//? ? UIViewContentModeScaleAspectFit

//? ? UIViewContentModeScaleAspectFill

//? ? UIViewContentModeRedraw

//? ? UIViewContentModeCenter

//? ? UIViewContentModeTop

//? ? UIViewContentModeBottom

//? ? UIViewContentModeLeft

//? ? UIViewContentModeRight

//? ? UIViewContentModeTopLeft

//? ? UIViewContentModeTopRight

//? ? UIViewContentModeBottomLeft

//? ? UIViewContentModeBottomRight

??:注意以上幾個常量,凡是沒有帶Scale的,當圖片尺寸超過 ImageView尺寸時,只有部分顯示在ImageView中。UIViewContentModeScaleToFill屬性會導致圖片變形。UIViewContentModeScaleAspectFit會保證圖片比例不變,而且全部顯示在ImageView中,這意味著ImageView會有部分空白。UIViewContentModeScaleAspectFill也會證圖片比例不變,但是是填充整個ImageView的,可能只有部分圖片顯示出來。具體效果可以自己嘗試,這里就不上圖了。

5.圖片的移動旋轉

oneImageView.center = CGPointMake(150, 300); // 修改圖片center的位置

oneImageView.transform = CGAffineTransformMakeTranslation(20, 20); // 把一個圖片移動一段距離 其中20表示想要往x或者y方向移動多少,而不是移動到多少。

oneImageView.transform = CGAffineTransformMakeRotation(0.0f); // 旋轉圖像一定角度 注意:單位是弧度,而不是我們最常用的度數,所以可以寫一個宏定義:#define degreesToRadians(x) (M_PI*(x)/180.0)

oneImageView.transform = CGAffineTransformMakeScale(0.5, 0.5); // 其中,CGFloat scale_w與CGFloat scale_h分別表示將原來的寬度和高度縮放到多少倍,下圖是縮放到原來的0.5倍

6.圖片點擊事件

// 一定要先將userInteractionEnabled置為YES,這樣才能響應單擊事件

oneImageView.userInteractionEnabled = YES; // 設置圖片可以交互

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; // 設置手勢

[oneImageView addGestureRecognizer:singleTap]; // 給圖片添加收拾

7.設置圖片連續播放,實現動畫效果

oneImageView.animationImages = [NSArray arrayWithObjects:[UIImageimageNamed:@"max.png"], [UIImage imageNamed:@"min.png"], nil];

oneImageView.animationDuration = 0.3f; // 設置循環一次的時間

oneImageView.animationRepeatCount = 0; // 循環的次數。設置為0時無線循環

[oneImageView startAnimating]; // 開始動畫

// [oneImageView stopAnimating]; // 停止動畫

8.獲取網絡中的圖片

UIImage *urlImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"www.baidu.com"]]];

9.按鈕和圖片的結合

1)ImageView和Button的比較

Button按鈕的內部可以放置多張圖片(4),而ImageView中只能放置一張圖片。

(2)說明:

ImageView只能顯示一張圖片,我們知道所有的ui控件都繼承自UIView,所有的視圖都是容器,容易意味著還能往里邊加東西。那么能否在ImageView中加上按鈕呢?

(3)在ImageView中添加按鈕的操作

通常有兩種方式創建控件,一是直接在storyboard或xib界面設計器上拖拽,另一種方式是使用手寫代碼的方式創建。

在界面設計器上面拖拽的無法在ImageView中添加按鈕,那么我們嘗試一下手寫代碼。

前提是背景圖片屬性 imageView.userInteractionEnabled = YES;否則按鈕是沒響應的。

10.其他的一些屬性

imageView.hidden = YES或者NO;? ? // 隱藏或者顯示圖片?

imageView.alpha = (CGFloat) al;? ? // 設置透明度?

imageView.highlightedImage = (UIImage *)hightlightedImage; // 設置高亮時顯示的圖片?

imageView.image = (UIImage *)image; // 設置正常顯示的圖片

?[imageView sizeToFit];? ? // 將圖片尺寸調整為與內容圖片相同

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容