豪翔天下

Change My World by Program

0%

Swift开发MacOS应用

基本概念及程序框架

主要目录文件

AppDelegate.swift: 所有应用开始都有一个AppDelegate,是整个应用程序的一个代理。在应用启动的时候,最先被调用的就是这个AppDelegate中的applicationDidFinishLaunching方法,可以在这里做全局初始化,但一般为了保持代码的整洁,具体逻辑并不放在这里。

Assets.xcasserts:

Main.storyboard: 项目主要的UI文件

Info.plist: 项目的基础配置

*.h: 头文件。包含类,类型,函数和常量的声明

*.m: 源代码文件。可以有Objective-CCSwift代码

*.mm: 源代码文件。可以有Objective-C/C/C++/Swift

*.cpp: C++代码

组件IB(Interface Builder)

Labels and Text Field

Combo Boxes

Text Views

Sliders

Date Pickers

Buttons

Radio Buttons

Check Buttons

Image Views

定位

居中定位

1
# 直接选择该Object右下角的Align的Horizontally in Container和Vertically in Container全部设置为0,然后选择Update Frame修改为Items of New Constraints,再点击Add 2 Constraints button.

权限

info.plist权限列表,如果要用到相应的功能却没有添加相应的权限,很可能APP会直接闪退。以下列表来自于[槑头脑]

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
34
35
36
37
38
<!-- 相册 --> 
<key>NSPhotoLibraryUsageDescription</key>
<string>App需要您的同意,才能访问相册</string>
<!-- 相机 -->
<key>NSCameraUsageDescription</key>
<string>App需要您的同意,才能访问相机</string>
<!-- 麦克风 -->
<key>NSMicrophoneUsageDescription</key>
<string>App需要您的同意,才能访问麦克风</string>
<!-- 位置 -->
<key>NSLocationUsageDescription</key>
<string>App需要您的同意,才能访问位置</string>
<!-- 在使用期间访问位置 -->
<key>NSLocationWhenInUseUsageDescription</key>
<string>App需要您的同意,才能在使用期间访问位置</string>
<!-- 始终访问位置 -->
<key>NSLocationAlwaysUsageDescription</key>
<string>App需要您的同意,才能始终访问位置</string>
<!-- 日历 -->
<key>NSCalendarsUsageDescription</key>
<string>App需要您的同意,才能访问日历</string>
<!-- 提醒事项 -->
<key>NSRemindersUsageDescription</key>
<string>App需要您的同意,才能访问提醒事项</string>
<!-- 运动与健身 -->
<key>NSMotionUsageDescription</key> <string>App需要您的同意,才能访问运动与健身</string>
<!-- 健康更新 -->
<key>NSHealthUpdateUsageDescription</key>
<string>App需要您的同意,才能访问健康更新 </string>
<!-- 健康分享 -->
<key>NSHealthShareUsageDescription</key>
<string>App需要您的同意,才能访问健康分享</string>
<!-- 蓝牙 -->
<key>NSBluetoothPeripheralUsageDescription</key>
<string>App需要您的同意,才能访问蓝牙</string>
<!-- 媒体资料库 -->
<key>NSAppleMusicUsageDescription</key>
<string>App需要您的同意,才能访问媒体资料库</string>

widget也都可以通过代码来设置他们的属性,例如

在applicationDidFinishLaunching函数内部写上

label1.stringValue = “wanghao”
button1.title = “Change Text”
Toolbar 菜单栏
view controller,也就是最开始的那种storyboard
container view,这里应该是可以放其他的view,相当于网页里面的iframe
custom view
vertical Split view/horizontal split view :水平或者垂直分割的view
Collection view:就是将一些列的数据以表格的形式展(包含了Collecotion Item),datasource可以直接outlets到view controller
object:就是一个对象,它可以与类帮顶起来(右上角custom class进行定义),定义了过后,又可以将它与下面的view相联系(control+拖曳,选择outlets),
table view:表格

Array Controller:好像是管理一组controller

menu bar:

要连接两个view,也是control拖曳

这个地方可以添加绝对定位或者想对定位 绝对定位想对定位

右边那个按钮则是像html里面的margin

上面是Day 2:auto layout

创建新的类的时候也可以同时创建xib文件,上面的collection controller,如果要有一个复杂的item那么久需要自己创建一个类

menu bar

直接在appdelegate里面:要设置application is agent

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
let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(NSVariableStatusItemLength)
//let menu = NSMenu()
let popover = NSPopover()

func applicationDidFinishLaunching(...){
if let button = statusItem.button {
button.image = NSImage(named: "图片名称")// 在asets里面添加了的图片
//button.action = Selector("showWeatheraaa")

button.actoin = Selector("toggleWeather:")
}

//menu.addItem(NSMenuItem(title: "直接加", action: Selector("showWeather:"), keyEquivalent:"S"))
//menu.addItem(NSMEnuItem.separatorItem())
//menu.addItem(NSMenuItem(title:"quit", action: Selector("terminate:"), keyEquivalent:"q"))

// statusItem.menu = menu
popover.contentViewController =
}

func showWeather(sender: NSStatusBarButton){
print("我靠")
}

func toogleWeather(sender: NSStatusBarButton){
if popover.shown{
popover.performClose(sender)
}else{
if let button = statusItem.button {
popover.shownRelativeToRect(button.bounds, ofView: button, perferredEdge: .MinY)
}
}
}

新建了NSOBbject过后,要让它MainMenu .xib加载的时候久被加载,需要把它以object的形式添加到XIB中去

而这个object的Outlets就是相对应的view,比如Status Menu

同理如果创建的是一个NSview,那么一个view泽可以与之关联

坚持原创技术分享,谢谢支持

欢迎关注我的其它发布渠道