MacOS-MacAPP使用Main.storyboard启动视图程序踩坑
由于主做移動端APP的iOS開發(fā),對于Mac端的APP開發(fā)較少,我也本以為,簡單的以為會和iOS差不多
雄赳赳,氣昂昂
沒想到啊,真是沒想到啊,帥不過3秒!!!尷尬!!!
在程序視圖啟動入口處就掛了,踩了一些坑,創(chuàng)建macOS項目步驟我就不再介紹了,可參考博文
本人使用OC創(chuàng)建的macOS項目,勾選了storyboard,創(chuàng)建好項目之后,界面如下:
在可視化編輯器中看到的東西。有三個主要區(qū)域,每個在 Document Outline 中也有相應的文本表示:
- Application Scene:菜單欄和項目。
- Window Controller Scene:配置窗口行為。
- View Controller Scene:UI 元素所在的地方
?
一、坑一:刪除ViewController自定義Controller,運行APP還是空白window
默認有ViewController.h和ViewController.m以及Main.storyboard文件,看storyboard視圖區(qū)域會發(fā)現(xiàn)程序入口AppDelegate默認指向WindowController,WindowController指向ViewController,最終展示的是ViewController上的視圖,可參考看上圖,也可通過運行APP查看圖層也可驗證
博主習慣性的刪除了ViewController文件,然后自己創(chuàng)建了自定義MainViewController,并在上面添加了一些UI,發(fā)現(xiàn)啟動APP還是展示以前的空白window,雖然刪除了ViewController文件,但其實指向還是指向ViewController,因此我們需要改變指向,如下:
通過最右邊的inspector面板區(qū)域Identity選項;Identity: 如果控件使用自定義的類,需要從Class下拉列表中選擇
選中自定義的MainViewController,這時Main.storyboard的UI就和controller關(guān)聯(lián)起來了,在運行就是展示MainViewController上的視圖
?
二、坑二:Main.storyboard中Window關(guān)聯(lián)不了AppDelegate
我想在AppDelegate中關(guān)聯(lián)上Main.storyboard中的主Window,發(fā)現(xiàn)怎么都關(guān)聯(lián)不上,查看storyboard區(qū)域視圖發(fā)現(xiàn)其window指向WindowController的
指向也可看出其關(guān)聯(lián)類
?
三、坑三:刪除Main.storyboard,使用自定義創(chuàng)建的XIB文件
刪除了Main.storyboard文件之后,運行直接報錯'Could not find a storyboard named 'Main' in bundle NSBundle;只好將其還原回去
?
因為在項目中指定了?程序啟動視圖主界面為Main.storyboard;我們可以自定義一個MainMenu.xib文件,在General----Deployment Info----Main Interface,指定MainMenu.xib;這時在運行就會發(fā)現(xiàn)程序啟動主界面就是MainMenu.xib上的UI
這個時候我們就可以將Window關(guān)聯(lián)上AppDelegate了;其界面和Main.storyboard相比就沒那么豐富了,就單純的查看自己界面屬性
這個時候不管我們使用Main.storyboard還是自定義的MainMenu.xib文件加載主界面都是可以的
通過Main.storyboard初始化界面,加載主界面
通過自定義MainMenu.xib文件初始化界面,加載主界面
?
綜上,也總結(jié)了一下MacOS開發(fā)和iOS開發(fā)的一些區(qū)別:
具體區(qū)別也可參考博文MacOS-MAC 開發(fā)和IOS開發(fā)不同之處(純代碼)
MacOS開發(fā)常用的控制器為NSWindowController,而不是iOS里面的ViewController,因為mac app大多數(shù)為多窗口,而iOS app上只有一個主窗口,更多數(shù)的情況下我們是在ViewController做操作,顯示各個不同的頁面,而且UI控件大部分以UI開頭,而MacOS開發(fā)剛好相反,UI控件基本上Main.storyboard是以NS開頭,每個NSWindowController 的xib都包含一個NSWindow和一個NSView。
由于MacOS開發(fā)學習資料較少,目前就在網(wǎng)上下載的很多demo來看,發(fā)現(xiàn)大部分都用的是xib,使用storyboard的都比較少,除了少部分的純代碼手寫除外!
MacOS開發(fā)的坐標系也與iOS開發(fā)的坐標系不同,MacOS開發(fā)的坐標系的原點在XY坐標系的左下角,而iOS開發(fā)的坐標系的原點是在XY坐標系的左上角開始的。當然了,你要是不習慣的話可以強制性修改它的坐標系,如:通過覆蓋視圖的isFlipped方法,強制視圖坐標系原點為左上角位置.
方法名稱為:- (BOOL)isFlipped{return YES;} 一般聲明某個控件在窗口的位置用NSMakeRect(0, 0, 110, 110)或者CGRectMake(0, 0, 110, 110)中;
在MacOS 開發(fā)中視圖本身沒有提供背景顏色,邊框,圓角等屬性。但是可以利用layer屬性來控制這些效果,使用這些屬性之前必須設(shè)置其屬性wantsLayer為YES。這一點就相對于沒有iOS開發(fā)要方便的多,當然還可以通過重繪的方法來實現(xiàn)這些效果- (void)drawRect:(NSRect)dirtyRect
在MacOS開發(fā)中一般以NSWindow為窗口,如果要實現(xiàn)跳轉(zhuǎn)顯示另一個窗口需要關(guān)閉當前窗口,然后顯示下一個窗口
?
總結(jié)
以上是生活随笔為你收集整理的MacOS-MacAPP使用Main.storyboard启动视图程序踩坑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最全面的github pages搭建个人
- 下一篇: 在国内使用iOS 6看苹果3D地图Fly