iOS开发入门基础(一):UIImageView控件的使用大全

[复制链接]
yjrx 发表于 2019-4-12 20:00:14 | 显示全部楼层 |阅读模式
来源:https://www.toutiao.com/group/6493102678216802829/
若内容不全,可点击上述链接查看来源网页,在网页中点击红色双层向下的箭头阅读全文


一、UIImageView的功能

UIImageView是用来在屏幕上显示图片的一个视图,如要使用UIImageView来显示图片,包括头像,有的背景图片等。

二、使用方法

首先要将图片文件加载到UIImage上,然后通过UIImageView的一些方法去使用UIImage,比如setImage去使用UImage。所以,在使用UIImageView之前,要首先初始化UIImage对象。

1、几种常用加载UIImage的方法

  • imageNamed:通过项目中的文件来创建。

    UIImage*image=[UIImageimageNamed:@"hearted.jpg"];

  • imageWithContentsOfFile:通过指定路径创建。

    NSString*filePath=[[NSBundlemainBundle]pathForResource:@"hearted"ofType:@"jpg"];

    //[NSBundlemainBundle]其获取的路径是你程序的安装路径下的资源文件位置。

    UIImage*images=[UIImageimageWithContentsOfFile:filePath];

  • imageWithData:通过NSData创建。

    NSString*filePath=[[NSBundlemainBundle]pathForResource:@"hearted"ofType:@"jpg"];

    NSData*data=[NSDatadataWithContentsOfFile:filePath];

    UIImage*image=[UIImageimageWithData:data];

  • imageWithCGImage:通过Quartz2D对象创建。

    NSString*imagePath=[[NSBundlemainBundle]pathForResource:@"france"ofType:@"jpg"];

    UIImage*imageNameBack=[UIImageimageWithContentsOfFile:imagePath];

    UIImage*images=[UIImageimageWithCGImage:CGImageCreateWithImageInRect([imageNameBackCGImage],CGRectMake(0,20,1024,748))];

  • animatedImageNamed和animatedImageWithImages:创建图片动画

    1)animatedImageNamed

    [UIImageanimatedImageNamed:<#(nonnullNSString*)#>duration:<#(NSTimeInterval)#>];这是将项目中的一系列图片加载,图片格式使用png,名称后按照xx0,xx1,xx2,...,最高达到xx1024的顺序进行命名,在语句中只需要使用xx的名称即可。例如,项目中有sjf00.png,sjf01.png,sjf02.png,sjf03.png图片。

    UIImage*img=[UIImageanimatedImageNamed:@"sjf0"duration:1];

    然后[UIImagesetImage:img]即可播放动画

    2)animatedImageWithImages

    用法

    [UIImageanimatedImageWithImages:<#(nonnullNSArray<UIImage*>*)#>duration:<#(NSTimeInterval)#>]

    需要创建一个NSArray<UIImage>的图片类型的数组,将动画的图片放入到NSArray中。

    UIImage*image1=[UIImageimageNamed:@"phone1.jpg"];

    UIImage*image2=[UIImageimageNamed:@"phone2.jpg"];

    UIImage*image3=[UIImageimageNamed:@"phone3.jpg"];

    UIImage*anImg=[UIImageanimatedImageWithImages:[NSArrayarrayWithObjects:image1,image2,image3,nil]duration:2];

    [UIImagesetImage:anImg];

2、UIImage的几种初始化方法的对比

1)imageNamed:方法

imageNamed:是UIImage的一个类方法,它的加载流程如下:

a.系统回去检查系统缓存中是否存在该名字的图像,如果存在则直接返回。

b.如果系统缓存中不存在该名字的图像,则会先加载到缓存中,在返回该对象。

观察上面的操作我们发现系统会缓存我们使用imageNamed:方法加载的图像时候,系统会自动帮我们缓存。这种机制适合于那种频繁用到界面贴图累的加载,但如果我们需要短时间内频繁的加载一些一次性的图像的话,最好不要使用这种方法。

2)imageWithContentsOfFile:和initWithContentsOfFile:方法

这两个方法跟前一个方法一样都是完成从文件加载图像的功能。但是不会经过系统缓存,直接从文件系统中加载并返回。当收到内存警告的时候,系统可能会将UIImage内部的存储图像的内存释放,下一次需要绘制的时候会重新去加载。

3)imageWithData:方法

当使用imageWithData方法时,系统会将图像文件以数据的形式加载到应用程序中,如果你的图像文件不需要复用,或者文件比较大时尽力使用imageWithData方法。

4)imageWithCGImage:scale:orientation:方法

该方面使用一个CGImageRef创建UIImage,在创建时还可以指定方法倍数以及旋转方向。当scale设置为1的时候,新创建的图像将和原图像尺寸一摸一样,而orientaion则可以指定新的图像的绘制方向。

三、UIImageView的属性和方法

1、常用属性

1)image:defaultisnil。图片属性

2)highlightedImage:defaultisnil。高亮状态图片属性

3)userInteractionEnabled:defaultisNO。用户是否可以交互属性

4)highlighted:defaultisNO。判断图片是否是高亮状态

theseallowasetofimagestobeanimated.thearraymaycontainmultiplecopiesofthesame(下面属性允许图像组动画,该数组内可能包含相同的多个副本)

5)animationImages:ThearraymustcontainUIImages.Settinghidesthesingleimage.defaultisnil。该数组当中必须包含多张图片,设置单张图片将被隐藏,默认nil。

6)highlightedAnimationImages:ThearraymustcontainUIImages.Settinghidesthesingleimage.defaultisnil.高亮状态的组动画。

7)animationDuration:foronecycleofimages.defaultisnumberofimages*1/30thofasecond(i.e.30fps)。动画播放时间,对于一个周期的图像,默认的是图像是一秒30帧。

8)animationRepeatCount:0meansinfinite(defaultis0)。动画循环次数。0意味着无限(默认0)。

9)tintColor:给控件内子视图设置颜色。

10)focusedFrameGuide:ifadjustsImageWhenAncestorFocusedisset,theimageviewmaydisplayitsimageinalargerframewhenfocused.thislayoutguidecanbeusedtoalignotherelementswiththeimageview'sfocusedframe.如果设置了adjustsImageWhenAncestorFocused,图像视图可以在一个更大的frame中显示其图片的焦点。这个布局指南,可用于将其他元素与图像视图的聚焦帧对齐。

@property(readonly,strong)UILayoutGuide*focusedFrameGuide;

2、常用方法

1)initWithImage::构造方法,在初始化对象时直接进行默认图片进行赋值。

-(instancetype)initWithImage:(nullableUIImage*)image;

2)initWithImage:highlightedImage::构造方法,在初始化对象时直接给默认和高亮图片进行赋值

-(instancetype)initWithImage:(nullableUIImage*)imagehighlightedImage:(nullableUIImage*)highlightedImage;

3)startAnimating::开始动画

-(void)startAnimating;

4)stopAnimating::结束动画

-(void)stopAnimating;

5)isAnimating::动画中

-(BOOL)isAnimating;

四、例子

创建一个单窗口项目TestImage,在Main.storyboard上创建6个imageView,并进行属性链接。

图一UI设计

创建的项目文件列表。

图二项目

创建的outlet属性。

图三outlet属性

运行结果如下。

视频加载中...

源程序列表如下:

//

//ViewController.m

//TestImage

//

//Createdbywangxinnianon17/11/27.

//Copyright©2017年wangxinnian.Allrightsreserved.

//

#import"ViewController.h"

@interfaceViewController()

@property(strong,nonatomic)IBOutletUIImageView*imageNamedView;

@property(strong,nonatomic)IBOutletUIImageView*imageWithContentsOfFileView;

@property(strong,nonatomic)IBOutletUIImageView*imageWithDataView;

@property(strong,nonatomic)IBOutletUIImageView*imageWithCGImageView;

@property(strong,nonatomic)IBOutletUIImageView*animatedImageNameView;

@property(strong,nonatomic)IBOutletUIImageView*animatedImageWithImagesView;

@end

@implementationViewController

-(void)viewDidLoad{

[superviewDidLoad];

//Doanyadditionalsetupafterloadingtheview,typicallyfromanib.

//第一种方法

[_imageNamedViewsetImage:[UIImageimageNamed:@"france.jpg"]];

//第二种方法

NSString*filePath=[[NSBundlemainBundle]pathForResource:@"france"ofType:@"jpg"];

UIImage*images=[UIImageimageWithContentsOfFile:filePath];

[_imageWithContentsOfFileViewsetImage:images];

//第三种方法

//NSString*filePath=[[NSBundlemainBundle]pathForResource:@"france"ofType:@"jpg"];

NSData*data=[NSDatadataWithContentsOfFile:filePath];

UIImage*image=[UIImageimageWithData:data];

[_imageWithDataViewsetImage:image];

//第四种方法

UIImage*imageNameBack=[UIImageimageWithContentsOfFile:filePath];

UIImage*imageCG=[UIImageimageWithCGImage:CGImageCreateWithImageInRect([imageNameBackCGImage],CGRectMake(0,20,1024,748))];

[_imageWithCGImageViewsetImage:imageCG];

//animatedImageWithImagesView:动画一

UIImage*img=[UIImageanimatedImageNamed:@"sjf0"duration:0.5];

[_animatedImageNameViewsetImage:img];

//animatedImageWithImagesView:动画二

UIImage*image1=[UIImageimageNamed:@"phone1.jpg"];

UIImage*image2=[UIImageimageNamed:@"phone2.jpg"];

UIImage*image3=[UIImageimageNamed:@"phone3.jpg"];

UIImage*anImg=[UIImageanimatedImageWithImages:[NSArrayarrayWithObjects:image1,image2,image3,nil]duration:2];

self.animatedImageWithImagesView.image=anImg;

}

-(void)didReceiveMemoryWarning{

[superdidReceiveMemoryWarning];

//Disposeofanyresourcesthatcanberecreated.

}

@end