1.初始化
UIImageView? *imageView=[[UIImageView alloc] initWithFrame:CGRectMake(100, 200, 120, 120)];
??:fram和bounds的區(qū)別
我的理解是毛嫉,frame設(shè)置其位置和大小藕畔,而bounds只能設(shè)置其大小,其參數(shù)中的x皿哨、y不起作用即便是之前沒有設(shè)定frame屬性剃执,控件最終的位置也不是bounds所設(shè)定的參數(shù)薛闪。bounds實(shí)現(xiàn)的是將UIImageView控件以原來的中心為中心進(jìn)行縮放鲜屏。例如有如下代碼:
復(fù)制代碼 代碼如下:
imageView.frame = CGRectMake(0, 0, 320, 460);?
imageView.bounds = CGRectMake(100, 100, 160, 230);
執(zhí)行之后肉盹,這個imageView的位置和大小是(80昔驱, 115, 160上忍, 230)骤肛。
2.設(shè)置圖片
第一種:
[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的方式加載時窍蓝,系統(tǒng)會把圖像Cache到內(nèi)存腋颠。如果圖像比較大,或者圖像比較多吓笙,用這種方式會消耗很大的內(nèi)存淑玫,而且釋放圖像的內(nèi)存是一件相對來說比較麻煩的事情。例如:如果利用imageNamed的方式加載圖像到一個動態(tài)數(shù)組NSMutableArray面睛,然后將將數(shù)組賦予一個UIView的對象的animationImages進(jìn)行逐幀動畫絮蒿,那么這將會很有可能造成內(nèi)存泄露。并且釋放圖像所占據(jù)的內(nèi)存也不會那么簡單叁鉴。但是利用imageNamed加載圖像也有自己的優(yōu)勢土涝。對于同一個圖像系統(tǒng)只會把它Cache到內(nèi)存一次,這對于圖像的重復(fù)利用是非常有優(yōu)勢的幌墓。例如:你需要在一個TableView里重復(fù)加載同樣一個圖標(biāo)但壮,那么用imageNamed加載圖像冀泻,系統(tǒng)會把那個圖標(biāo)Cache到內(nèi)存,在Table里每次利用那個圖像的時候茵肃,只會把圖片指針指向同一塊內(nèi)存腔长。這種情況使用imageNamed加載圖像就會變得非常有效。
2)利用NSData方式加載時验残,圖像會被系統(tǒng)以數(shù)據(jù)方式加載到程序捞附。當(dāng)你不需要重用該圖像,或者你需要將圖像以數(shù)據(jù)方式存儲到數(shù)據(jù)庫您没,又或者你要通過網(wǎng)絡(luò)下載一個很大的圖像時鸟召,請盡量使用imageWithData的方式加載圖像。
無論用哪種方式加載圖像氨鹏,圖像使用結(jié)束后欧募,一定要記得顯示釋放內(nèi)存。
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); // 設(shè)置圖片位置和大小
oneImageView.bounds = CGRectMake(10, 10, 280, 280); // 設(shè)置圖片位置和大小仆抵,如果設(shè)置了frame跟继,那么它這是的位置將不起作用
oneImageView.backgroundColor = [UIColor redColor]; // 設(shè)置背景顏色
oneImageView.alpha = 1.0; // 設(shè)置透明度
4.contentMode屬性
oneImageView.contentMode = UIViewContentModeTop;
// 有以下一些相對位置關(guān)系
//? ? UIViewContentModeScaleToFill
//? ? UIViewContentModeScaleAspectFit
//? ? UIViewContentModeScaleAspectFill
//? ? UIViewContentModeRedraw
//? ? UIViewContentModeCenter
//? ? UIViewContentModeTop
//? ? UIViewContentModeBottom
//? ? UIViewContentModeLeft
//? ? UIViewContentModeRight
//? ? UIViewContentModeTopLeft
//? ? UIViewContentModeTopRight
//? ? UIViewContentModeBottomLeft
//? ? UIViewContentModeBottomRight
??:注意以上幾個常量,凡是沒有帶Scale的镣丑,當(dāng)圖片尺寸超過 ImageView尺寸時舔糖,只有部分顯示在ImageView中。UIViewContentModeScaleToFill屬性會導(dǎo)致圖片變形莺匠。UIViewContentModeScaleAspectFit會保證圖片比例不變金吗,而且全部顯示在ImageView中,這意味著ImageView會有部分空白趣竣。UIViewContentModeScaleAspectFill也會證圖片比例不變摇庙,但是是填充整個ImageView的,可能只有部分圖片顯示出來遥缕。具體效果可以自己嘗試卫袒,這里就不上圖了。
5.圖片的移動旋轉(zhuǎn)
oneImageView.center = CGPointMake(150, 300); // 修改圖片center的位置
oneImageView.transform = CGAffineTransformMakeTranslation(20, 20); // 把一個圖片移動一段距離 其中20表示想要往x或者y方向移動多少单匣,而不是移動到多少玛臂。
oneImageView.transform = CGAffineTransformMakeRotation(0.0f); // 旋轉(zhuǎn)圖像一定角度 注意:單位是弧度,而不是我們最常用的度數(shù)封孙,所以可以寫一個宏定義:#define degreesToRadians(x) (M_PI*(x)/180.0)
oneImageView.transform = CGAffineTransformMakeScale(0.5, 0.5); // 其中迹冤,CGFloat scale_w與CGFloat scale_h分別表示將原來的寬度和高度縮放到多少倍,下圖是縮放到原來的0.5倍
6.圖片點(diǎn)擊事件
// 一定要先將userInteractionEnabled置為YES虎忌,這樣才能響應(yīng)單擊事件
oneImageView.userInteractionEnabled = YES; // 設(shè)置圖片可以交互
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; // 設(shè)置手勢
[oneImageView addGestureRecognizer:singleTap]; // 給圖片添加收拾
7.設(shè)置圖片連續(xù)播放泡徙,實(shí)現(xiàn)動畫效果
oneImageView.animationImages = [NSArray arrayWithObjects:[UIImageimageNamed:@"max.png"], [UIImage imageNamed:@"min.png"], nil];
oneImageView.animationDuration = 0.3f; // 設(shè)置循環(huán)一次的時間
oneImageView.animationRepeatCount = 0; // 循環(huán)的次數(shù)。設(shè)置為0時無線循環(huán)
[oneImageView startAnimating]; // 開始動畫
// [oneImageView stopAnimating]; // 停止動畫
8.獲取網(wǎng)絡(luò)中的圖片
UIImage *urlImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"www.baidu.com"]]];
9.按鈕和圖片的結(jié)合
1)ImageView和Button的比較
Button按鈕的內(nèi)部可以放置多張圖片(4)膜蠢,而ImageView中只能放置一張圖片堪藐。
(2)說明:
ImageView只能顯示一張圖片莉兰,我們知道所有的ui控件都繼承自UIView,所有的視圖都是容器礁竞,容易意味著還能往里邊加?xùn)|西糖荒。那么能否在ImageView中加上按鈕呢?
(3)在ImageView中添加按鈕的操作
通常有兩種方式創(chuàng)建控件模捂,一是直接在storyboard或xib界面設(shè)計(jì)器上拖拽捶朵,另一種方式是使用手寫代碼的方式創(chuàng)建。
在界面設(shè)計(jì)器上面拖拽的無法在ImageView中添加按鈕狂男,那么我們嘗試一下手寫代碼综看。
前提是背景圖片屬性 imageView.userInteractionEnabled = YES;否則按鈕是沒響應(yīng)的。
10.其他的一些屬性
imageView.hidden = YES或者NO;? ? // 隱藏或者顯示圖片?
imageView.alpha = (CGFloat) al;? ? // 設(shè)置透明度?
imageView.highlightedImage = (UIImage *)hightlightedImage; // 設(shè)置高亮?xí)r顯示的圖片?
imageView.image = (UIImage *)image; // 設(shè)置正常顯示的圖片
?[imageView sizeToFit];? ? // 將圖片尺寸調(diào)整為與內(nèi)容圖片相同