macOS应用开发之Objective-C系列(纯代码开发)
第一节,macOS开发入门之Hello MacOS APP
1. NSWindow、NSWindowController、NSViewController、NSView 的关系和创建
由于Cocoa框架严格遵守着MVC模式,因此,要想在屏幕上显示一个窗口,那么一定就要拥有模型,视图和对应的控制器。
每一套里都应该含有一个WIndowController,一个Window,一个ViewController和一个View。
这就是为什么有了NSWindow就可以展示窗口,还需要添加NSWindowController。
值得注意的是新建NSViewController并没有新建view,需要手动新建。否则视图将不会展示。
2.代码解析-Hello MacOS APP。
废话不多说,直接进入源码阶段。
新建一个macOS的应用跟iOS的app类似这里就不再多说了。另外因为使用的是纯代码开发,我们首先删除Main.storyboard里面的window。注意务跟随我一起按流程一起往下走,否则你的工程可能会遇到一些预想不到的问题。
AppDelegate.h新建二个属性。
@property (nonatomic, strong)NSWindow *mainWindow;
@property (nonatomic, strong)MainWindowController *mainWidowController;
AppDelegate.m
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
ViewController *vc = [[ViewController alloc]init];
self.mainWindow.contentViewController = vc;
[self.mainWidowController showWindow:self.mainWindow];
[self.mainWidowController.window center];
}
#pragma mark- init
- (NSWindow *)mainWindow{
if (!_mainWindow) {
NSUInteger style = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable ;
_mainWindow = [[NSWindow alloc]initWithContentRect:CGRectMake(0, 0, 200, 300) styleMask:style backing:NSBackingStoreBuffered defer:YES];
//[_mainWindow setStyleMask:NSWindowStyleMaskBorderless];
}
return _mainWindow;
}
- (MainWindowController *)mainWidowController{
if (!_mainWidowController) {
_mainWidowController = [[MainWindowController alloc]initWithWindow:self.mainWindow];
}
return _mainWidowController;;
}
ViewController.m实现:
//
// ViewController.m
// demo02
//
// Created by HY_li on 2021/3/5.
//
#import "ViewController.h"
#import "FirstView.h"
#import "UIConfigureHeader.h"
#import "UIUtils.h"
@implementation ViewController
- (id)init{
self = [super init];
if (self) {
NSLog(@"viewcontroller");
}
return self;
}
- (void)loadView{
NSView *view = [[NSView alloc]initWithFrame:CGRectMake(0, 0, MainViewWidth, MainViewHeight)];
view.wantsLayer = YES;
view.layer.backgroundColor = [UIUtils colorWithHexColorString:MainBackgroudColorStr].CGColor;
self.view = view;
NSLog(@"loadView");
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"viewDidLoad");
NSTextField *textFld = [NSTextField labelWithString:@"Hello MacOS APP"];
textFld.frame = CGRectMake((CGRectGetWidth(self.view.frame)-200)/2, CGRectGetHeight(self.view.frame)/2, 200, 20);
textFld.textColor = [NSColor whiteColor];
[self.view addSubview:textFld];
}
- (void)setRepresentedObject:(id)representedObject {
[super setRepresentedObject:representedObject];
// Update the view, if already loaded.
}
@end
这里为了后期设置背景颜色我定义了UIConfigureHeader.h和UIUtils.h二个类,可以在代码中直接设置颜色和UI宽度即可。
效果如下图:
那么我们第一天的入门课程就到这里。
参考文献:https://blog.csdn.net/fl2011sx/article/details/73252859。
网友评论