Mac开发_NSImageView

1、基础创建

  • 1.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
  • 2.2 GC_ImageView.m

#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
  • 2.3 测试

// 创建
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
posted @ 2022-09-17 20:00  CH520  阅读(193)  评论(0)    收藏  举报