关于我们
书单推荐
新书推荐
|
macOS应用开发基础教程
本书是Swift版本的macOS应用开发教程。本书全面介绍和说明了macOS平台中应用开发的系统控件,详细阐述和探讨了应用开发的常用组件、系统框架、应用沙盒处理、上架流程、生产力工具开发等内容,并配有丰富的示例讲解。书中还介绍了几个小型的演示项目,剖析了开发过程、开发思路和关键流程代码,力求让读者从基础知识和项目实践等多个维度去理解和掌握macOS平台的应用开发。
本书立足普及基本的macOS应用开发知识,力求每个知识点的讲解都简明扼要,并通过代码示例演示让读者尽快学以致用,非常适合macOS应用开发的初学者阅读。但是,本书中并没有介绍Swift的基础语法,阅读本书需要读者了解Swift的知识。
· macOS 应用开发工程师全力打造,图文并茂,并提供丰富且详细的示例,致力于帮助读者开发出强大的生产力工具。
· 对macOS 平台中的AppKit 控件做了详细介绍,每章提供完整的示例代码,帮助读者更好地理解相关内容。
· 为想学macOS 开发的初学者,由浅入深地介绍应用开发的完整过程,让读者学会独立开发自己的应用。
· 基于Xcode 9.0和Swift 4.0语法编写。
本书以Swift 语言为基础介绍masOS 平台应用开发,分为8 大部分,共计38 章。D一部分讲述视图、窗口和系统控件,D二部分介绍自动布局、窗口控制器和视图控制器,第三部分讲解核心服务框架,第四部分给出与文档和数据存储相关的内容,第五部分为网络和多线程处理,第六部分是图形和动画,第七部分为扩展议题,第八部分是项目开发和实践。
本书立足普及基本的macOS 应用开发知识,力求每个知识点的讲解都简明扼要,并通过代码示例让读者尽快学以致用,非常适合macOS 应用开发的初学者阅读。但是,本书没有介绍Swift 开发语言,阅读本书需要读者具备Swift 相关的基础知识。
赵君卫(微博@剑指人心),中国早期的iOSkai发者,负责开发了zhu名的LBS交友App飘信,曾担任苏宁易购移动技术团队负责人、途牛金融移动技术总监;2014年开始接触macOS应用开发,独立开发了macOS平台上UI设计工具AppX;创建了macOS应用开发网站macdev,汇聚与macOS相关的开发资源,崇尚自动化开发的理念,打造先进的生产力工具。
张帆(微博@AB人生-东门吹牛西门吹雪),留美博士,专注于计算机和互联网技术在诸如信息安全、通信电子、医疗健康等特定行业的应用,擅长iOS和.NET开发;曾在美国微软总部和飞利浦医疗北美总部任职;入选浙江省千人计划;曾任新加坡国立大学访问学者,现任浙江大学信息与电子工程学院和浙江大学网络空间安全研究中心副教授,同时也是新加坡科技设计大学访问教授。
第 1章 准备工作1
1.1 Mac电脑 1 1.2 Xcode使用介绍 1 1.2.1 Xcode工作区 2 1.2.2 xib界面设计相关的工作区和菜单 3 1.3 工程结构 5 1.3.1 使用xib方式创建的工程 5 1.3.2 使用storyboard方式创建的工程 11 第 2章 窗口对象 13 2.1 窗口界面的组成 14 2.2 模态窗口 16 2.2.1 模态窗口 16 2.2.2 模态会话窗口 16 2.3 编程控制窗口 17 2.3.1 创建窗口对象 17 2.3.2 窗口通知 18 2.3.3 NSWindow的contentView 18 2.3.4 设置窗口的image和title 19 2.3.5 设置窗口的背景颜色 19 2.3.6 关闭窗口时终止应用 19 2.3.7 在窗口标题区域增加视图 20 2.3.8 NSWindow如何正确地保证居中显示 21 2.3.9 窗口显示位置控制 21 2.3.10 应用关闭后点击Dock菜单再次 打开应用 21 2.4 窗口的创建和管理 21 第3章 视图和滚动条 23 3.1 基本视图 23 3.1.1 坐标系统 23 3.1.2 frame和bounds 24 3.1.3 坐标转换 25 3.1.4 视图管理 25 3.1.5 视图查找 25 3.1.6 视图的autoSize控制 25 3.1.7 视图的layer属性 27 3.1.8 视图绘制 27 3.1.9 事件响应 28 3.1.10 视图的frame/bounds变化通知 28 3.2 增效视图 29 3.3 滚动条视图 31 3.3.1 滚动条视图工作原理 31 3.3.2 用代码创建滚动条视图 32 3.3.3 滚动到zhi定的位置 32 3.3.4 用代码实现文本视图滚动的示例 33 3.3.5 滚动条的显示控制 34 第4章 基本控件 35 4.1 控件的分类 35 4.2 控件家族类图谱 35 4.2.1 NSResponder 37 4.2.2 NSView 38 4.2.3 NSControl 38 4.2.4 NSCell 38 4.2.5 小结 39 4.3 文本框 39 4.3.1 UI属性说明 40 4.3.2 事件响应 40 4.3.3 文本内容的读取或修改 41 4.3.4 特殊按键响应处理 41 4.4 文本视图 42 4.4.1 UI属性说明 42 4.4.2 事件响应 43 4.4.3 文本的格式化显示 43 4.4.4 文本框高度根据文字高度自适应增长 44 4.5 文本搜索框 44 4.6 文本标签 46 4.6.1 UI属性说明 46 4.6.2 用代码创建文本标签 46 4.7 按钮 48 4.7.1 UI属性说明 48 4.7.2 事件响应 48 4.7.3 连接事件 49 4.7.4 用代码创建按钮 49 4.7.5 图片按钮的创建 49 4.8 复选框 50 4.8.1 UI属性说明 51 4.8.2 事件响应 51 4.9 单选按钮 51 4.9.1 UI属性说明 51 4.9.2 事件响应 52 4.10 分段选择控件 52 4.10.1 UI属性说明 53 4.10.2 事件响应 53 4.10.3 分段大小的控制 53 4.10.4 分段样式风格的控制 53 4.11 组合框 54 4.11.1 UI属性说明 54 4.11.2 事件响应 55 4.11.3 动态增加列表内容 55 4.11.4 使用数据源和代理 55 4.12 弹出式按钮 56 4.12.1 UI属性说明 56 4.12.2 动态列表项配置 56 4.12.3 事件响应 57 4.13 滑杆 57 4.13.1 属性设置 57 4.13.2 水平和垂直方向设置 57 4.13.3 事件绑定 58 4.14 日期选择器 58 4.14.1 UI属性说明 58 4.14.2 获取日期 59 4.14.3 日期变化的事件 59 4.15 步进器 59 4.15.1 UI属性说明 60 4.15.2 事件响应 60 4.15.3 文本框数据与步进器保持同步 60 4.16 进度指示器 60 4.16.1 UI属性说明 61 4.16.2 启动指示器动画 61 4.16.3 更新指示器进度 61 4.16.4 停止指示器动画 61 4.16.5 用代码创建进度指示器 62 4.17 图像视图 62 4.17.1 UI属性说明 62 4.17.2 圆角处理 62 4.18 分组框 63 4.18.1 UI属性说明 63 4.18.2 用代码创建分组框 63 4.19 分栏视图 64 4.19.1 重要属性和方法说明 64 4.19.2 用代码创建分栏视图 65 4.19.3 自定义分栏视图样式风格 65 4.19.4 分栏视图中的子视图控制 66 4.19.5 分栏视图子视图的隐藏和显示 68 4.20 集合视图 68 4.20.1 集合视图的content 69 4.20.2 NSCollectionViewItem 69 4.20.3 绑定模型到视图 70 4.20.4 使用数据源方式管理集合视图 71 4.20.5 实现集合视图的高亮选择 73 4.20.6 集合视图的背景设置 75 4.20.7 集合视图的布局管理器 75 4.20.8 设置集合视图的顶部头和底部尾 77 4.20.9 用代码创建集合视图 79 4.21 选项卡视图 79 4.21.1 UI属性说明 80 4.21.2 代理协议NSTabViewDelegate 80 4.21.3 动态增加选项卡 80 4.21.4 用无边风格的选项卡进行切换控制 81 4.22 弹出式气泡 82 4.22.1 重要属性 82 4.22.2 使用示例 83 第5章 面板和警告框 84 5.1 面板 84 5.1.1 UI属性说明 85 5.1.2 显示面板 85 5.1.3 隐藏面板 86 5.1.4 文件打开面板 86 5.1.5 文件保存面板 88 5.1.6 颜色选择面板 88 5.1.7 字体选择面板 89 5.2 警告框 89 5.2.1 UI属性说明 89 5.2.2 添加按钮 90 5.2.3 使用示例 90 5.3 使用独立的xib文件创建面板类 91 第6章 工具栏和菜单 94 6.1 工具栏 94 6.1.1 创建工具栏 94 6.1.2 UI属性说明 95 6.1.3 NSToolbarItem的属性说明 96 6.1.4 事件响应 96 6.1.5 创建非标准的工具栏项 97 6.1.6 验证工具栏项 97 6.1.7 用代码创建工具栏 98 6.1.8 工具栏与窗口控制按钮融合显示 99 6.2 菜单 99 6.2.1 UI属性说明 100 6.2.2 增加菜单 101 6.2.3 弹出式菜单 101 6.2.4 设置上下文菜单 102 6.2.5 Dock菜单 102 6.2.6 用代码创建菜单 103 6.2.7 获取应用默认的菜单 104 6.2.8 菜单有效性验证 104 6.3 状态条 105 6.3.1 NSStatusBar类的对象关系 105 6.3.2 NSStatusBar的使用方式 105 6.3.3 状态条增加弹出视图 107 第7章 表视图 109 7.1 表视图 109 7.1.1 使用xib创建表格 109 7.1.2 表格样式设置 112 7.1.3 表格数据显示配置 112 7.1.4 表格事件 119 7.1.5 创建表格上下文菜单 120 7.1.6 数据排序 120 7.1.7 数据拖放 121 7.1.8 表格数据获取 121 7.1.9 编辑表格内容 121 7.1.10 动态增加/删除表格行 122 7.1.11 用代码创建表格 123 7.1.12 代码控制选中行 125 7.1.13 表格行选中颜色定制 126 7.2 大纲视图控件 126 7.2.1 节点模型定义 127 7.2.2 初始化模型数据 128 7.2.3 实现数据源协议 128 7.2.4 实现代理方法,绑定数据到节点视图 129 7.2.5 节点选择的变化事件通知 129 7.2.6 动态增加节点 130 7.2.7 动态删除节点 130 7.2.8 代码控制行的展开和选中 131 7.2.9 修改节点展开关闭的默认图标 132 7.2.10 鼠标右键上下文菜单 133 第8章 自动布局 134 8.1 自动布局的原理 134 8.1.1 传统的布局 134 8.1.2 自动布局 135 8.2 栈视图 137 8.3 Xcode中的自动布局设置 138 8.3.1 Stack 139 8.3.2 Align 140 8.3.3 Pin 140 8.3.4 Resolve 141 8.4 自动布局的多种解决方案 141 8.4.1 一个问题的多种解决方案 142 8.4.2 约束选择的原则和建议 144 8.5 自动布局使用示例 144 8.5.1 两个视图大小相同 144 8.5.2 3个View大小相同 145 8.5.3 文本标签和输入框 145 8.5.4 文本标签动态字体和输入框 146 8.5.5 多行文本标签和输入框 146 8.5.6 多行文本标签动态字体和输入框 147 8.5.7 两个视图大小相同、水平方向的间距相同 148 8.5.8 简单的Stack View 149 8.5.9 复杂界面未使用栈视图 150 8.5.10 复杂界面使用多个嵌套栈视图 151 8.6 滚动条视图使用自动布局 151 8.7 通过代码设置自动布局约束 153 8.7.1 使用NSLayoutConstraint类 153 8.7.2 使用NSLayoutAnchor 155 8.7.3 使用VFL定义约束关系 155 8.7.4 使用第三方库AutoLayoutX 155 第9章 窗口控制器 157 9.1 xib中窗口的加载创建过程 157 9.2 手工创建窗口需要注意的问题 160 9.3 窗口控制器和窗口的关系 161 9.4 将AppDelegate中窗口的管理功能分离 161 9.5 窗口切换后对象失去焦点问题 163 第 10章 视图控制器 164 10.1 视图控制器 164 10.1.1 视图生命周期过程 165 10.1.2 创建视图控制器的3种方式 166 10.1.3 representedObject属性 167 10.1.4 子视图控制器管理 168 10.1.5 两个视图控制器之间的切换方法 169 10.1.6 Storyboard中的视图控制 172 10.1.7 视图中手势识别 174 10.2 选项卡控制器 175 10.2.1 使用NSTabView创建选项卡视图 175 10.2.2 使用NSTabViewController管理选项卡视图 176 10.2.3 使用Storyboard方式创建 176 10.2.4 选项卡选中事件 177 10.3 分栏视图控制器 178 10.3.1 控制器的几个重要的属性和方法 178 10.3.2 NSSplitViewItem 179 10.3.3 NSSplitView 179 10.3.4 使用Storyboard创建分栏视图控制器 179 10.3.5 用代码创建分栏视图控制器 180 10.3.6 可折叠的视图控制 181 10.4 视图控制器与窗口控制器的关系 183 10.4.1 视图与窗口 183 10.4.2 视图控制器与窗口控制器 183 10.4.3 不依赖xib和storyboard,纯代码实现应用 184 10.5 使用窗口控制器和视图控制器实现简单登录流程 186 10.5.1 登录流程的基本工程实现 186 10.5.2 代码控制启动的控制器 190 10.5.3 登录页面使用效果美化 190 10.5.4 登录页面纯代码实现 192 10.5.5 整个工程纯代码实现 195 10.6 滚动条视图gao级用法 195 10.6.1 滚动条视图显示多个按钮 195 10.6.2 滚动条视图处理分页滑动 199 第 11章 鼠标和键盘事件 206 11.1 事件的分发过程 206 11.2 事件中的两个核心类 207 11.2.1 NSResponder 207 11.2.2 NSEvent 207 11.3 鼠标事件 208 11.3.1 鼠标点击 208 11.3.2 鼠标拖放 209 11.3.3 鼠标区域跟踪 210 11.3.4 模拟鼠标点击选中 212 11.4 键盘事件 213 11.4.1 快捷键 213 11.4.2 控制键 214 11.5 按键绑定事件 215 11.5.1 系统绑定的按键事件 215 11.5.2 文字输入 216 11.6 事件监控 218 11.7 动作消息 218 11.8 在视图控制器中处理事件 219 第 12章 撤销/重做操作 220 12.1 撤销/重做流程分析 220 12.2 实现原理 222 12.3 撤销/重做动作的管理 223 12.3.1 NSUndoManager的创建 223 12.3.2 注册撤销动作 223 12.3.3 清除撤销动作 224 12.3.4 禁止注册撤销动作 224 12.3.5 撤销动作命名 224 12.3.6 撤销组 224 12.4 撤销栈的深度 224 12.5 撤销/重做通知消息 225 12.6 撤销/重做编程示例 225 第 13章 拖放操作 227 13.1 拖放开始 227 13.1.1 拖放数据定义 227 13.1.2 拖放的可视化图像设置 229 13.1.3 拖放源事件 229 13.1.4 拖放源协议NSDraggingSource 230 13.2 拖放接收 231 13.2.1 注册接收的拖放类型 231 13.2.2 拖放目标方协议 231 13.2.3 拖放接收方处理过程 231 13.3 拖放端到端编程 232 13.3.1 拖放源类DragSourceView 232 13.3.2 拖放目标类 233 13.3.3 视图控制器中拖放源初始化 235 13.4 常见的拖放示例 236 13.4.1 文件拖放处理 236 13.4.2 表格视图的拖放处理 237 13.4.3 大纲视图的数据拖放处理 239 第 14章 Cocoa数据绑定 243 14.1 KVC 243 14.1.1 KVC属性读写接口 244 14.1.2 KVC路径访问相关接口 244 14.1.3 批量属性访问接口 244 14.2 KVO 245 14.2.1 KVO相关接口 245 14.2.2 手工管理KVO 246 14.2.3 KVO的简单例子 247 14.3 KVB 248 14.3.1 传统的数据更新流程 249 14.3.2 使用绑定技术简化更新流程 249 14.3.3 实现绑定依赖的关键点 252 14.3.4 KVB绑定的处理流程 253 14.3.5 使用NSArrayController管理数据 254 14.3.6 使用NSTreeController管理数据 256 第 15章 蓝牙框架 261 15.1 蓝牙数据交换流程 261 15.2 蓝牙框架中的相关类 262 15.2.1 外围设备相关 263 15.2.2 数据中心相关 263 15.2.3 服务相关 263 15.2.4 特征值相关 263 15.3 外围设备的工作流程 263 15.3.1 系统初始化上电 263 15.3.2 创建服务 264 15.3.3 创建特征值 264 15.3.4 服务与特征值关联 264 15.3.5 发布服务 264 15.3.6 广播服务 265 15.3.7 数据读写请求 265 15.3.8 订阅请求处理 266 15.4 数据中心工作流程 266 15.4.1 系统初始化上电 266 15.4.2 搜索外围设备 267 15.4.3 建立连接 267 15.4.4 查询服务 267 15.4.5 查询服务特征值 267 15.4.6 服务特征读请求 268 15.4.7 服务特征值写 268 15.4.8 服务订阅 269 第 16章 Bonjour协议 270 16.1 Bonjour服务命名规则 271 16.2 Bonjour协议API栈 271 16.3 Bonjour核心流程 271 16.3.1 服务发布 272 16.3.2 服务发现 272 16.3.3 地址解析 273 16.4 Bonjour编程 273 16.4.1 服务发布 273 16.4.2 服务发现 274 16.4.3 直接使用Bonjour进行数据发送 274 16.4.4 需要注意的问题 275 第 17章 系统服务 276 17.1 服务处理流程 277 17.2 服务定义 277 17.3 服务提供方编程 279 17.3.1 实现服务功能接口 279 17.3.2 声明服务 280 17.3.3 注册服务 281 17.3.4 测试服务功能 281 17.4 服务使用方编程 282 17.4.1 注册数据类型 282 17.4.2 菜单有效性校验 282 17.4.3 发送数据到剪贴板 283 17.4.4 从剪贴板读取结果数据 283 第 18章 XPC服务 284 18.1 XPC架构 284 18.2 XPC编程实现 285 18.2.1 XPC服务接口对象 285 18.2.2 XPC服务方编程 285 18.2.3 XPC服务请求方编程 287 18.2.4 XPC服务接口反向调用 288 第 19章 消息推送 290 19.1 本地消息通知 290 19.1.1 注册本地消息通知 290 19.1.2 实现本地消息代理协议方法 291 19.1.3 取消本地通知 291 19.1.4 程序控制发送消息通知 292 19.2 远程消息通知 292 19.2.1 推送消息的处理流程 292 19.2.2 请求消息推送注册 293 19.2.3 设备 293 19.2.4 推送消息接收 293 19.2.5 提供者消息发送 294 19.2.6 消息格式 294 19.2.7 Feedback服务 295 19.2.8 消息推送环境的证书配置 295 19.2.9 推送消息的发送 296 第 20章 多文档应用 298 20.1 文档应用中的关键对象 298 20.1.1 文档控制器 298 20.1.2 文档模型 299 20.1.3 文档窗口控制器 299 20.2 创建基于文档的工程 299 20.2.1 Document Types 300 20.2.2 Exported UTIs 301 20.2.3 文档编程模板工程 301 20.3 wrapper方式读取文件 303 20.3.1 创建NSFileWrapper管理文件 304 20.3.2 从NSFileWrapper实例读取内容 304 20.3.3 支持NSFileWrapper文件的工程配置 305 20.3.4 完整的FileWrapper工程示例 305 20.4 文档处理流程 309 20.4.1 新建文档流程 309 20.4.2 打开文档流程 309 20.4.3 保存文档流程 310 20.4.4 导出文件流程 310 20.5 文档应用开发步骤 310 20.6 文档应用中的撤销/重做支持 311 20.7 文档应用管理个人档案 312 20.7.1 个人档案数据模型 312 20.7.2 文档数据以普通文件方式存储 313 20.7.3 文档数据以wrapper方式存储 316 第 21章 iCloud同步 320 21.1 容器 320 21.2 iCloud数据存储 321 21.2.1 iCloud文档数据处理流程 321 21.2.2 iCloud文档本地目录 323 21.3 键值存储 324 21.3.1 键值存储接口 324 21.3.2 键值存储限制 324 21.3.3 键值存储数据变化通知 325 21.3.4 键值存储处理流程 325 21.4 iCloud开发前准备工作 325 21.5 容器数据在多个App间共享 327 21.5.1 键值存储数据的App间共享访问 327 21.5.2 文档数据的App间共享访问 328 21.6 数据冲突 328 21.6.1 键值数据冲突 328 21.6.2 文档类型数据冲突 328 第 22章 CloudKit 329 22.1 使用Dashboard后台管理数据 330 22.2 容器共享 332 22.3 创建记录结构 333 22.4 CloudKit数据操作 334 22.4.1 保存数据 334 22.4.2 删除数据 336 22.4.3 查询数据 336 22.4.4 数据关联reference 337 22.4.5 批量查询数据操作 337 22.5 订阅数据变化通知 338 22.5.1 创建订阅 338 22.5.2 注册消息推送 338 22.6 生产环境部署 339 第 23章 Core Data 340 23.1 Core Data对象栈 341 23.2 在项目中使用Core Data 341 23.2.1 数据增加 345 23.2.2 数据删除 346 23.2.3 数据修改 346 23.2.4 数据查询 346 23.3 模型间关系 347 23.3.1 一对一 347 23.3.2 一对多 348 23.3.3 多对多 348 23.4 使用Bindings绑定管理对象 350 23.5 撤销/重做操作的支持 353 23.6 版本升级迁移 354 23.6.1 轻量级迁移 354 23.6.2 基于模型映射的迁移 357 第 24章 HTTP网络编程 360 24.1 简单的数据请求 361 24.1.1 使用系统默认方式创建URLSession 361 24.1.2 使用自定义的代理方法创建URLSession 362 24.1.3 创建URLSession使用POST方式传递数据 363 24.2 文件下载 364 24.2.1 创建下载任务 364 24.2.2 实现下载代理协议 364 24.3 文件上传 365 24.3.1 流式文件上传客户端代码编写 365 24.3.2 表单文件上传客户端代码编写 366 24.4 缓存 368 24.5 Cookie管理 369 24.5.1 Cookie编程 370 24.5.2 Cookie的一些使用场景 370 24.6 断点续传 371 24.7 基于URLSessionDataTask封装的网络处理工具类 372 24.7.1 网络处理工具类实现分析 372 24.7.2 HTTPClient工具类实现 373 第 25章 多线程 377 25.1 GCD 377 25.1.1 分发队列 377 25.1.2 GCD多线程编程 378 25.1.3 GCD实际使用的例子 382 25.2 OperationQueue 384 25.2.1 BlockOperation 384 25.2.2 Operation 385 25.2.3 设置任务间的依赖 386 25.2.4 设置Operation执行完的回调 387 25.2.5 取消任务 387 25.2.6 暂停或恢复队列的执行 387 25.2.7 任务执行的优先级 387 25.3 Thread 388 25.3.1 线程创建方式 388 25.3.2 Thread类中的关键方法和属性 389 25.3.3 线程中的共享资源保护 390 第 26章 事件循环 393 26.1 RunLoop的模式 393 26.2 RunLoop类 394 26.3 RunLoop的活动状态 395 26.4 定时器 396 26.5 RunLoop中的输入源 397 26.6 RunLoop事件处理流程 398 26.7 RunLoop使用场景 398 第 27章 绘图技术 399 27.1 绘图上下文 399 27.2 坐标系统 399 27.2.1 笛卡儿坐标 399 27.2.2 屏幕坐标与本地坐标 400 27.2.3 坐标变换 400 27.3 颜色与透明度 403 27.3.1 颜色模型和颜色空间 403 27.3.2 创建颜色 403 27.3.3 在绘图上下文中使用颜色 404 27.3.4 从系统颜色面板获取颜色的方式 404 27.4 绘图状态 405 27.5 图像 406 27.5.1 图像内部缓存 406 27.5.2 图像大小 406 27.5.3 图像的坐标系统 406 27.5.4 图像绘制方法 407 27.5.5 图像创建或加载 407 27.5.6 屏幕图像的捕获 408 27.5.7 图像的格式转换 409 27.6 阴影和渐变 409 27.6.1 阴影 409 27.6.2 渐变 410 27.7 文本绘制 413 27.7.1 文本属性参数 413 27.7.2 String的绘制方法 413 27.8 使用路径绘图 414 27.8.1 路径的样式 415 27.8.2 点 418 27.8.3 线 418 27.8.4 多边形 418 27.8.5 矩形 418 27.8.6 圆角矩形 419 27.8.7 圆和椭圆 419 27.8.8 弧形 419 27.8.9 贝塞尔曲线 420 27.9 绘图的性能优化 420 第 28章 核心动画 422 28.1 动画的产生过程 422 28.2 层 423 28.2.1 视图和层 423 28.2.2 层的坐标系统 424 28.2.3 层的时间系统 425 28.2.4 层的对象树 425 28.2.5 层级管理方法 426 28.2.6 层的内容 426 28.2.7 层的深度 427 28.2.8 层的透视投影 427 28.3 层动画 428 28.3.1 隐式动画 428 28.3.2 显式动画 429 28.4 核心动画对象 430 28.4.1 动画相关类 431 28.4.2 协议 433 28.4.3 辅助类 435 28.4.4 事务 436 28.5 动画的控制 437 28.5.1 隐式动画的产生过程 437 28.5.2 隐式动画的动作定义 438 28.5.3 动画结束通知 438 28.5.4 动画的暂停和恢复 439 28.6 macOS中的属性动画 439 28.6.1 属性动画 440 28.6.2 动画上下文对象 440 28.6.3 自动布局动画 441 28.7 系统动画与核心动画的对比 441 28.8 动画编程示例 442 28.8.1 关键帧动画 442 28.8.2 分组动画 444 28.8.3 转场动画 444 28.9 动画性能 445 28.10 系统专有层 446 28.10.1 渐变层 446 28.10.2 形状层 447 28.10.3 文本层 448 28.10.4 分片层 448 28.10.5 副本层 449 28.10.6 发射层 450 28.10.7 变换层 452 第 29章 多代理 455 29.1 多代理与代理和通知的比较 455 29.1.1 代理方式实现 455 29.1.2 通知 456 29.1.3 多代理 456 29.2 多代理的实现 457 29.2.1 Objective-C中多代理实现技术 457 29.2.2 使用消息转发机制进行优化 457 29.2.3 XMPPFramework 458 29.3 聊天列表示例 459 29.3.1 主要的视图控制器 459 29.3.2 联系人模型类 460 29.3.3 多代理管理类 460 29.3.4 多代理的注册 461 29.3.5 多代理的通知 462 第30章 数据转换 464 30.1 转换器基类 465 30.2 系统实现的转换器 465 30.3 绑定中使用的转换器 466 30.3.1 类型转换器的实现和注册 466 30.3.2 实现模型类 467 30.3.3 绑定Combo Box控件到模型类 468 30.4 实现自定义转换器的步骤 469 30.5 使用转换器分离数据转换逻辑 469 第31章 框架 471 31.1 框架与静态库 471 31.2 创建框架工程 471 31.2.1 接口定义 471 31.2.2 头文件引用声明 472 31.2.3 使用框架 473 31.2.4 框架的加载路径 476 31.2.5 框架的签名问题 478 第32章 应用沙盒化 479 32.1 macOS沙盒机制 479 32.2 应用沙盒配置信息 479 32.3 文件沙盒编程 481 32.3.1 设计界面 481 32.3.2 App启动处理 481 32.3.3 打开文件处理流程 482 32.3.4 保存文件 483 32.3.5 应用沙盒配置 483 32.3.6 作用域安全的书签 484 32.3.7 保存打开的文件URL的书签 484 32.3.8 应用启动时通过URL的书签获取文件shou权 484 第33章 数据导航视图 487 33.1 DataNavigationItem的设计 487 33.1.1 DataNavigationItem基类 488 33.1.2 DataNavigationButtonItem 488 33.1.3 DataNavigationTextItem 488 33.1.4 DataNavigationFlexibleItem 489 33.2 DataNavigationView接口和属性 489 33.2.1 接口 489 33.2.2 内部属性 489 33.3 DataNavigationView代码实现 490 33.3.1 item配置 490 33.3.2 创建视图 491 33.3.3 自动布局 492 33.3.4 更新文本视图的方法 494 33.4 使用DataNavigationView 494 第34章 表格数据管理控制器 497 34.1 表格列的动态配置 497 34.1.1 表列定义的模型 498 34.1.2 NSTableColumn类的扩展 499 34.1.3 NSTableView类的扩展 499 34.1.4 代码动态配置表列的表数据导航控制器 500 34.2 实现用代码创建的表格和用xib创建表格的兼容 504 34.3 表格的数据代理 505 34.3.1 数据集管理操作接口 505 34.3.2 数据源实现 507 34.3.3 动态创建表格内容的数据代理方法 507 34.3.4 表内容的编辑处理 511 34.3.5 TableDataDelegate的使用 512 34.4 数据列排序 513 34.5 数据行拖放交换顺序 514 34.6 数据分页显示控制 515 34.6.1 分页控制器 515 34.6.2 分页导航视图 517 34.6.3 分页数据获取 519 34.7 表格数据的增删编辑操作 519 34.7.1 增加数据 519 34.7.2 删除数据 520 34.7.3 编辑表数据 521 第35章 自动化小工具 522 35.1 图片资源适配自动化工具 522 35.1.1 实现思路 522 35.1.2 工程实现 524 35.2 国际化 527 35.2.1 App语言国际化的过程 527 35.2.2 自动化的思路 530 35.2.3 Xcode工程文件的编辑和修改 531 第36章 iPhone利用蓝牙控制Mac 534 36.1 控制的主要流程分析 534 36.2 macOS服务器端 535 36.2.1 XXXPeripheralService服务类 535 36.2.2 macOS端界面开发 537 36.2.3 Mac锁屏状态通知 538 36.2.4 控制Mac电脑的系统命令和脚本 539 36.2.5 macOS端接收iOS端的命令处理 540 36.3 iOS控制端 541 36.3.1 XXXCentralClient类 541 36.3.2 iOS界面开发 543 第37章 SQLite数据库编程 546 37.1 FMDB介绍 546 37.2 数据库操作接口封装 548 37.2.1 数据库管理对象 548 37.2.2 数据访问对象 549 37.2.3 MDAO对象 551 37.2.4 数据模型对象 552 37.2.5 具体使用 553 37.3 数据库加密 554 37.3.1 获取支持加密的SQLite3版本 554 37.3.2 加密数据库 555 37.3.3 操作加密数据库 556 37.4 获取SQLite元数据 556 37.5 模板引擎 559 37.5.1 Xcode中的模板 560 37.5.2 模板引擎处理流程 560 37.6 表模型自动化代码生成 561 37.6.1 模板文件定义 561 37.6.2 代码实现 562 第38章 开发一个完整的macOS应用 564 38.1 制定目标 564 38.2 开发自己的应用 564 38.3 主界面设计 564 38.3.1 主窗口控制器 565 38.3.2 分栏页面控制器 566 38.3.3 左边导航列表页的设计与实现 567 38.3.4 分栏右部界面 570 38.3.5 详细界面设计 571 38.4 工具栏设计 572 38.5 菜单设计 574 38.5.1 系统菜单 574 38.5.2 上下文菜单 575 38.6 应用偏好设置 577 38.7 页面控制器的核心流程 578 38.8 用户体验的一点改进 582 38.9 发布应用准备 583 38.9.1 发布到非应用商店渠道 583 38.9.2 发布到应用商店 584 后记 586
你还可能感兴趣
我要评论
|