UIImageView是我们做iOS开发用的非常多的一个控件,IOS中的各种图片,包括头像,有的背景图片等基本都要用到这个控件。
1、常用的属性以及方法
<span style="font-size:14px;">// 初始化图片
- (id)initWithImage:(UIImage *)image;
// 初始化带高亮的图片
- (id)initWithImage:(UIImage *)image highlightedImage:(UIImage
*)highlightedImage
// 点语法设置图片
@property(nonatomic,retain) UIImage *image;
// 点语法设置高亮图片
@property(nonatomic,retain) UIImage *highlightedImage
// 是否打开用户交互,默认为NO
@property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteractionEnabled;
@property(nonatomic) UIViewContentMode contentMode;</span>
2、UIImageView的技术点
UIImageView常用属性就这么多,但是UIImageView的技术点确很多,比如contentMode,这个属性是继承自父类UIView的,但是这个枚举类型中三个类型是专门为UIImageView使用的,用来处理图片的拉伸方式。对应的拉伸效果如下:
有的时候,我们需要给UIImageView加上点击事件,这时候我们有两种方式来实现这个功能。首先两种方式都需要设置userInteractionEnabled为YES,因为UIImageView的这个属性默认为NO,其实UILabel也是默认为NO的。
方法一:给UIImageView加上手势
示例代码如下:
<span style="font-size:14px;">UIImageView *imageView1 = [[UIImage alloc] initWithFrame:CGRectMake(110,20,100,100)];
imageView1.userInteractionEnabled = YES;
imageView1.backgroundColor = [UIColor clearColor];
imageView1.image = [UIImage imageNamed:@"love.png"];
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] intiWithTarget:self action:@selector(tapAction)];
[imageView1 addGestureRecognizer:tapGesture];
[tapGesture release];
[self.view addSubView:imageView1];
[imageView1 release];</span>
上面代码是先创建了一个UIImageView,然后给其绑定了一个tap手势,通过实现手势的方法来处理点击事件。
方法二:在UIImageView上添加一个自定义的透明的Button(或者干脆就用button来实现这个功能)
<span style="font-size:14px;">UIImageView *imageView1 = [[UIImage alloc] initWithFrame:CGRectMake(110,20,100,100)];
imageView1.userInteractionEnabled = YES;
imageView1.backgroundColor = [UIColor clearColor];
imageView1.image = [UIImage imageNamed:@"love.png"];
UIButton *button = [[UIButton alloc] initWithFrame:imageView1.bounds];
[button addTarget:self action:@selector(clickAction) forControlEvents:UIControlEventTouchUpInside];
[imageView1 addSubView:button];
[button release];
[imageView1 release];</span>
有时候我们需要对一个图片进行处理,也会有一个常用的方法:
<span style="font-size:14px;">- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;</span>
该方法第一个参数是拉伸距离原点的横向距离,第二个参数是纵向距离距离,会将一个图片拉伸处理后返回一个新的图片。
还有一个技术点,有的时候,我们需要加载网络图片,不是app里的资源图片,这时候怎么处理呢?UIImageView是不可以加载网络图片的。
我们可以利用UIImage的imageWithData这个方法,但是这个方法会阻塞主线程,示例代码如下:
<span style="font-size:14px;">UIImageView *imageView1 = [[UIImage alloc] initWithFrame:CGRectMake(110,20,100,100)];
imageView1.userInteractionEnabled = YES;
imageView1.backgroundColor = [UIColor clearColor];
NSString *imagePath = @"http://www.baidu.com/xxxxx.png";
NSData *data = [NSData dataWithContentsOfURL:[[NSURL alloc] initWithString:imagePath]];
imageView1.image = [UIImage imageWithData:data];
[imageView1 release];</span>
其实我们可以用第三方的框架来实现,这个框架叫SDWebImage,它对UIImageView添加了category方法,可以直接异步加载一个NSURL。
<span style="font-size:14px;">UIImageView *imageView1 = [[UIImage alloc] initWithFrame:CGRectMake(110,20,100,100)];
imageView1.userInteractionEnabled = YES;
imageView1.backgroundColor = [UIColor clearColor];
NSString *imagePath = @"http://www.baidu.com/xxxxx.png";
//加载网络图片数据
[_image setImageWithURL:[NSURL URLWithString:*imagePath ]];
[imageView1 release];</span>
最后,补充一点,UIImageView可以播放多张图片。代码如下:
<span style="font-size:14px;">UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(160-41/2.0, 100, 100, 150)];
imgView.animationImages = @[[UIImage imageNamed:@"img_two.jpg"],[UIImage imageNamed:@"img_three.jpg"]];
imgView.animationDuration = 2;
[imgView startAnimating];</span>
上面的animationDuration是动画持续时间,就是两张图片一共的播放时间,如果是4张图片,就是每张播放播放0.5秒的样子。
还有一个animationRepeatCount是设置重复次数,默认是0次,无限重复。