今天我们学习一个既熟悉又陌生的控件NSImage
,这个控件我们在iOS开发中使用的频率也很高,再熟悉不过了,常用的就是获取图片,然后供其它控件展示,但是在macOS开发中有很大作用,就是它内部提供了很多系统图标,无论在多大的控件内展示都不失真,显然这些系统图标不是图片,是画出来的,我粗略的统计了一下macOS11以前大概有200多个,macOS11以后的呢就太多了,我也没有去数
- 首先我们先了解一下常用的一些初始化方法
+ (nullable NSImage *)imageNamed:(NSImageName)name;
- (nullable instancetype)initWithData:(NSData *)data; /* When archived, saves contents */
- (nullable instancetype)initWithContentsOfFile:(NSString *)fileName; /* When archived, saves contents */
- (nullable instancetype)initWithContentsOfURL:(NSURL *)url; /* When archived, saves contents */
- (nullable instancetype)initByReferencingFile:(NSString *)fileName; /* When archived, saves fileName */
- (instancetype)initByReferencingURL:(NSURL *)url; /* When archived, saves url, supports progressive loading */
- (nullable instancetype)initWithPasteboard:(NSPasteboard *)pasteboard;
- (nullable instancetype)initWithDataIgnoringOrientation:(NSData *)data API_AVAILABLE(macos(10.6));
+ (instancetype)imageWithSize:(NSSize)size flipped:(BOOL)drawingHandlerShouldBeCalledWithFlippedContext drawingHandler:(BOOL (^)(NSRect dstRect))drawingHandler API_AVAILABLE(macos(10.8));
还没有认真了解的小伙伴们可以大概看看了解一下,除了这些还有很多属性和方法,多说跟图片缓存有关,我的项目也没有过多的涉及
- 下面是今天的重点,使用系统提供的图标
图标数量庞大首先我们要找到需要的图标,操作如下:
- 按照上图在
Main.storyboard
中拖一个能加载图片的控件,我这里拖了一个NSButton
- 选择属性栏,下面找到
Image
选择框,打开之后左边是图标,右边是名称(名称分两种)- NS开头的是macOS11以前的图标,其它的是macOS11以后提供的图标,调用方法也不同,后面解释
- 选中之后输入框中显示图片名称
一,macOS11以前提供的图标调用方式(红色框内的)
把上面选中框的名称复制之后用下面的方法调用
[NSImage imageNamed:NSImageNameUser]
- 显示的名称是:NS+User
- 调用的时候是:NS+ImageName+User
二,macOS11以后又新增的图标(绿色框内的)方法如下
+ (nullable instancetype)imageWithSystemSymbolName:(NSString *)symbolName accessibilityDescription:(nullable NSString *)description
- symbolName:就是上面的图片名称
- description :这个参数可以为空,nil就可以
注:只要不是NS开头的图标就用下面的方法读取,如果使用上面的方法会崩溃
完工,小伙伴们有什么疑问可以在留言区留言给我