亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS開發中UIImageView控件的常用操作整理

2020-07-26 03:29:42
字體:
來源:轉載
供稿:網友

UIImageView,顧名思義,是用來放置圖片的。使用Interface Builder設計界面時,當然可以直接將控件拖進去并設置相關屬性,這就不說了,這里講的是用代碼。

1、創建一個UIImageView:

創建一個UIImageView對象有五種方法:

復制代碼 代碼如下:

UIImageView *imageView1 = [[UIImageView alloc] init]; UIImageView *imageView2 = [[UIImageView alloc] initWithFrame:(CGRect)]; UIImageView *imageView3 = [[UIImageView alloc] initWithImage:(UIImage *)]; UIImageView *imageView4 = [[UIImageView alloc] initWithImage:(UIImage *) highlightedImage:(UIImage *)]; UIImageView *imageView5 = [[UIImageView alloc] initWithCoder:(NSCoder *)];

比較常用的是前邊三個。至于第四個,當這個ImageView的highlighted屬性是YES時,顯示的就是參數highlightedImage,一般情況下顯示的是第一個參數UIImage。

2、frame與bounds屬性:

上述創建一個UIImageView的方法中,第二個方法是在創建時就設定位置和大小。
當之后想改變位置時,可以重新設定frame屬性:

復制代碼 代碼如下:

imageView.frame = CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat heigth);

注意到UIImageView還有一個bounds屬性
復制代碼 代碼如下:

imageView.bounds = CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat heigth);

那么這個屬性跟frame有什么區別呢?

我的理解是,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)。

3、contentMode屬性:

這個屬性是用來設置圖片的顯示方式,如居中、居右,是否縮放等,有以下幾個常量可供設定:

復制代碼 代碼如下:

UIViewContentModeScaleToFill UIViewContentModeScaleAspectFit UIViewContentModeScaleAspectFill UIViewContentModeRedraw UIViewContentModeCenter UIViewContentModeTop UIViewContentModeBottom UIViewContentModeLeft UIViewContentModeRight UIViewContentModeTopLeft UIViewContentModeTopRight UIViewContentModeBottomLeft UIViewContentModeBottomRight

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

前三個效果如下圖:

2016113195842823.png (233×438)2016113195911225.png (233×438)2016113195927624.png (233×438)

UIViewContentModeScaleToFill、UIViewContentModeScaleAspectFit、UIViewContentModeScaleAspectFill

4、更改位置

更改一個UIImageView的位置,可以

4.1 直接修改其frame屬性

4.2 修改其center屬性:

復制代碼 代碼如下:

imageView.center = CGPointMake(CGFloat x, CGFloat y);

center屬性指的就是這個ImageView的中間點。

4.3 使用transform屬性

復制代碼 代碼如下:

imageView.transform = CGAffineTransformMakeTranslation(CGFloat dx, CGFloat dy);

其中dx與dy表示想要往x或者y方向移動多少,而不是移動到多少。

5、旋轉圖像

復制代碼 代碼如下:

imageView.transform = CGAffineTransformMakeRotation(CGFloat angle);

要注意它是按照順時針方向旋轉的,而且旋轉中心是原始ImageView的中心,也就是center屬性表示的位置。

這個方法的參數angle的單位是弧度,而不是我們最常用的度數,所以可以寫一個宏定義:

復制代碼 代碼如下:

#define degreesToRadians(x) (M_PI*(x)/180.0)
 

用于將度數轉化成弧度。下圖是旋轉45度的情況:

2016113200035442.png (233×438)2016113200057774.png (233×438)

6、縮放圖像

還是使用transform屬性:

復制代碼 代碼如下:

imageView.transform = CGAffineTransformMakeScale(CGFloat scale_w, CGFloat scale_h);

其中,CGFloat scale_w與CGFloat scale_h分別表示將原來的寬度和高度縮放到多少倍,下圖是縮放到原來的0.6倍的示意圖:

2016113200125793.png (233×438)2016113200142359.png (233×438)

7、播放一系列圖片

復制代碼 代碼如下:

imageView.animationImages = imagesArray; // 設定所有的圖片在多少秒內播放完畢 imageView.animationDuration = [imagesArray count]; // 不重復播放多少遍,0表示無數遍 imageView.animationRepeatCount = 0; // 開始播放 [imageView startAnimating];

其中,imagesArray是一些列圖片的數組。如下圖:

2016113200207725.png (233×438)2016113200242612.png (233×438)2016113200301738.png (233×438)

8、為圖片添加單擊事件:

復制代碼 代碼如下:

imageView.userInteractionEnabled = YES; UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; [imageView addGestureRecognizer:singleTap];

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

9、tag參數

一個視圖通常都只有一個父視圖,多個子視圖,在開發中可以通過使用子視圖的tag來取出對應的子視圖。方法為Viewwithtag:

提示點:在xib中如果想要通過tag參數獲取對應的控件(屬性),不要把tag的參數設置為0,因為xib中所有的對象默認tag都為0,設置為0取不到對象。

2016113200407294.png (643×431)

10、ImageView中添加按鈕
(1)ImageView和Button的比較

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

(2)說明:

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

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

通常有兩種方式創建控件,一是直接在storyboard或xib界面設計器上拖拽,另一種方式是使用手寫代碼的方式創建。
在界面設計器上面拖拽的無法在ImageView中添加按鈕,那么我們嘗試一下手寫代碼。

代碼如下:

復制代碼 代碼如下:

#import "YYViewController.h"

@interface YYViewController ()
@end


復制代碼 代碼如下:

@implementation YYViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
   
    // UIImageView默認不允許用戶交互
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20, 100, 100)];
    [self.view addSubview:imageView];
    imageView.backgroundColor = [UIColor redColor];
    imageView.userInteractionEnabled = YES;
   
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];
    [imageView addSubview:btn];
   
    [btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
}

- (void)click
{
    NSLog(@"摸我了");
}
@end


(4)執行效果(添加+按鈕后,點擊):

2016113200430816.png (411×183)

(5)注意點:

在上面代碼中imageView.userInteractionEnabled = YES;的作用是,設置imageView為允許用戶交互的。

imageView默認的是不允許用戶交互的,這個可以通過在界面設計器中查看imageView的屬性邊欄查看。

請注意默認狀態的屬性

2016113200446126.png (610×354)

11、其他設置

復制代碼 代碼如下:

imageView.hidden = YES或者NO;    // 隱藏或者顯示圖片 imageView.alpha = (CGFloat) al;    // 設置透明度 imageView.highlightedImage = (UIImage *)hightlightedImage; // 設置高亮時顯示的圖片 imageView.image = (UIImage *)image; // 設置正常顯示的圖片 [imageView sizeToFit];    // 將圖片尺寸調整為與內容圖片相同

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品国产69国产精品亚洲| 日韩精品在线视频美女| 欧美成年人视频网站| 国产亚洲在线播放| 精品久久久久久电影| 亚洲国产精品资源| 国产成人一区二区三区小说| 欧美日韩福利视频| 亚洲综合在线小说| 91久久精品美女高潮| 伊是香蕉大人久久| 欧美精品在线观看91| 亚洲欧美激情在线视频| 2024亚洲男人天堂| 91精品国产综合久久男男| 欧美激情亚洲激情| 成人有码视频在线播放| 国产精品麻豆va在线播放| 日韩精品免费在线播放| 亚洲精品免费一区二区三区| 国产日韩亚洲欧美| 日韩av电影手机在线观看| 亚洲精品一区二区三区婷婷月| 欧美一乱一性一交一视频| 欧美香蕉大胸在线视频观看| 欧美激情区在线播放| 国产精品视频免费观看www| 不用播放器成人网| 国产69精品99久久久久久宅男| 亚洲精品电影在线| 久久久亚洲国产天美传媒修理工| 91av视频在线观看| 国产精品日韩精品| 国产欧美在线视频| 成人av资源在线播放| 国产亚洲欧美日韩一区二区| 海角国产乱辈乱精品视频| 欧美日韩综合视频| 国产精品亚洲激情| 日韩在线视频国产| 2019中文在线观看| 精品高清美女精品国产区| 成人疯狂猛交xxx| 日韩精品免费一线在线观看| 欧美不卡视频一区发布| 亚洲免费精彩视频| 欧美成人性生活| 国产精品久久久久秋霞鲁丝| 久色乳综合思思在线视频| 日韩欧美在线第一页| 欧美国产在线视频| 国产亚洲欧美日韩一区二区| 欧美性极品少妇精品网站| 成人精品福利视频| 伊人一区二区三区久久精品| 青青草国产精品一区二区| 亚洲视频日韩精品| 欧美wwwwww| 91久久嫩草影院一区二区| 精品一区精品二区| 国产精品人成电影在线观看| 欧美性黄网官网| 欧美中文字幕在线观看| 国产精品久久久久久久9999| 久久久精品视频成人| 欧美激情精品久久久久久变态| 午夜精品三级视频福利| 成人两性免费视频| 亚洲影院色在线观看免费| 欧美极品少妇xxxxⅹ喷水| 超碰精品一区二区三区乱码| 欧美亚洲视频在线观看| 中文字幕av一区二区三区谷原希美| 国产精品一区二区久久| 日韩中文有码在线视频| 欧美成人亚洲成人| 欧美黄色性视频| 亚洲精品www久久久久久广东| 亚洲一区久久久| 影音先锋欧美精品| 日韩女优人人人人射在线视频| 国产极品精品在线观看| 亚洲图片制服诱惑| 国产精品稀缺呦系列在线| 久热99视频在线观看| 亚洲欧美国产视频| 亚洲黄色www| 成人国产精品一区二区| 亚洲男人天堂视频| 亚洲福利视频二区| 91在线免费看网站| 亚洲自拍欧美色图| 国内精品久久久久久| 伊人久久久久久久久久| 欧美一级淫片aaaaaaa视频| 久久网福利资源网站| …久久精品99久久香蕉国产| 国产精品va在线播放| 欧美亚洲另类制服自拍| 91国产精品视频在线| 激情久久av一区av二区av三区| 国产精品久久一| 亚洲精品电影网在线观看| 高清日韩电视剧大全免费播放在线观看| 国产欧美一区二区三区四区| 国产日韩av在线| 日韩国产欧美区| 亚洲欧美日韩天堂| 国产精品日韩欧美| 亚洲性视频网站| 欧美高清视频在线| 成人欧美一区二区三区黑人孕妇| 成人午夜一级二级三级| 日韩av成人在线| 欧美黄色性视频| 日韩经典第一页| 欧美国产日本高清在线| 中文字幕欧美在线| 欧美激情性做爰免费视频| 欧美自拍大量在线观看| 精品久久久久久久久久国产| 国产成人亚洲综合91| 欧美日韩精品二区| 亚洲国产成人一区| 色先锋资源久久综合5566| 精品夜色国产国偷在线| 成人久久18免费网站图片| 日韩免费观看在线观看| 日韩中文字幕在线视频| 日韩欧美在线视频| 国内精品免费午夜毛片| 欧美激情视频一区| 国产精品久久久久久影视| 欧美日韩在线观看视频小说| 欧美做爰性生交视频| 国产精品久久婷婷六月丁香| 在线观看久久av| 亚洲美女av网站| 国产成人精品一区二区三区| 97精品在线观看| 亚洲欧美精品在线| 精品国产区一区二区三区在线观看| 91在线观看免费网站| 色天天综合狠狠色| 精品综合久久久久久97| 成人黄在线观看| 欧美大奶子在线| 亚洲视频一区二区三区| 国产精品美女久久久久久免费| 国产亚洲精品综合一区91| 91亚洲va在线va天堂va国| 亚洲第一福利网站| 国产又爽又黄的激情精品视频| 91精品国产91久久久| 国产欧美精品一区二区三区介绍| 992tv成人免费影院| 日韩欧美国产激情| 亚洲天堂成人在线视频| 久久免费视频在线| 国产一区玩具在线观看| 日韩av色综合| 欧美日韩亚洲一区二区| 97激碰免费视频| 久久久亚洲影院你懂的|