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];? ? // 將圖片尺寸調整為與內容圖片相同