winform listview 设置选中项 图片_IOS 图片资源管理的三种形式

1、Assets.xcassets 一般是以蓝色的Assets.xcassets的文件夹形式在工程中,以Image Set的形式管理。当一组图片放入的时候同时会生成描述文件Contents.json。且在打包后以Assets.car的形式存在,不能打开(网上有工具ThemeEngine可以打开,感兴趣的可以测试)。以此方式放入的图片并不在mainBundle中 。

(1)特性:ImageAssets 也是从图片文件中读取图片数据转为 UIImage, 只不过这些图片数据都打包在 ImageAssets 中. 还有一个最大的区别就是图片缓存. 相当于有一个字典, key 是图片名, value是图片对象. 调用imageNamed:方法时候先从这个字典里取, 如果取到就直接返回, 如果取不到再去文件中创建, 然后保存到这个字典后再返回. 由于字典的key和value都是强引用, 所以一旦创建后的图片永不销毁.

(2)优势: 性能好,节省Disk。Asset Catalogs会用一个高度优化的特殊格式来存所有图片,而不是一个一个的单独的图片资源,会更少的涉及频繁Disk I/O操作,且会按需下载适合你机型的合适分辨率的图片资源;安全性。图片资源得到一定程度保护(Asset,car不易打开) 当一个 icon 在多个地方需要被显示的时候, 其对应的UIImage对象只会被创建一次, 而且多个地方的 icon 都将会共用一个 UIImage 对象. 减少沙盒的读取操作. (3)imageAssets 的使用场景 ImageAssets 最主要的使用场景就是 icon 类的图片, 一般 icon 类的图片大小在 3kb 到 20 kb 不等, 都是一些小文件.

2、Resource 的使用方式 将文件直接拖入到工程目录下, 并告诉Xcode打包项目时候把这些图片文件打包进去. 这样在应用的".app"文件夹中就有这些图片. 在项目中, 读取这些图片可以通过以下方式来获取图片文件并封装成UIImge对象:NSString *path = [NSBundle.mainBundle pathForResource:@"image@2x" type:@"png"];UIImage *image = [UIImage imageWithContentsOfFile:path];

(1) Resource 的特性 在 Resource 的图片管理方式中, 所有的图片创建都是通过读取文件数据得到的, 读取一次文件数据就会产生一次NSData以及产生一个UIImage, 当图片创建好后销毁对应的NSData, 当UIImage的引用计数器变为0的时候自动销毁UIImage. 这样的话就可以保证图片不会长期地存在在内存中.

(2)Resource 的常用情景 由于这种方法的特性, 所以 Resource 的方法一般用在图片数据很大, 图片一般不需要多次使用的情况. 比如说引导页背景(图片全屏, 有时候运行APP会显示, 有时候根本就用不到).

(3)Resource 的优点 图片的生命周期可以得到管理无疑是 Resource 最大的优点, 当我们需要图片的时候就创建一个, 当我们不需要这个图片的时候就让他销毁. 图片不会长期的保存在内存当中, 所以不会有很多的内存浪费. 同时, 大图一般不会长期使用, 而且大图占用内存一般比小图多了好多倍, 所以在减少大图的内存占用中, Resource 做的非常好.

3、把图片资源打包成bundle文件(资源猫)

1.Bundle 文件,简单理解,就是资源文件包。我们将许多图片、XIB、文本文件组织在一起,打包成一个 Bundle 文件。方便在其他项目中引用包内的资源。

2.Bundle 文件是静态的,也就是说,我们包含到包中的资源文件作为一个资源包是不参加项目编译的。bundle 包中不能包含可执行的文件。它仅仅是作为资源,被解析成为特定的二进制数据。

3.优势:为了方便管理资源文件,可以使用bundle的方式来进行管理

4.用

// bundle path、

#define STBundle_Name @"SafeToolResource.bundle"#define STBundle_Path [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:STBundle_Name]#define STBundle [NSBundle bundleWithPath:STBundle_Path]+ (UIImage *)getSafeToolSMSBackgroundImage{    NSString *imageName = @"cmbcSafeTool_sms.png";    if ([UIDevice is4Point7inchScreenOr5Point8inchScreen_cmbc]) {        imageName = @"cmbcSafeTool_sms_4.7.png";    }//  return [UIImage imageNamed:imageName];    return [UIImage imageNamed:imageName                      inBundle:STBundle compatibleWithTraitCollection:nil];}

补充:安卓Selector 不同状态xml 使用

android:state_press是否按下,如一个按钮触摸或者反击

android:state_focused是否取得焦点,比如用户选择了一个文本框

android:state_hovered光标是否悬停,通常与focused state相同,它是4.0的新特性

android:state_selected被选中,它与focus state并不完全一样,如一个listView被选中的时候,他里面的各个子控件,可能通过方向键,被选中了。

android:state_checkable 组件是否能够被check.如RadioButton是可以被checkd的

android:state_checked被checked了,如:一个RadioButton,CheckTextView,CheckImageView

android:state_enable 能够接受触摸或者点击事件

android:state_activated 被激活

android:state_window_focused 应用程序是否在前台,当有通知栏被拉下来或者一个对话框弹出的时候应用程序就不在前台了,有的需要加android:focusable和android:clickable为true才能获取焦点

f698e441314d454dc9ca202e8029d698.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值