当前位置:编程学习 > wap >>

[IOS实例小计]UIImageView

预备知识:
UIImage
 
是一个专门存储图片数据的对象,默认兼容的图片格式是 PNG,可以通过文件、Quartz image对象或 image Data数据得到一个图片对象。
 
UIImage相关功能比较多,除了代表图片数据外,还可以对图片中的数据进行处理,从而产生不同的图片效果。
 
 
UIImage创建
 
用UIImage加载图像的方法很多,最常用的是下面四种:
 
 一、从当前工程目录中得到图片,用imageNamed函数
 
[UIImage imageNamed:ImageName];
 
[UIImage imageNamed:@"a.png"]; 
 
 二、从数据库得到图片、用NSData的方式加载,一般从数据库读取图片使用,例如: 
 
NSString *filePath = [[NSBundle mainBundle]pathForResource:fileName ofType:extension];
 
NSData *image = [NSDatadataWithContentsOfFile:filePath];
 
[UIImage imageWithData:image]; 
 
三,从文件目录中得到图片,使用[UIImage imageWithContentOfFile:] 或者[imageinitWithContentOfFile:] 
 
NSString *filePath = [[NSBundle mainBundle]pathForResource:fileName ofType:@"图片扩展名"];
 
[UIImage imageWithContentsOfFile:aImagePath]; 
 
//绑定文件夹中  icon.png 的图片
 
NSString *path = [[NSBundle mainBundle]pathForResource:@”icon”ofType:@”png”];
 
NSImage *myImage = [UIImageimageWithContentsOfFile:path];   
 
四、从网络得到图片
 
UIImage *image = [[UIImage alloc]initWithData:[NSData dataWithContentsOfURL[NSURLURLWithString:@"/2013/0702/20130702085459778.jpg"]]]; 
 
UIImageView *imageView = [[UIImageView alloc]initWithImage:image];
 
UIImageView 
 
UIImageView:可以通过UIImage加载图片赋给UIImageView,加载后你可以指定显示的位置和大小。 
 
 
1、初始化 
 
UIImageView *imageView = [[UIImageView alloc]      initWithFrame:CGRectMake(0.0,45.0,300,300)]; 
 
imageView.image = [UIImageimageNamed:@"a.png"];//加载入图片 
 
[self.view addSubView:image]; 
 
[imageView release]; 
 
//imageNamed方法是不能通过路径进行加载图片的,此方式容易引起发生内存警告从而导致自动退出的问题。
 
//最好是通过直接读取文件路径[UIImageimageWithContentsOfFile]解决掉这个问题.
 
NSImage *image = [[NSImagealloc]initWithContentsOfURL:(NSURL *)]; 
 
NSImage *image = [[NSImagealloc]initWithContentsOfFile:(NSString *)]; 
 
//让一个UIImageView响应点击事件 
 
//创建一个指定大小的图片区域
 
UIImageView *imgView =[[UIImageView alloc]initWithFrame:CGRectMake(0, 0,320, 44)];
 
//允许用户操作该 区域
 
imgView.userInteractionEnabled=YES;
 
//创建用户“轻击手势”的响应,并通过 @selector() 指定,用户点击后调用的方法
 
UITapGestureRecognizer *singleTap=[[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(onClickImage)];
 
//把手势对象,添加给视图对象
 
[imgView addGestureRecognizer:singleTap];
 
//释放资源
 
[singleTap release];  
 
-(void)onClickImage{
 
   //here, do whatever you wantto do
 
   NSLog(@"imageview is clicked!");
 
}
 
1)用imageNamed的方式加载时,系统会把图像Cache到内存。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存,而且释放图像的内存是一件相对来说比较麻烦的事情。例如:如果利用imageNamed的方式加载图像到一个动态数组NSMutableArray,然后将将数组赋予一个UIView的对象的animationImages进行逐帧动画,那么这将会很有可能造成内存泄露。并且释放图像所占据的内存也不会那么简单。但是利用imageNamed加载图像也有自己的优势。对于同一个图像系统只会把它Cache到内存一次,这对于图像的重复利用是非常有优势的。例如:你需要在一个TableView里重复加载同样一个图标,那么用imageNamed加载图像,系统会把那个图标Cache到内存,在Table里每次利用那个图像的时候,只会把图片指针指向同一块内存。这种情况使用imageNamed加载图像就会变得非常有效。
 2)利用NSData方式加载时,图像会被系统以数据方式加载到程序。当你不需要重用该图像,或者你需要将图像以数据方式存储到数据库,又或者你要通过网络下载一个很大的图像时,请尽量使用imageWithData的方式加载图像。
用NSTimer去实现apple的UIImageView animation的效果(这是一种解决办法)
 
扩展:
为UIImageView增加手势
 
[ImageView addGestureRecognizer:我们自己的手势recognizer];
 
如何创建一个手势?看看UITapGestureRecognizer 的用法吧
 
 
 //单指单击
 
 UITapGestureRecognizer *singleFingerOne = [[UITapGestureRecognizer alloc] initWithTarget:self
 action:@selector(handleSingleFingerEvent:)];
 singleFingerOne.numberOfTouchesRequired = 1; //手指数
 singleFingerOne.numberOfTapsRequired = 1; //tap次数
 singleFingerOne.delegate= self;
 
 //单指双击
 UITapGestureRecognizer *singleFingerTwo = [[UITapGestureRecognizer alloc] initWithTarget:self
 action:@selector(handleSingleFingerEvent:)];
 singleFingerTwo.numberOfTouchesRequired = 1;
 singleFingerTwo.numberOfTapsRequired = 2;
 singleFingerTwo.delegate= self;
 
 //双指单击
 UITapGestureRecognizer *doubleFingerOne = [[UITapGestureRecognizer alloc] initWithTarget:self
 action:@selector(handleDoubleFingerEvent:)];
 doubleFingerOne.numberOfTouchesRequired = 2;
 doubleFingerOne.numberOfTapsRequired = 1;
 doubleFingerOne.delegate= self;
 
 UITapGestureRecognizer *doubleFingerTwo = [[UITapGestureRecognizer alloc] initWithTarget:self
 action:@selector(handleDoubleFingerEvent:)];
 doubleFingerTwo.numberOfTouchesRequired = 2;
 doubleFingerTwo.numberOfTapsRequired = 2;
 doubleFingerTwo.delegate= self;
 
 //如果不加下面的话,当单指双击时,会先调用单指单击中的处理,再调用单指双击中的处理
 [singleFingerOne requireGestureRecognizerToFail:singleFingerTwo];
 //同理双指亦是如此
 [doubleFingerOne requireGestureRecognizerToFail:doubleFingerTwo];
 
 [self.view addGestureRecognizer:singleFingerOne];
 [self.view addGestureRecognizer:singleFingerTwo];
 [self.view addGestureRecognizer:doubleFingerOne];
 [self.view addGestureRecognizer:doubleFingerTwo];
 
 [singleFingerOne release];
 [singleFingerTwo release];
 [doubleFingerOne release];
 [doubleFingerTwo release];
处理事件的方法,代码:
 //处理单指事件
- (void)handleSingleFingerEvent:(UITapGestureRecognizer *)sender
{
if(sender.numberOfTapsRequ
补充:移动开发 , IOS ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,