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 @   CH520  阅读(174)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示