UIImageView
1.初始化
UIImageView *imageView=[[UIImageView alloc] initWithFrame:CGRectMake(100, 200, 120, 120)];
⚠️:fram和bounds的区别
我的理解是,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)。
2.设置图片
第一种:
[imageView setImage:[UIImage imageNamed:@"1.jpeg"]];
//第二种:
NSString *filePath=[[NSBundle mainBundle] pathForResource:@"1" ofType:@"jpeg"];
UIImage *images=[UIImage imageWithContentsOfFile:filePath];
//[imageView setImage:images];
//第三种:
NSData *data=[NSData dataWithContentsOfFile:filePath];
UIImage *image2=[UIImage imageWithData:data];
[imageView setImage:image2];
⚠️:
其中第一 二种属于一种,共两种:
1)用imageNamed的方式加载时,系统会把图像Cache到内存。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存,而且释放图像的内存是一件相对来说比较麻烦的事情。例如:如果利用imageNamed的方式加载图像到一个动态数组NSMutableArray,然后将将数组赋予一个UIView的对象的animationImages进行逐帧动画,那么这将会很有可能造成内存泄露。并且释放图像所占据的内存也不会那么简单。但是利用imageNamed加载图像也有自己的优势。对于同一个图像系统只会把它Cache到内存一次,这对于图像的重复利用是非常有优势的。例如:你需要在一个TableView里重复加载同样一个图标,那么用imageNamed加载图像,系统会把那个图标Cache到内存,在Table里每次利用那个图像的时候,只会把图片指针指向同一块内存。这种情况使用imageNamed加载图像就会变得非常有效。
2)利用NSData方式加载时,图像会被系统以数据方式加载到程序。当你不需要重用该图像,或者你需要将图像以数据方式存储到数据库,又或者你要通过网络下载一个很大的图像时,请尽量使用imageWithData的方式加载图像。
无论用哪种方式加载图像,图像使用结束后,一定要记得显示释放内存。
3.UIImageView的常用方法
UIImage *oneImage = [UIImage imageNamed:@"max.png"]; // 使用ImageView通过name找到图片
UIImageView *oneImageView = [[UIImageView alloc] initWithImage:oneImage]; //把oneImage添加到oneImageView上
oneImageView.frame = CGRectMake(10, 10, 300, 300); // 设置图片位置和大小
oneImageView.bounds = CGRectMake(10, 10, 280, 280); // 设置图片位置和大小,如果设置了frame,那么它这是的位置将不起作用
oneImageView.backgroundColor = [UIColor redColor]; // 设置背景颜色
oneImageView.alpha = 1.0; // 设置透明度
4.contentMode属性
oneImageView.contentMode = UIViewContentModeTop;
// 有以下一些相对位置关系
// UIViewContentModeScaleToFill
// UIViewContentModeScaleAspectFit
// UIViewContentModeScaleAspectFill
// UIViewContentModeRedraw
// UIViewContentModeCenter
// UIViewContentModeTop
// UIViewContentModeBottom
// UIViewContentModeLeft
// UIViewContentModeRight
// UIViewContentModeTopLeft
// UIViewContentModeTopRight
// UIViewContentModeBottomLeft
// UIViewContentModeBottomRight
⚠️:注意以上几个常量,凡是没有带Scale的,当图片尺寸超过 ImageView尺寸时,只有部分显示在ImageView中。UIViewContentModeScaleToFill属性会导致图片变形。UIViewContentModeScaleAspectFit会保证图片比例不变,而且全部显示在ImageView中,这意味着ImageView会有部分空白。UIViewContentModeScaleAspectFill也会证图片比例不变,但是是填充整个ImageView的,可能只有部分图片显示出来。具体效果可以自己尝试,这里就不上图了。
5.图片的移动旋转
oneImageView.center = CGPointMake(150, 300); // 修改图片center的位置
oneImageView.transform = CGAffineTransformMakeTranslation(20, 20); // 把一个图片移动一段距离 其中20表示想要往x或者y方向移动多少,而不是移动到多少。
oneImageView.transform = CGAffineTransformMakeRotation(0.0f); // 旋转图像一定角度 注意:单位是弧度,而不是我们最常用的度数,所以可以写一个宏定义:#define degreesToRadians(x) (M_PI*(x)/180.0)
oneImageView.transform = CGAffineTransformMakeScale(0.5, 0.5); // 其中,CGFloat scale_w与CGFloat scale_h分别表示将原来的宽度和高度缩放到多少倍,下图是缩放到原来的0.5倍
6.图片点击事件
// 一定要先将userInteractionEnabled置为YES,这样才能响应单击事件
oneImageView.userInteractionEnabled = YES; // 设置图片可以交互
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImageView:)]; // 设置手势
[oneImageView addGestureRecognizer:singleTap]; // 给图片添加收拾
7.设置图片连续播放,实现动画效果
oneImageView.animationImages = [NSArray arrayWithObjects:[UIImageimageNamed:@"max.png"], [UIImage imageNamed:@"min.png"], nil];
oneImageView.animationDuration = 0.3f; // 设置循环一次的时间
oneImageView.animationRepeatCount = 0; // 循环的次数。设置为0时无线循环
[oneImageView startAnimating]; // 开始动画
// [oneImageView stopAnimating]; // 停止动画
8.获取网络中的图片
UIImage *urlImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"www.baidu.com"]]];
9.按钮和图片的结合
1)ImageView和Button的比较
Button按钮的内部可以放置多张图片(4),而ImageView中只能放置一张图片。
(2)说明:
ImageView只能显示一张图片,我们知道所有的ui控件都继承自UIView,所有的视图都是容器,容易意味着还能往里边加东西。那么能否在ImageView中加上按钮呢?
(3)在ImageView中添加按钮的操作
通常有两种方式创建控件,一是直接在storyboard或xib界面设计器上拖拽,另一种方式是使用手写代码的方式创建。
在界面设计器上面拖拽的无法在ImageView中添加按钮,那么我们尝试一下手写代码。
前提是背景图片属性 imageView.userInteractionEnabled = YES;否则按钮是没响应的。
10.其他的一些属性
imageView.hidden = YES或者NO; // 隐藏或者显示图片
imageView.alpha = (CGFloat) al; // 设置透明度
imageView.highlightedImage = (UIImage *)hightlightedImage; // 设置高亮时显示的图片
imageView.image = (UIImage *)image; // 设置正常显示的图片
[imageView sizeToFit]; // 将图片尺寸调整为与内容图片相同