1、基础创建
// 创建
NSImageView *image_view = [[NSImageView alloc] init];
// 位置尺寸
image_view.frame = NSMakeRect(30, 30, 150, 90);
// 添加
[self.window.contentView addSubview:image_view];
// 设置图片
image_view.image = [NSImage imageNamed:@"earth"];
// 是否可以编辑(设置可编辑边框会高亮)
image_view.editable = YES;
// 设置图片对齐方式
image_view.imageAlignment = NSImageAlignTop;
// 图像填充模式
image_view.imageScaling = NSImageScaleAxesIndependently;
// 图像边框
image_view.imageFrameStyle = NSImageFrameButton;
// 允许剪裁拷贝粘贴
image_view.allowsCutCopyPaste = YES;
// 当设置了这个属性后,图像将被以指定颜色渲染。通常在需要动态改变图像颜色的情况下使用。
// 例如,当在暗色模式下使用应用程序时,将图像颜色更改为与主题相匹配。
// 这个属性只影响图像的显示,不会改变图像本身的颜色。
if (@available(macOS 10.14, *)) {
image_view.contentTintColor = [NSColor whiteColor];
} else {
// Fallback on earlier versions
}
- 效果

2、给NSImageView添加点击事件
- 子类化NSImageView
-
2.1 GC_ImageView.h
#import <Cocoa/Cocoa.h>
NS_ASSUME_NONNULL_BEGIN
@interface GC_ImageView : NSImageView
// 添加点击事件
- (void)addTarget:(nullable id)target
action:(SEL)action;
@property(nonatomic, copy) void(^mouseDown_Block)(void);
@property(nonatomic, copy) void(^mouseUp_Block)(void);
@end
NS_ASSUME_NONNULL_END
#import "GC_ImageView.h"
@interface GC_ImageView ()
@property (nullable, weak) id gc_target;
@property (nullable) SEL gc_action;
@end
@implementation GC_ImageView
- (void)addTarget:(nullable id)target
action:(SEL)action {
_gc_target = target;
_gc_action = action;
}
// 让imageview能够相应点击方法
- (void)mouseDown:(NSEvent *)event {
[super mouseDown:event];
if (_gc_target) {
[NSApp sendAction:_gc_action to:_gc_target from:self];
}
if (self.mouseDown_Block) {
self.mouseDown_Block();
}
}
- (void)mouseUp:(NSEvent *)event {
if (self.mouseUp_Block) {
self.mouseUp_Block();
}
}
@end
// 创建
GC_ImageView *image_view = [[GC_ImageView alloc] init];
// 位置尺寸
image_view.frame = NSMakeRect(30, 30, 150, 90);
// 添加
[self.window.contentView addSubview:image_view];
// 设置图片
image_view.image = [NSImage imageNamed:@"12345678"];
// 添加手势
image_view.mouseDown_Block = ^{
// 按下
};
image_view.mouseUp_Block = ^{
// 抬起
};
// 添加手势
NSClickGestureRecognizer *gesture = [[NSClickGestureRecognizer alloc] initWithTarget:self action:@selector(gesture_Tap:)];
[image_view addGestureRecognizer:gesture];
- (void)gesture_Tap:(NSGestureRecognizer *)gesture {
NSLog(@"touch view");
}
3、API说明
@interface NSImageView : NSControl <NSAccessibilityImage, NSMenuItemValidation>
/**
* @brief 使用给定的NSImage实例创建一个新的NSImageView实例
*
* @param image NSImage实例,用于创建新的NSImageView实例
*
* @return 返回一个新的NSImageView实例,该实例包含给定的NSImage实例作为其图像
*
* @note 这个方法可以用于创建一个NSImageView实例,并将其设置为显示给定的图像。例如,如果你正在编写一个macOS应用程序,需要在一个窗口中显示一个图像,则可以使用此方法创建一个NSImageView实例,并将其添加到窗口中,以便显示给定的图像。
*/
+ (instancetype)imageViewWithImage:(NSImage *)image;
/** 控制 NSImageView 是否显示的图片 */
@property(nullable, strong) NSImage *image;
/** 控制 NSImageView 是否可编辑 */
@property(getter=isEditable) BOOL editable;
/** 控制 NSImageView 图片在控件中的对齐方式 */
@property NSImageAlignment imageAlignment;
/** 控制 NSImageView 图片在控件中的缩放方式 */
@property NSImageScaling imageScaling;
/** 控制 NSImageView 图片边框的样式 */
@property NSImageFrameStyle imageFrameStyle;
/** 控制 NSImageView 图片的符号配置 */
@property(nullable, copy) NSImageSymbolConfiguration *symbolConfiguration;
/** 控制 NSImageView 内容的颜色 */
@property(nullable, copy) NSColor *contentTintColor;
/** 控制 NSImageView 是否启用动画 */
@property BOOL animates;
/** 控制 NSImageView 是否允许剪切、复制、粘贴 */
@property BOOL allowsCutCopyPaste;
@end