美文网首页Mac OS开发mac开发Mac App
第一个Mac OS X项目(纯代码)

第一个Mac OS X项目(纯代码)

作者: 灰斗儿 | 来源:发表于2018-06-19 13:47 被阅读216次

本文作为快速创建项目入门,细节不做阐述,请自行探索

Mac OS X 的坐标系不同于IOS
IOS 原点在屏幕左上角
Mac OS X 原点在左下角

Mac alloc init 一个viewcontroll 不会自动创建view
IOS 会自动创建view
所以Mac OS 的 ViewController
都需要实现loadView 方法
初始化view

创建项目

启动 Xcode
选择 创建新项目
顶部 选择macOS
Application 下 选择 cooca App

屏幕快照 2018-06-19 下午12.54.41.png

点击next
取消勾选Use Storyboards


屏幕快照 2018-06-19 下午12.55.13.png

点击next

既然是纯代码开发
那么移除目录中所有.xib文件
也就是把所有.xib结尾的都删掉
同时info.plist 移除对应的key

屏幕快照 2018-06-19 下午1.43.07.png

完成项目创建

编写代码

编辑main.m

#import <Cocoa/Cocoa.h>
#import "AppDelegate.h"
int main(int argc, const char * argv[]) {
    
    NSApplication *app = [NSApplication sharedApplication];
    id delegate = [[AppDelegate alloc] init];
    app.delegate = delegate;
    return NSApplicationMain(argc, argv);
}

编辑appDelegate.m

#import "AppDelegate.h"

@interface AppDelegate ()

@property (nonatomic, strong) NSWindow *window;
@end

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application
    
    //窗口 关闭,缩小,放大等功能,根据需求自行组合
    NSUInteger style =  NSWindowStyleMaskTitled | NSWindowStyleMaskClosable |NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskResizable;
    float w = [[NSScreen mainScreen] frame].size.width/2;
    float h = [[NSScreen mainScreen] frame].size.height/2;
    self.window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, w, h) styleMask:style backing:NSBackingStoreBuffered defer:YES];
    self.window.title = @"hello";
    [self.window makeKeyAndOrderFront:self];
    [self.window center];
}


- (void)applicationWillTerminate:(NSNotification *)aNotification {
    // Insert code here to tear down your application
}


@end


创建第一个ViewController
快捷键commad+n


屏幕快照 2018-06-19 下午1.06.55.png 屏幕快照 2018-06-19 下午1.07.28.png

编辑HomeViewController

#import "HomeViewController.h"

@interface HomeViewController ()

@end

@implementation HomeViewController
- (void)loadView{
    NSRect frame = [[[NSApplication sharedApplication] mainWindow] frame];
    self.view = [[NSView alloc] initWithFrame:frame];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do view setup here.
    //do like ios
    NSButton *button = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
    [button setTitle:@"button"];
    [self.view addSubview:button];
}

@end

再次编辑appdelete.m

#import "AppDelegate.h"
#import "HomeViewController.h"
@interface AppDelegate ()

@property (nonatomic, strong) NSWindow *window;
@property (nonatomic, strong) HomeViewController *homeVC;
@end

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application
    //
    NSUInteger style =  NSWindowStyleMaskTitled | NSWindowStyleMaskClosable |NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskResizable;
    float w = [[NSScreen mainScreen] frame].size.width/2;
    float h = [[NSScreen mainScreen] frame].size.height/2;
    self.window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, w, h) styleMask:style backing:NSBackingStoreBuffered defer:YES];
    self.window.title = @"hello";
    
    [self.window makeKeyAndOrderFront:nil];
    [self.window center];
    
    self.homeVC = [[HomeViewController alloc] init];
    [self.window setContentViewController:self.homeVC];
    
}


- (void)applicationWillTerminate:(NSNotification *)aNotification {
    // Insert code here to tear down your application
}


@end

运行一下,看看效果吧
更多功能自行探索
你会成长很多

相关文章

网友评论

  • 心语风尚:为什么 NSWondowController没有创建 是做什么用啊 不要NSWondowController有什么影响
    心语风尚:@autorelease 我没有用NSWondowController 实例化了NSWindow 创建了NSViewController 都是纯代码 NSViewController中创建了NSTableView 还填充了数据 都没问题 ???
    灰斗儿:就像uiview 和和uiviewcontroller的关系是一样的,不创建 NSWondowController不会有什么影响
    灰斗儿:就像IOS中 ,必须有UIWindow一样

本文标题:第一个Mac OS X项目(纯代码)

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