美文网首页macOS开发
macOS开发-NSView

macOS开发-NSView

作者: ForgetSou | 来源:发表于2020-11-02 14:01 被阅读0次

一.简介

NSView用于在应用程序中渲染、打印以及处理事件的基础容器,多数功能由AppKit自动调用。

NSView 继承自NSResponder

@interface NSView : NSResponder <NSAnimatablePropertyContainer, NSUserInterfaceItemIdentification, NSDraggingDestination, NSAppearanceCustomization, NSAccessibilityElement, NSAccessibility>

通常我们不直接使用NSView,而是创建子类或派生对象实现我们的需求。

@property (nullable, readonly, assign) NSWindow *window; // 返回NSWindow

二.核心API

1.创建对象

- (instancetype)initWithFrame:(NSRect)frameRect NS_DESIGNATED_INITIALIZER; // 初始化对象
- (void)prepareForReuse API_AVAILABLE(macos(10.7)); // 重置对象

2.视图结构

@property (nullable, readonly, assign) NSWindow *window;  // 获取视图NSWindow对象
@property (nullable, readonly, assign) NSView *superview; // 获取父视图
@property (copy) NSArray<__kindof NSView *> *subviews; // 获取所有自视图
/*! 判定视图是否在其父视图的视图层中 */
- (BOOL)isDescendantOf:(NSView *)view;
/*! 返回该视图和另一个指定视图共享的最接近的祖先 */
- (nullable NSView *)ancestorSharedWithView:(NSView *)view;
/*! 视图最接近的不透明祖先 */
@property (nullable, readonly, assign) NSView *opaqueAncestor;
/*! 添加子视图 */
- (void)addSubview:(NSView *)view;
- (void)addSubview:(NSView *)view positioned:(NSWindowOrderingMode)place relativeTo:(nullable NSView *)otherView;
/*! 添加子视图后的回调,可以在子类中重写该方法,进行其他操作 */
- (void)didAddSubview:(NSView *)subview;
/*! 从父视图中移除 */
- (void)removeFromSuperview;
/*! 子视图将会被移除 */
- (void)willRemoveSubview:(NSView *)subview;

/*! 替换子视图 */
- (void)replaceSubview:(NSView *)oldView with:(NSView *)newView;
/*! 使用比较器函数对子视图进行排序 */
- (void)sortSubviewsUsingFunction:(NSComparisonResult (NS_NOESCAPE *)(__kindof NSView *, __kindof NSView *,  void * _Nullable))compare context:(nullable void *)context;

/*! 通知视图正在将其添加到指定窗口对象的视图层级结构 */
- (void)viewWillMoveToWindow:(nullable NSWindow *)newWindow;
/*! 通知视图已经将其添加到视图结构上 */
- (void)viewDidMoveToWindow;
/*! 通知视图正在将其添加到父视图上 */
- (void)viewWillMoveToSuperview:(nullable NSView *)newSuperview;
/*! 通知父视图已经做更改 */
- (void)viewDidMoveToSuperview;

3.frame & bounds

- (void)setFrameOrigin:(NSPoint)newOrigin;
- (void)setFrameSize:(NSSize)newSize;
@property NSRect frame;
@property CGFloat frameRotation;
@property CGFloat frameCenterRotation API_AVAILABLE(macos(10.5));

- (void)setBoundsOrigin:(NSPoint)newOrigin;
- (void)setBoundsSize:(NSSize)newSize;
@property CGFloat boundsRotation;
- (void)translateOriginToPoint:(NSPoint)translation;
- (void)scaleUnitSquareToSize:(NSSize)newUnitSize;
- (void)rotateByAngle:(CGFloat)angle;
@property NSRect bounds;

3.简单示例

NSView *view = [[NSView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];
[view prepareForReuse];
// 背景色
view.wantsLayer = YES;
view.layer.backgroundColor = NSColor.redColor.CGColor;
// 圆角
view.layer.cornerRadius = 100;
// 边框
view.layer.borderColor = NSColor.greenColor.CGColor;
view.layer.borderWidth = 3;
NSClickGestureRecognizer *gesture = [[NSClickGestureRecognizer alloc] initWithTarget:self action:@selector(viewClick:)];
[view addGestureRecognizer:gesture];
[self.view addSubview:view];

- (void)viewClick:(NSGestureRecognizer *)gesture {
    NSLog(@"touch view");
}

相关文章

  • macOS 开发-NSView

    NSView是用于应用程序中渲染、打印以及处理事件的基础容器。 概要 通常我们不需要直接使用NSView对象,而是...

  • macOS开发-NSView

    一.简介 NSView用于在应用程序中渲染、打印以及处理事件的基础容器,多数功能由AppKit自动调用。 NSVi...

  • macOS 开发之-NSView

    设置View的背景色 鼠标事件流 1、鼠标硬件先接收到用户点击;2、然后交给鼠标驱动来处理,这个驱动是在Mac O...

  • macOS 开发-NSView API

    NSView用于在应用程序中渲染、打印以及处理事件的基础容器。 概要 通常我们不需要直接使用NSView对象,而是...

  • NSView 转换图片

    macOS NSView 转化出图片数据

  • MacOS 开发 -NSView添加鼠标监控

    一、鼠标点击事件响应流程简述: 1.鼠标硬件先接收到用户点击;2.然后交给鼠标驱动来处理,这个驱动是在Mac OS...

  • MacOS 开发(十四) : NSView 自定义

    macOS 的视图封装需要重写 draw 方法来实现,通过自定义鼠标状态枚举类型,将多种鼠标方法合并,同时代理方法...

  • macOS 开发-NSView实践-提个醒

    IT人士是久坐一族中核心大军,在学习NSView的相关知识后, 我们来通过视图的基本功能来开发一个简单的应用,用于...

  • SceneKit涉及类的官方文档翻译(一)---- SCNVie

    SCNView 用来展示3D SceneKit内容的视图。 概览 在MACOS中,SCNView继承自NSView...

  • Mac开发

    NSView、设置BackgroundColor NSView *view = [[NSView alloc] i...

网友评论

    本文标题:macOS开发-NSView

    本文链接:https://www.haomeiwen.com/subject/jydamktx.html