久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

瘋狂ios講義之圖像控件(UIImageView)

 雪柳花明 2016-03-12

UIImageView代表一個圖片顯示控件,,它直接繼承了UIView基類,沒有繼承UIControl,,因此,,UIImage只能作為圖片的顯示控件,不能接受用戶輸入,,也不能與用戶交互,,它只是一個靜態(tài)控件。

當(dāng)程序需要使用UIImageView來顯示圖片時,,即可直接在Interface Builder中把UIImageView拖入程序界面中,,也可在程序中創(chuàng)建UIImageView對象。

創(chuàng)建UIImageView對象之后,,接下來可以通過如下兩個屬性訪問或設(shè)置該控件顯示的圖片,。

image:訪問或設(shè)置該控件顯示的圖片。

highlightedImage:訪問或設(shè)置該控件處于高亮狀態(tài)時顯示的圖片。

除此之外,UIImageView還可以使用動畫顯示一組圖片,,使用UIImageView動畫顯示一組圖片的屬性和方法如下,。

animationImages:訪問或者設(shè)置該UIImageView需要動畫顯示的多張圖片。該屬性的值是一個NSArray對象,。

highlightedAnimationImages:訪問或者設(shè)置該UIImageView高亮狀態(tài)下需要動畫顯示的多張圖片。該屬性的值是一個NSArray對象,。

animationDuration:訪問或設(shè)置該UIImageView的動畫持續(xù)時間,。

animationRepeatCount:訪問或設(shè)置該UIImageView的動畫重復(fù)次數(shù)。

startAnimating:開始播放動畫,。

stopAnimating:停止播放動畫,。

isAnimating:該方法判斷該UIImageView是否正在播放動畫。

如果在Interface Builder的用戶界面設(shè)計文件中選中一個UIImageView,,可以看到Xcode顯示如圖10.24所示的屬性檢查器面板,。

在圖10.24所示的屬性檢查面板中,UIImageView所支持的三個屬性的意義非常明確,,此處不再贅述,。實際上,UIView控件所支持的Mode屬性可控制UIImageView所顯示圖片的縮放模式,,Mode屬性是一個列表框,,該列表框支持如下列表項。

Scale To Fill:不保持縱橫比縮放圖片,,使圖片完全適應(yīng)該UIImageView控件,。

Aspect Fit:保持縱橫比縮放圖片,使圖片的長邊能完全顯示出來,。也就是說,,可以完整地將圖片顯示出來。

Aspect Fill:保持縱橫比縮放圖片,,只保證圖片的短邊能完全顯示出來,。也就是說,圖片通常只在水平或垂直方向是完整的,,另一個方向?qū)l(fā)生截取,。

Center:不縮放圖片,只顯示圖片的中間區(qū)域,。

Top:不縮放圖片,,只顯示圖片的頂部區(qū)域。

Bottom:不縮放圖片,,只顯示圖片的底部區(qū)域,。

Left:不縮放圖片,,只顯示圖片的左邊區(qū)域。

Right:不縮放圖片,,只顯示圖片的右邊區(qū)域,。

Top Left:不縮放圖片,只顯示圖片的左上邊區(qū)域,。

Top Right:不縮放圖片,,只顯示圖片的右上邊區(qū)域。

Bottom Left:不縮放圖片,,只顯示圖片的左下邊區(qū)域,。

Bottom Right:不縮放圖片,只顯示圖片的右下邊區(qū)域,。

實例1:圖片瀏覽器


利用本實例的圖片瀏覽器可以依次查看應(yīng)用中的每張圖片,,除此之外,還可以改變正在查看的圖片的透明度,,這可借助UIViewalpha屬性來實現(xiàn)。不僅如此,,本圖片瀏覽器還可通過一個小區(qū)域來查看圖片的原始大小,,因此,本例會定義兩個UIImageView:一個用于查看圖片整體,,一個用于查看圖片局部的細(xì)節(jié),。

創(chuàng)建一個Single View Application,并向界面中添加三個按鈕,、兩個UIImageView,,然后將它們擺放整齊,在Interface Builder中設(shè)計出的程序界面如圖10.25所示,。

為了能在程序中訪問兩個UIImageView控件,,還需要在Interface Builder中將這兩個UIImageView綁定到控制器類的IBOutlet屬性:iv1iv2,這樣控制器類即可通過這兩個屬性來訪問這兩個UIImageView控件,。

為了讓程序能響應(yīng)應(yīng)用界面上的三個按鈕的單擊事件,,還需要在Interface Builder中為這三個按鈕的Touch Up Inside事件綁定IBAction事件處理方法,這些按鈕分別綁定到IBAction事件處理方法為:plus:,、minus:next:,。

完成界面設(shè)計之后,接下來編寫該應(yīng)用界面對應(yīng)的控制器類的實現(xiàn)部分,,主要就是為plus:,、minus:next:方法提供實現(xiàn)。

除此之外,,程序還需要為UIImageView的單擊事件提供響應(yīng)——問題是UIImageView并未繼承UIControl基類,,因此,,既不能在Interface Builder中為UIImageViewTouch Up Inside事件綁定IBAction事件處理方法,也不能通過代碼為該控件的Touch Up Inside事件綁定事件處理方法,。為了讓UIImageView能響應(yīng)單擊事件,,程序可以通過UIImageView添加手勢檢測器來處理單擊事件。

下面是控制器類的實現(xiàn)部分代碼,。

程序清單:codes/10/10.7/UIImageViewTest/UIImageViewTest/FKViewController.m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
@implementation FKViewController
NSArray* images;
int curImage;
CGFloat alpha;
- (void)viewDidLoad
{
    [super viewDidLoad];
    curImage = 0;
    alpha = 1.0;
    images = [NSArray arrayWithObjects:@"lijiang.jpg",
        @"qiao.jpg", @"xiangbi.jpg"
        , @"shui.jpg" , @"shuangta.jpg" , nil];
    // 啟用iv控件的用戶交互,,從而允許該控件能響應(yīng)用戶手勢
    self.iv.userInteractionEnabled = YES;
    // 創(chuàng)建一個輕擊的手勢檢測器
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]
        initWithTarget:self action:@selector(clicked:)];
    [self.iv addGestureRecognizer:singleTap];  // 為UIImageView添加手勢檢測器
}
- (IBAction)plus:(id)sender {
    alpha += 0.02;
    // 如果透明度已經(jīng)大于或等于1.0,將透明度設(shè)置為1.0
    if(alpha >= 1.0)
    {
        alpha = 1.0;
    }
    self.iv.alpha = alpha;  // 設(shè)置iv控件的透明度
}
- (IBAction)minus:(id)sender {
    alpha -= 0.02;
    // 如果透明度已經(jīng)小于或等于0.0,,將透明度設(shè)置為0.0
    if(alpha <= 0.0)
    {
        alpha = 0.0;
    }
    self.iv.alpha = alpha;  // 設(shè)置iv控件的透明度
}
- (IBAction)next:(id)sender {
    // 控制iv的image顯示images數(shù)組中的下一張圖片
    self.iv.image = [UIImage imageNamed:
        [images objectAtIndex:(++curImage % images.count)]];
}
- (void) clicked:(UIGestureRecognizer *)gestureRecognizer
{
    UIImage* srcImage = self.iv.image;  // 獲取正在顯示的原始位圖
    // 獲取用戶手指在iv控件上的觸碰點
    CGPoint pt = [gestureRecognizer locationInView: self.iv];
    // 獲取正在顯示的原圖對應(yīng)的CGImageRef
    CGImageRef sourceImageRef = [srcImage CGImage];
    // 獲取圖片實際大小與第一個UIImageView的縮放比例
    CGFloat scale = srcImage.size.width / 320;
    // 將iv控件上觸碰點的左邊換算成原始圖片上的位置
    CGFloat x = pt.x * scale;
    CGFloat y = pt.y * scale;
    if(x + 120  > srcImage.size.width)
    {
        x = srcImage.size.width - 140;
    }
    if(y + 120  > srcImage.size.height)
    {
        y = srcImage.size.height - 140;
    }
    // 調(diào)用CGImageCreateWithImageInRect函數(shù)獲取sourceImageRef中指定區(qū)域的圖片
    CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef
        , CGRectMake(x,  y, 140, 140));
    // 讓iv2控件顯示newImageRef對應(yīng)的圖片
    self.iv2.image = [UIImage imageWithCGImage:newImageRef];
}
@end



上面程序中,,在viewDidLoad方法中初始化了該程序需要顯示的所有圖片——將這些圖片的文件名組成一個NSArray數(shù)組。除此之外,,該程序還創(chuàng)建一個手勢檢測器,,并為iv(第一個UIImageView控件)添加該手勢檢測器,該手勢檢測器就會負(fù)責(zé)處理該UIImageView控件上的點擊事件,。

接下來在plus:,、minus:中的粗體字代碼通過修改alpha屬性來控制該控件的透明度,而next:方法中粗體字代碼則通過image屬性來控制該UIImageView所顯示的圖片,。

該程序中的一個難點是使用CGImage來處理位圖,,雖然iOS提供了UIImage來代表位圖,但實際上UIImage對位圖的處理功能非常有限,,如果需要對位圖進行處理,,則需要借助CGImage。第11章介紹圖形,、圖像處理時會進一步介紹CGImage的功能和用法,。

編譯、運行該程序,,可以看到如圖10.26所示的效果,。


實例2:“幻燈片”播放器

UIImageView除了可以顯示單張圖片之外,還能以動畫方式輪換顯示多張圖片,,這種顯示方式非常類似于幻燈片播放方式,。

為了讓UIImageView以動畫方式顯示多張圖片,只要為該UIImageViewanimationImages屬性賦一個NSArray集合(該集合元素中都是UIImage對象),,接下來設(shè)置與動畫相關(guān)的一些屬性,,再調(diào)用UIImageViewstartAnimating方法開始播放動畫即可。

下面的實例將會使用UIImageView開發(fā)一個幻燈片播放器,。

創(chuàng)建一個Single View Application,,使用Interface Builder打開應(yīng)用界面,并將一個UIImageView拖入該應(yīng)用界面中,。為了能在該應(yīng)用界面對應(yīng)的控制器類中訪問該UIImageView控件,,可以在Interface Builder中將該UIImageView綁定到該控制器類的IBOutlet屬性:iv,。

接下來修改該應(yīng)用界面對應(yīng)的控制器類的實現(xiàn)部分,修改后的實現(xiàn)部分代碼如下,。

程序清單:codes/10/10.7/UIImageViewTest2/UIImageViewTest2/FKViewController.m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@implementation FKViewController
NSArray* images;
- (void)viewDidLoad
{
    [super viewDidLoad];
    // 創(chuàng)建一個NSArray集合,,其中集合元素都是UIImage對象
    images = [NSArray arrayWithObjects:
        [UIImage imageNamed:@"lijiang.jpg"],
        [UIImage imageNamed:@"qiao.jpg"],
        [UIImage imageNamed:@"xiangbi.jpg"],
        [UIImage imageNamed:@"shui.jpg"],
        [UIImage imageNamed:@"shuangta.jpg"], nil];
    // 設(shè)置iv控件需要動畫顯示的圖片為images集合元素
    self.iv.animationImages = images;
    self.iv.animationDuration = 12;  // 設(shè)置動畫持續(xù)時間
    self.iv.animationRepeatCount = 999999;  // 設(shè)置動畫重復(fù)次數(shù)
    [self.iv startAnimating];  // 讓iv控件開始播放動畫
}
@end



上面程序中,粗體字代碼就是設(shè)置 UIImageView 動畫播放圖片,,并設(shè)置該控件的動畫持續(xù)時間和動畫重復(fù)次數(shù),,程序最后調(diào)用了 UIImageView startAnimating 方法開始播放動畫,這樣即可讓 UIImageView 開始正常播放動畫,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多