我是靠谱客的博主 整齐冬瓜,这篇文章主要介绍macOS开发-NSView一.简介二.核心API3.简单示例,现在分享给大家,希望可以做个参考。

一.简介

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

NSView 继承自NSResponder

复制代码
1
2
@interface NSView : NSResponder <NSAnimatablePropertyContainer, NSUserInterfaceItemIdentification, NSDraggingDestination, NSAppearanceCustomization, NSAccessibilityElement, NSAccessibility>

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

复制代码
1
2
@property (nullable, readonly, assign) NSWindow *window; // 返回NSWindow

二.核心API

1.创建对象

复制代码
1
2
3
- (instancetype)initWithFrame:(NSRect)frameRect NS_DESIGNATED_INITIALIZER; // 初始化对象 - (void)prepareForReuse API_AVAILABLE(macos(10.7)); // 重置对象

2.视图结构

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
- (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.简单示例

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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一.简介二.核心API3.简单示例的全部内容,更多相关macOS开发-NSView一内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(90)

评论列表共有 0 条评论

立即
投稿
返回
顶部