imageView提供了一个显示单个或者动态显示多个图片对象的容器。对于动画图像,UIImageView提供了周期和频率的控制。当imageView对象显示单个图像时,其实际行为是基于image属性和视图。如果图像的leftCapWitdth(水平end-cap大小)和topCapHeight(垂直end-cap大小)非0,则图像会根据这些属性进行延伸。否则,图像根据视图的contentMode属性进行大小、比例和位置的适应调整。推荐使用相同大小的图片,如果大小不同,每一个都会分别的适应contentMode模式。
基础
提升image view的性能
由于imagView在组成图像时,图像的比例和透明度都有非常大的开销。为了提高性能,应该进行如下操作:
- 尽可能的提供预定大小的图像。例如:如果需要一个大图像频繁的现实缩略图,应该考虑将缩略图存放的cache中。
- 限制图片大小。
- 如果不必要,取消透明度混合。
NOTE
如果希望子类化UIImageView,应该意识到以下的行为:
- UIImageView已经优化了图片的显示。UIImageView没有调用子类的drawRect:方法。如果子类希望自定义绘制代码,应该子类化UIVIew
- 新的imageView对象默认配置为忽略用户事件。如果希望处理UIImageView子类的自定义事件,必须将userInteractionEnabled的变量设置为YES。
初始化对象
- -(id)initWithImage:(UIImage *)image
- 返回一个通过指定图片初始化的UIImageView对象
- -(id)initWithImage:(UIImage *)image highlightedImage:(UIImage *)highlightedImage
- 返回一个通过正常图片以及强调图片初始化的UIImageView对象
图像数据
- @property (nonatomic, retain)UIImage * image
- 在imageView正常状态时显示的图像
- @property (nonatomic, retain) UIImage * highlightedImage
- 在imageView在强调状态时显示的图像
动画图像
- @property (nonatomic,copy) NSArray * animationImages
- 用于动画使用的图像数组
- @property (nonatomic, copy) NSArray * highlightedAnimationImages
- 强调状态时用于动画使用的图像数组
- @property (nonatomic) NSTimeInterval animationDuration
- 一个图像周期花费的时间,单位为秒。该属性的默认值为(图片数 * 1/30 s)。
- @property (nonatomic) NSInteger animationRepeatCount
- 动画重复的次数
- -(void)startAnimating
- 开始receiver中的图像动画
- -(void)stopAnimating
- 停止receiver中的图像动画
- -(BOOL)isAnimating
- 表示当前动画是否运行
设置与获得属性
- @property (nonatomic, getter=isUserInteractionEnabled) BOOL userInteractionEnabled
- 表示是否忽略用户事件,将其从事件队列中移除。该属性从UIVIew中继承。
- @property (nonatomic, getter=isHighlighted) BOOL highlighted
- 决定当前image是否为强调状态。
- @property (nonatomic, retain) UIColor * tintColor
- 在视图层次结构中色彩模板图像使用的颜色。具体参考renderingMode
实践
基础
定义一个图像视图,为视图定义两种状态,即:正常状态下的图片和强调状态下的图片
代码片段>>
-(void) initStaticIamgeView:(int)x yCoordinate:(int)y{
staticImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1.png"] highlightedImage:[UIImage imageNamed:@"image2.png"]];
staticImageView.frame = CGRectMake(x, y, 320, 213);
[self.view addSubview:staticImageView];
}
显示效果>>
进阶
定义一个图像视图,显示一组动画。
代码片段>>
-(void) initAnimatedImageView:(int)x yCoordinate:(int)y{
animatedImageView = [[UIImageView alloc] initWithFrame:CGRectMake(x, y, 320, 213)];
animatedImageView.animationImages = [[NSArray alloc] initWithObjects:[UIImage imageNamed:@"image1.png"],
[UIImage imageNamed:@"image2.png"],
[UIImage imageNamed:@"image3.png"],
[UIImage imageNamed:@"image4.png"],
[UIImage imageNamed:@"image5.png"],
[UIImage imageNamed:@"image6.png"],
nil];
//若是不设置动画周期,由于默认为1/30 s显示一个图片,会显示的非常快。
animatedImageView.animationDuration = 6; //设置后,每s显示一个图片
//设置动画循环的周期数,当动画循环结束之后,图像将会消失
animatedImageView.animationRepeatCount = 1;
[animatedImageView startAnimating];
[self.view addSubview:animatedImageView];
}