显示图片时候怎么拿到图片的个数打死不写错别字 在线死了iOS

iOS 面试题之加载单张图片到底会不会崩溃&
今天,一哥们去某公司面试iOS职位。其中一道题目问,加载一张图片,到底会不会崩溃呢?
我拿到这个问题,当时以为是获取网络图片,那还是可能崩溃的,但实际问题,还有半句,图片是本地的。。。
这问题,加载本地的怎么会崩溃呢?写这么久加载图片也没遇到如此问题。
===================================================
原来,iPhone毕竟是手持设备,它所占有的内存是有限的,当图片过大的时候会引起内存导致的崩溃现象。
IPhone下每个app可用的内存是被限制的,如果一个app使用的内存超过20M,则系统会向该app发送Memory Warning消息。收到此消息后,app必须正确处理,否则可能出错或者出现内存泄露。
app收到Memory Warning后会调用:
UIApplication::didReceiveMemoryWarning -& UIApplicationDelegate::applicationDidReceiveMemoryWarning,然后调用当前所有的viewController进行处理。因此处理的主要工作是在viewController。
创建viewcontroller时,执行顺序是loadview -& viewDidLoad。
当收到内存警告时,如果viewcontroller未显示(在后台),会执行didReceiveMemoryWarning -& viewDidUnLoad;如果viewcontroller当前正在显示(在前台),则只执行didReceiveMemoryWarning。
当重新显示该viewController时,执行过viewDidUnLoad的viewcontroller(即原来在后台)会重新调用loadview -& viewDidLoad。
后来,我又查了下,发现,原来还有这么大学问。
Apple官方的文档为生成一个UIImage对象提供了两种方法加载图片:
1. imageNamed,其参数为图片的名字;
2. imageWithContentsOfFile,其参数也是图片文件的路径。
那么两种有什么区别吗?
肯定是有的。根据Apple的官方文档:
imageNamed: 这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象如果它存在的话。如果缓存中没有找到相应的图片,这个方法从指定的文档中加载然后缓存并返回这个对象。因此imageNamed的优点是当加载时会缓存图片。所以当图片会频繁的使用时,那么用imageNamed的方法会比较好。例如:你需要在 一个TableView里的TableViewCell里都加载同样一个图标,那么用imageNamed加载图像效率很高。系统会把那个图标Cache到内存,在TableViewCell里每次利用那个图像的时候,只会把图片指针指向同一块内存。正是因此使用imageNamed会缓存图片,即将图片的数据放在内存中,iOS的内存非常珍贵并且在内存消耗过大时,会强制释放内存,即会遇到memory warnings。而在iOS系统里面释放图像的内存是一件比较麻烦的事情,有可能会造成内存泄漏。例如:当一个UIView对象的animationImages是一个装有UIImage对象动态数组NSMutableArray,并进行逐帧动画。当使用imageNamed的方式加载图像到一个动态数组NSMutableArray,这将会很有可能造成内存泄露。原因很显然的。
imageWithContentsOfFile:仅加载图片,图像数据不会缓存。因此对于较大的图片以及使用情况较少时,那就可以用该方法,降低内存消耗。
下面列举出两种方法的详细用法:
NSString *path = [[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”];
UIImage *image = [UIImage imageWithContentsOfFile:path];
NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:“png”];
NSData *image = [NSData dataWithContentsOfFile:filePath];
UIImage *image = [UIImage imageWithData:image]; //or = [UIImage imageWithContentsOfFile:filePath];
关键,在于
imageWithContentsOfFile:仅加载图片,图像数据不会缓存
imageNamed:先将图片缓存到内存中,然后在显示。
====================================================
以后即为题目的解答,分析应该是八九不离十了,如果你们有不懂的意见,可以告诉我哈,互相进步。
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.055 (s). 12 q(s)正确的添加图片方法 - 解决UIImageView.image = UIImage(named: String)不显示图像的问题
来源:博客园
这个问题很傻很天真,如何正确的添加图像资源我有一个名为 back.png 的图片,直接拷贝到 Finder 的 project 目录下了。用如下的语句: roleImageView.image = UIImage(named: "back")显示不了图片。其实不是语句有问题,是添加图像的方法不对。不应该直接把图片拷贝到 project 的目录下,而是应该如图这样拖拽到Assets.xcassets文件夹里。或者点击Xcode 左侧栏的 Assets.xcassets,然后在菜单里选择 Import file
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动[ios]UIImageView 动画-使用后的延迟,以显示数组中的最后一个图像执行选择器
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.
基本上,我要在 0.5 秒的时间内将循环遍历 8 PNGs UIImageView。在我开始动画的同时,我做了 performSelector 与 afterDelay 的 0.5 秒。所以我 UIImageView 已完成后进行动画处理将调用 animationTickDone 将隐藏的最后一个图像设置为无。
在这里反正是的代码:
@interface ViewController : UIViewController{
IBOutlet UIView *scannedV
IBOutlet UIImageView *animatedTickL
@property (nonatomic, retain) IBOutlet UIView *scannedV
@property (nonatomic, retain) IBOutlet UIImageView *animatedTickL
-(void)Found{
[self.view addSubview:scannedView];
[animatedTickLast setHidden:YES];
//place animated tick images into an array
NSMutableArray *animatedTickI
animatedTickImages = [[NSMutableArray alloc] init];
NSUInteger nimages = 0;
for (nimages=0; nimages&8; nimages++){
NSString *tickImageName = [NSString stringWithFormat:@"tick_%d.png", (nimages + 1)];
[animatedTickImages addObject:[UIImage imageNamed:tickImageName]];
//set up animated tick
UIImageView *animatedTick = [[UIImageView alloc] initWithFrame:CGRectMake(98, 213, 125, 90)];
[animatedTick setAnimationImages:animatedTickImages];
[animatedTick setAnimationDuration:0.5];
[animatedTick setAnimationRepeatCount:1];
[animatedTick startAnimating];
NSLog(@"animation started");
[self performSelector:@selector(animationTickDone) withObject:nil afterDelay:0.5];
[scannedView addSubview:animatedTick];
NSLog(@"animation added into view");
[animatedTickImages release];
- (void)animationTickDone{
NSLog(@"delay function begins");
[animatedTickLast setHidden:NO];
sleep(1); //sleep so that scannedView stays on screen for at least 1.5 seconds (0.5 after animation + 1 from sleep);
现在,这一问题。动画本身很好,和很有效。但当第一次调用 Found() 时,animatedTickLast 将变得可见动画结束后。但时过发现再次调用短,animatedTickDone 从来没有再次出现,它是只是一个空的空间。
小时后看看 web 搜索并和它一起玩,我只是不明白这个问题是什么,为什么就不会出现。我一度以为之前我 animatedTickLast 能有机会获取调用 sleep () 设置隐藏为 no,但删除 sleep () 它仍没工作了。
把我逼疯现在所以任何帮助非常感谢。
解决方法 1:
如果我理解正确的话要图像后在 UIImageView animaton。只需设置之前动画图像和你很好 !
[animatedTick setAnimationImages:animatedTickImages];
[animatedTick setAnimationDuration:0.5];
[animatedTick setAnimationRepeatCount:1];
[animatedTick setImage:theImageYouLikeToHave];
[animatedTick startAnimating];ios开发小点积累(17)
1、显示app内置的图片的方法
UIImage&*myImage&=&[UIImage&imageNamed:@&图片名&];
然后用[self.uiimageview setImage:myImage]
2、显示手机内部的地址的图片
UIImage*&myImage4&=&[[UIImage&alloc]initWithContentsOfFile:[NSString&stringWithFormat:@&%@/Documents/ppp.png&,NSHomeDirectory()]];&
3、在线加载图片
UIImage&*myImage2&=[UIImage&imageWithData:[NSData&dataWithContentsOfURL:[NSURL&URLWithString:@&/xiaotupian/icons/png/37.png&]]];
4、下载图片和加载的方法
//下载图片
-(UIImage *) getImageFromURL:(NSString *)fileURL {
&&&&NSLog(@&执行图片下载函数&);
&&&&UIImage
&&&&NSData
* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]];
&&&&result
= [UIImage imageWithData:data];
&&&&//下面是一句话搞定,上面是分开来做得。
&&&&//UIImage
* result = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]]];
&&&&return
//下面是定义ImageView的方法
-(void) initImageView{
&&&&NSString
* urlWeb=@&/blog7newtpl/image/30/30_1/images/sinablogb.jpg&;
&&&&UIImageView
* imageView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0 , 200, 400)];
&&&&imageView.backgroundColor=[UIColor
blueColor];
&&&&//两种方法,用imageNamed可以把图片放入内存,重复使用。但是太多会挂掉,一般重复使用的图片用imageNamed
&&&&[imageView
setImage:[self getImageFromURL:urlWeb]];
&&&&//[imageView
setImage:[UIImage imageNamed:@&desc_bn.png&]];
&&&&[self.view
addSubview:imageView];
最后在viewDidLoad函数里面调用initImageView方法就行了。
5、图片的属性控制
&//& & (2)设置圆角
& & imageView.layer.masksToBounds&=&YES;
& & imageView.layer.cornerRadius&=&10;
& &&//& & (3)设置边框颜色和大小
& & imageView.layer.borderColor&= [UIColor&orangeColor].CGColor;
& & imageView.layer.borderWidth&=&2;
& &&//& & (4)contentMode属性:当图片小于imageView的大小处理图片显示
& &&//& &&这个属性是用来设置图片的显示方式,如居中、居右,是否缩放等,有以下几个常量可供设定:
& &&//& & UIViewContentModeScaleToFill&:填充整个UIViewContentModeScaleAspectFit UIViewContentModeScaleAspectFill UIViewContentModeRedraw UIViewContentModeCenter UIViewContentModeTop
UIViewContentModeBottom UIViewContentModeLeft UIViewContentModeRight UIViewContentModeTopLeft UIViewContentModeTopRight UIViewContentModeBottomLeft UIViewContentModeBottomRight
& & imageView.contentMode&=&UIViewContentModeScaleAspectFit;
& &&//(5)播放一系列图片
& &&UIImage&*image1 = [UIImage&imageNamed:@&homeNaviLeftBtn&];
& &&UIImage&*image2 = [UIImage&imageNamed:@&homeNaviRightBtn&];
& &&UIImage&*image3 = [UIImage&imageNamed:@&image_photo&];
& &&NSArray&*imagesArray =&@[image1,image2,image3];
& & imageView.animationImages&= imagesA
& &&//&设定所有的图片在多少秒内播放完毕
& & imageView.animationDuration&= [imagesArray&count];
& &&//&不重复播放多少遍,0表示无数遍
& & imageView.animationRepeatCount&=&0;
& &&//&开始播放
& & [imageView&startAnimating];
&& &&//(6)为图片添加单击事件:一定要先将userInteractionEnabled置为YES,这样才能响应单击事件
& & imageView.userInteractionEnabled&=&YES;
& &&UITapGestureRecognizer&*singleTap = [[UITapGestureRecognizer&alloc]initWithTarget:self&action:@selector(tapImageView:)];
& & [imageView&addGestureRecognizer:singleTap];
& &&//(7)其他设置
//& & imageView.hidden = YES或者NO;& & //&隐藏或者显示图片
& & imageView.alpha&=0.5;& &&//&设置透明度
& &&//&设置高亮时显示的图片
& &&//imageView.highlightedImage = (UIImage *)hightlightedI
&& &&//imageView.image = (UIImage *) //&设置正常显示的图片
& &&//设置位置&1)修改center ImageView的中间点2)修改frame
& & imageView.frame&=&CGRectMake(10,&66,&300,&400);
//& & imageView.center = CGPointMake(0, 0);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:14451次
排名:千里之外
原创:29篇
(2)(1)(6)(17)(1)(4)

我要回帖

更多关于 打死不写错别字 在线 的文章

 

随机推荐