关于iOS网络请求tabbart图片显示不正常的问题
2016-12-28 17:44
411 查看
最近项目改用网络加载图标以及tabbar的图片 但是tabbar一开始 的图片 显示完全不正常
不仅大小不正常 而且我的图片是彩色的 现在是白和蓝色 网上查了一些资料 原来tabbar会默认图片的颜色 这个时候我们需要使用image的一个设置 使用
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal
保证图片不被修改 结果图片会变成这样
图片颜色回来了 但是大小还是不正常 捣鼓了一下午 中间修改图片尺寸 甚至自定义tabbar 终于发现问题 需要在图片后边加上@2x或者@3x(网络请求的话可以在存本地的时候将图片名称拼接@2x
@3x 具体几倍可以通过后台设置来取
) 不然tabbar会把图片当成@1x的 即图片多大 tabbar的图片就有多大 后来将图片甚至成@2x 图片正常了
2017.4.7更新 鉴于很多人让我贴代码 我还是在这里讲一下 我们要做的就是简单的将网络请求图片数据写入本地 中间出现的唯一问题就是图片没法适应高度 苹果官方文档里tabbar图片尺寸为25x25的 直接让后台给这么大的肯定不行 因为图片会模糊 所以我让后台给 50x50的 我这边名称拼接@2x
1.获取图片名
NSArray*stringArr =
[imageUrlcomponentsSeparatedByString:@"/"];imageUrl为从接口获取的图片URL
NSString*imageName1 = stringArr.lastObject;
NSArray *arr = [imageName1 componentsSeparatedByString:@"."];
NSString *imageName;
if
(![arr[0] isEqualToString:@""])
{
imageName =[NSString stringWithFormat:@"%@@2x.jpg",arr[0]];
}//一般URL就是服务器拼接图片名称 比如:http://pic55.nipic.com/file/20141208/19462408_171130083000_2.jpg,而我们要做的就是获取图片名称19462408_171130083000_2,拼接@2x.jpg然后创建路径(文件夹路径
拼接 图片名称 比如:沙河路径19462408_171130083000_2@2x.jpg),然后将其data写入到该路径下
2.写入到沙盒路径下
NSData *data = [NSDatadataWithContentsOfURL:[NSURLURLWithString:imageUrl]];
UIImage *image = [UIImageimageWithData:data];//这两步是下载图片到本地
耗时操作 建议放在子线程来做(为image赋值在子线程是可操作的 并不是刷新UI 不需要回到主线程做)
NSArray *paths =NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
NSString *filePath = [[paths
objectAtIndex:0]stringByAppendingPathComponent:imageName];
//这一步就是拼接路径了
if
([UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES])
{
}//这一步就是写入操作了 返回值是一个bool值 表明是否成功
不仅大小不正常 而且我的图片是彩色的 现在是白和蓝色 网上查了一些资料 原来tabbar会默认图片的颜色 这个时候我们需要使用image的一个设置 使用
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal
保证图片不被修改 结果图片会变成这样
图片颜色回来了 但是大小还是不正常 捣鼓了一下午 中间修改图片尺寸 甚至自定义tabbar 终于发现问题 需要在图片后边加上@2x或者@3x(网络请求的话可以在存本地的时候将图片名称拼接@2x
@3x 具体几倍可以通过后台设置来取
) 不然tabbar会把图片当成@1x的 即图片多大 tabbar的图片就有多大 后来将图片甚至成@2x 图片正常了
2017.4.7更新 鉴于很多人让我贴代码 我还是在这里讲一下 我们要做的就是简单的将网络请求图片数据写入本地 中间出现的唯一问题就是图片没法适应高度 苹果官方文档里tabbar图片尺寸为25x25的 直接让后台给这么大的肯定不行 因为图片会模糊 所以我让后台给 50x50的 我这边名称拼接@2x
1.获取图片名
NSArray*stringArr =
[imageUrlcomponentsSeparatedByString:@"/"];imageUrl为从接口获取的图片URL
NSString*imageName1 = stringArr.lastObject;
NSArray *arr = [imageName1 componentsSeparatedByString:@"."];
NSString *imageName;
if
(![arr[0] isEqualToString:@""])
{
imageName =[NSString stringWithFormat:@"%@@2x.jpg",arr[0]];
}//一般URL就是服务器拼接图片名称 比如:http://pic55.nipic.com/file/20141208/19462408_171130083000_2.jpg,而我们要做的就是获取图片名称19462408_171130083000_2,拼接@2x.jpg然后创建路径(文件夹路径
拼接 图片名称 比如:沙河路径19462408_171130083000_2@2x.jpg),然后将其data写入到该路径下
2.写入到沙盒路径下
NSData *data = [NSDatadataWithContentsOfURL:[NSURLURLWithString:imageUrl]];
UIImage *image = [UIImageimageWithData:data];//这两步是下载图片到本地
耗时操作 建议放在子线程来做(为image赋值在子线程是可操作的 并不是刷新UI 不需要回到主线程做)
NSArray *paths =NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
NSString *filePath = [[paths
objectAtIndex:0]stringByAppendingPathComponent:imageName];
//这一步就是拼接路径了
if
([UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES])
{
}//这一步就是写入操作了 返回值是一个bool值 表明是否成功
相关文章推荐
- 关于Cocos2d-x 3.0正式版 粒子问题在IOS上正常显示,在Android下有问题的解决方式
- 关于微信wx.previewImage图片没有正常显示的问题
- 关于iOS中网络请求汉字转码问题
- 关于JKAlertDialog在多个视图控制器跳转后不能正常显示的问题的解决--IOS
- ios 关于UIImageView的显示问题——居中显示或者截取图片的中间部分显示
- ios--关于子线程发送网络请求接受不到响应问题
- ios 关于UIImageView的显示问题——居中显示或者截取图片的中间部分显示
- iOS网络请求下来的数据显示时出现的问题
- 关于asp.net mvc中 weiui gallery中IOS 下不显示预览图片问题的解决方式
- 关于IOS某图片添加控件,图片从相册或拍照保存后,再次进入时点击放大图无法显示的问题
- 请求网络图片 无法显示问题
- 关于Cocos2d-x 3.0正式版 粒子问题在IOS上正常显示,在Android下有问题的解决方案
- iOS开发:过滤网络请求中,服务器返回空值null数据的处理(过滤null显示问题)
- 关于tabBar的图片不能正常显示问题
- iOS 网络图片处理问题中,怎么解决一个相同的网络地址重复请求的问题
- 关于ext2.2.1rdadio和checkbox不能正常显示的问题解决方法
- 关于HttpModule中像图片,*.css,*.js等资源文件也被请求问题的解决
- 关于CImage和AlphaBlend的透明PNG图片显示问题
- treeview上传后无法正常显示图片问题
- 关于HttpModule中像图片,*.css,*.js等资源文件也被请求问题的解决