美文网首页
iOS开发与Mac OS X开发异同

iOS开发与Mac OS X开发异同

作者: 罗火火 | 来源:发表于2017-05-11 14:24 被阅读806次

    作者:eyd zxjd

    链接:https://www.zhihu.com/question/30678288/answer/80664546

    来源:知乎

    #import "ViewController.h"

    @implementation ViewController

    #pragma mark 编写Mac程序和iOS程序主要的不同

    - (void)viewDidLoad {

    [super viewDidLoad];

    #pragma mark 坐标系不同

    #pragma mark 缺少一些组合方法

    //iOS是在OS X系统的基础上开发的,所以有很多更方便的地方,但Mac的框架不提供!

    //比如,iOS中有一些常用的方法,Mac中没有,比如

    //iOS中UIButton 有addTarget:<#(id)#> action:<#(SEL)#> forControlEvents:<#(UIControlEvents)#>方法,但NSButton只能一项的设置

    /**如果Mac里没有某个组合的方法,可以试试拆开用!**/

    NSButton *button=[[NSButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

    button.target=self;

    button.action=@selector(click);

    [self.view addSubview:button];

    #pragma mark 没有Label控件

    //Label控件是用TextFiled实现的

    //label.enabled=NO;

    //label.bordered=NO;

    //label.selectable=YES;

    #pragma mark 没有bounds,center

    #pragma mark NSView没有背景颜色,但NSClipView和其它有些控件有

    [self.view setWantsLayer:YES];

    [self.view.layer setBackgroundColor:[NSColor blueColor].CGColor];

    #pragma mark imagename方法只适用于图片文件在包里

    //根据路径获取图片[[NSImage alloc]initByReferencingFile:@"/Users/guodong/Desktop/Coding/mac/mac/636b17fb1f.png"];

    #pragma mark ImageView可以设定animates editable属性

    //可以播放动图,可以删除,可以拖放图片上去

    #pragma mark NSColorWell enable=yes 可以调色

    #pragma mark NSScrollView默认不接受鼠标事件,用sv.contentView.frame调整内容视图的位置和大小

    #pragma mark NSWindow

    //Mac程序是可以有多个window的!

    //设置当前的主窗口

    NSApplication *app=[NSApplication sharedApplication];//获取程序对象

    NSLog(@"%@",app.keyWindow);//keyWindow和mainWindow经常是同一个window,它们在程序刚加载的时候是还没加载的,所以不能在viewDidLoad方法中设置!当app处于不活动的状态或不能接受键盘值时,也可能是空的

    NSLog(@"%@",app.mainWindow);

    NSWindow *window=app.keyWindow;

    window.alphaValue=1;//设置窗口的透明度

    window.backgroundColor=[NSColor clearColor];//设置背景颜色为透明

    [window setStyleMask:1];//设置窗口的风格是没有边框的,也可以在故事板中的窗口属性中调

    [window setFrame:CGRectMake(100, 100, 500, 500) display:YES animate:YES];//移动窗口,立即刷新,动画效果

    //创建一个新的窗口,注意窗口控制器应当是个全局的指针,否则窗口会立即被销毁!

    NSWindow *new=[[NSWindow alloc]initWithContentRect:CGRectMake(100, 100, 300, 300) styleMask:1 backing:NSBackingStoreRetained defer:NO];

    new.backgroundColor=[NSColor redColor];

    NSWindowController *wc=[[NSWindowController alloc]initWithWindow:new];

    [wc showWindow:new];

    [new setLevel:10];//设置窗口显示的优先级

    #pragma mark Mac开发中,cell十分常见

    //大概是在OS X简化为iOS的过程中,很多控件被合并,简化了。

    //OS X中很多控件都有(类型的后缀)为cell的子控件,通常能调整title什么的

    //总之,大多数控件都是组合成的,而且子控件都暴露在外面,非常麻烦

    #pragma mark NSOpenPanel 弹出选择文件用的控件

    NSOpenPanel *openPanel=[NSOpenPanel openPanel];//获取NSOpenPanel对象

    //设置

    [openPanel setCanChooseFiles:YES];

    [openPanel setCanChooseDirectories:YES];

    //[openPanel setAllowedFileTypes:[NSArray arrayWithObject:(NSString *)kUTTypeDirectory]];

    [openPanel setAllowedFileTypes:@[@"mp3"]];//允许的类型

    [openPanel setDirectoryURL:[NSURL fileURLWithPath:@"/Users/guodong/Desktop/song"]];//设置默认路径

    [openPanel setAllowsMultipleSelection:YES];//允许按住shift/command多选

    [openPanel runModal];//显示,并且返回结果 0取消了,1确认了

    if ([openPanel runModal] == NSModalResponseOK) {

    NSURL *url = [openPanel URL];

    NSLog(@"%@",[openPanel filenames]);

    }

    #pragma mark 打开文件/文件夹的操作

    [[NSWorkspace sharedWorkspace]openFile:@"/Users/guodong/Desktop/Tools"];//用默认的程序打开文件/文件夹

    [[NSWorkspace sharedWorkspace]openFile:@"/Users/guodong/Desktop/首页 - 知乎.html" withApplication:@"Xcode"];//用指定的程序打开

    //NSWorkspace可以做一些设计到其他App的操作,比如获取活动的app列表,隐藏其他app等

    [[NSDocumentController sharedDocumentController]openDocument:@"/Users/guodong/Desktop/Tools"];//NSDocument应该是 苹果提供的网络同步功能用的 大概

    #pragma mark NSTableView

    //content Mode 这玩意在代码中好像没办法设置  设置Cell-Base/View-Base  (必须设置)

    //纯代码创建Cell-Base  NSTableView

    NSTableView *tableView;

    tableView=[[NSTableView alloc]initWithFrame:CGRectMake(0, 0, 400, 300)];

    tableView.delegate=nil;//代理

    tableView.dataSource=nil;

    //[tableView setAutosaveName:@"downloadTableView"];

    //[tableView setAutoresizesSubviews:FULLSIZE];

    //[tableView setBackgroundColor:[NSColor whiteColor]];

    //[tableView setGridColor:[NSColor lightGrayColor]];

    //[tableView setGridStyleMask: NSTableViewSolidHorizontalGridLineMask];

    //[tableView setUsesAlternatingRowBackgroundColors:YES];

    //[tableView setAutosaveTableColumns:YES];

    //[tableView setAllowsEmptySelection:YES];

    //[tableView setAllowsColumnSelection:YES];

    NSScrollView *scrollView=[[NSScrollView alloc]initWithFrame:CGRectMake(0, 0, 400, 300)];

    [scrollView setDocumentView:tableView];//设置内容视图

    //[scrollView addSubview:tableView];虽然也能添加上,但是不能滑动什么的

    //[scrollView setBackgroundColor:[NSColor redColor]];

    [self.view addSubview:scrollView];

    //设定表头

    NSTableHeaderView *tableHeadView=[[NSTableHeaderView alloc] initWithFrame:CGRectMake(0, 0, 300, 20)];

    [tableView setHeaderView:tableHeadView];

    //以前不知道的。。。设定列,可以设定几列,而且可调

    NSTableColumn *column=[[NSTableColumn alloc] initWithIdentifier:@"column"];

    [[column headerCell] setStringValue:@"column"];

    //[[column headerCell] setAlignment:NSCenterTextAlignment];

    [column setWidth:400];

    [column setMinWidth:50];

    [column setEditable:YES];

    //[column setResizingMask:NSTableColumnAutoresizingMask | NSTableColumnUserResizingMask];

    [tableView addTableColumn:column];

    // Do any additional setup after loading the view.

    /*创建Cell-Base NSTableView用的

    -(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView

    {

    return 100;

    }

    -(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row

    {

    return @"ecwve";

    }

    */

    /*创建View-Base NSTableView用的,用代码可能不行。。。

    -(CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row

    {

    NSLog(@"eww");

    return 100;

    }

    -(NSView*)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row

    {

    NSView *cellView=[[NSView alloc]initWithFrame:CGRectMake(0, 0, 100, 20)];

    NSTextField *textField=[[NSTextField alloc]initWithFrame:CGRectMake(0, 0, 100, 20)];

    [textField.cell setTitle:@"wcvc"];

    [cellView addSubview:textField];

    return cellView;

    }

    */

    // Do any additional setup after loading the view.

    }

    -(void)click

    {

    NSLog(@"click");

    }

    - (void)setRepresentedObject:(id)representedObject {

    [super setRepresentedObject:representedObject];

    // Update the view, if already loaded.

    }

    @end

    相关文章

      网友评论

          本文标题:iOS开发与Mac OS X开发异同

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