黑马行是一款运动计步类项目。包含了高德地图的使用,用户运动轨迹的追踪与绘制,父子控制器和强引用控制器的区别,使用图层实现界面的渐变色,自定义转场动画,根据卫星定

*   第一章 CoreData/

  *   CoreData基础/

    *   01-01-CoreData介绍

    *   01-02-快速体验需求确立/新建项目,界面准备

    *   01-03-建立数据模型

    *   01-04-快速体验新增用户的操作

    *   02-01-新增数据小结

    *   02-02-查询数据并且绑定在表格上

    *   02-03-查询小结

    *   02-04-修改数据以及监听数据变化

    *   03-01-删除用户数据

    *   03-02-对象图概念/数据表结构变化演练

    *   03-03-快速体验小结

    *   03-04-架构探索目标确定

    *   03-05-强调框架探索的目的,新建项目准备CoreData单例

    *   04-01-使用默认的构造函数实例化容器并且创建数据库

    *   04-02-对持久化容器的构造函数的扩展,演示多个数据模型的合并

    *   04-03-介绍打开/新建/修改数据库的同步执行方法

    *   04-04-打开数据库错误原因/数据迁移概念简介

    *   04-05-[扩展]强行退出应用程序

    *   05-01-介绍了CoreData中的线程安全

    *   05-02-CoreDataStack思维导图梳理

    *   05-03-强调Stack结构的作用,抛出低版本适配需求

    *   05-04-用代码的方式依次建立CoreData核心对象,完成对低版本的兼容

    *   06-01-设置数据库选项,实现数据迁移

    *   06-02-强调互斥锁的作用,删除持久化容器

    *   06-03-复制 saveContext 方法,注意事务的概念

  *   CoreData实战演练/

    *   01-01-确定实战演练需求

    *   01-02-建立用户和城市的一对多关系,生成管理对象子类

    *   01-03-增加测试数据 - 给城市添加多个用户

    *   01-04-没有分组的加载用户数据

    *   01-05-按照分组方式加载并且显示数据

    *   02-01-CoreData小结

*   第二章 项目准备/

  *   项目准备/

    *   01-01-项目介绍和运动元素分析

    *   01-02-部署项目

    *   01-03-回顾第三方框架使用步骤/安装高德地图SDK

    *   02-01-注册高德App Key

    *   02-02-[扩展先放]关闭Xcode8控制台输出

    *   02-03-添加地图/第01阶段小结

*   第三章 运动模块/

  *   地图和大头针/

    *   01-01-准备运动主界面

    *   01-02-定义运动中控制器,实现界面跳转,定义运动类型枚举

    *   01-03-父子控制器开发目标的确定

    *   02-01-以父子控制器加载地图控制器/运动模块架构搭建小结

    *   02-02-添加地图视图/隐藏比例尺

    *   02-03-关闭相机旋转/2D和3D地图的区别

    *   03-01-高德地图和苹果原生地图的对比

    *   03-02-显示用户位置/设置追踪模式

    *   03-03-更新高德地图框架版本

    *   03-04-允许后台定位/禁止系统暂停定位

    *   03-05-明确起点大头针的目标/查阅高德相关文档

    *   03-06-介绍了位置数据

    *   04-01-添加大头针

    *   04-02-自定义大头针

    *   04-03-自定义大头针视图思维导图

    *   04-04-根据运动类型来创建运动图像

    *   04-05-使用运动轨迹模型承担运动图像的创建

  *   绘制轨迹/

    *   01-01-确定绘制运动轨迹的开发目标/阅读官方文档

    *   01-02-点击地图,添加折线对象,分析添加折线的流程

    *   01-03-实现自定义折线绘制/对比大头针和折线的实现方式

    *   01-04-明确轨迹追踪线条模型的目的

    *   01-05-定义轨迹追踪线条模型,承担绘制两点间的折线工作

    *   02-01-运动地图控制器 和 模型 之间的关系

    *   02-02-绘制运动轨迹,同时实现了轨迹数据的优化

    *   02-03-大头针和轨迹小结

  *   运动数据/

    *   01-01-自定义MAPolyline子类目标确定,折线模型中需要颜色

    *   02-01-自定义 polyline 子类的方法实现,替换地图中的颜色

    *   02-02-计算平均速度,速度的单位转换

    *   02-03-根据运动速度,调整运动轨迹颜色

    *   02-04-梳理根据速度设置运动轨迹颜色的思路,确定下一步开发目标

    *   03-01-快速浏览 CLLocation 的头文件,利用时间戳进一步优化地图轨迹

    *   03-02-计算两点间的运动数据:时间/距离

    *   03-03-利用 KVC 计算运动汇总数据

    *   04-01-明确运动界面调整需求

    *   04-02-使用 Storyboard 实现父子控制器,获取子控制器,以及传递运动轨迹模型

    *   04-03-在模型中增加运动状态枚举,调整模型构造函数

    *   04-04-运动的暂停和继续实现

    *   05-01-运动数据计算小结

*   第四章 自定义转场/

  *   自定义转场/

    *   01-01-阶段性目标确定

    *   01-02-明确开发步骤,测试项目准备

    *   01-03-CAShapeLayer和layer.mask属性简单演练

    *   01-04-计算动画需要的初始位置和结束位置

    *   01-01-实现了 ShapeLayer 的动画效果

    *   01-02-CAShaperLayer动画小结&自定义转场的切入点

    *   01-03-项目调整,设置展现样式为自定义

    *   01-04-新建/设置转场动画代理

    *   01-05-实现了 UIViewControllerTransitioningDelegate 协议

    *   02-01-实现 UIViewControllerAnimatedTransitioning 的代理方法

    *   02-02-动画代理方法的简单小结

    *   02-03-添加圆形动画方法,存在动画没有完成,就告诉系统转场完成的问题

    *   02-04-通过动画代理,跟踪动画完成,在完成时通知上下文转场结束

    *   03-01-[扩展]动画代理设置的扩展

    *   03-02-解除转场动画效果实现/解决循环引用!!!

    *   03-03-同心圆放大/缩小示意图小结

    *   03-04-自定义转场动画小结

    *   03-05-[扩展]内存图使用工具扩展

*   第五章 运动地图界面/

  *   运动地图界面/

    *   01-01-运动地图界面布局目标确定

    *   01-02-解决模态展现无法持续记录运动轨迹的思路

    *   01-03-项目准备,按钮过小的处理

    *   01-04-使用传统的模态展现,验证运动数据无法持续保存

    *   02-01-使用强引用属性保留运动数据

    *   02-02-在 awakeFromNib 方法中设置地图视图,立即开始定位用户位置

    *   02-03-[扩展]父子控制器 和 强引用控制器属性 的对比

    *   02-04-导入同心圆转场动画器,设置动画的初始位置

    *   02-05-设置指南针位置代码实现

    *   03-01-设置指南针的位置,并且小结

    *   03-02-明确地图视图控制器显示细节需要修改的点

    *   03-03-修改地图视图层次/将用户设置在地图中心点

    *   03-04-修改大头针起点位置

    *   03-05-毛玻璃效果&运动数据UI布局

    *   03-06-自定义字体的实现以及细节

    *   01-01-在地图界面显示运动数据

    *   01-02-抽取了时间计算属性,并且介绍了跳秒的原因以及降低能耗的考虑

    *   01-03-利用popover实现地图类型选择的目标确定

    *   01-04-popover的界面准备工作

    *   01-05-验证 popover 和传统模态之间的区别

    *   01-06-地图模型选择弹窗实现

    *   02-01-设置 popover 展现视图的大小,调整箭头方向

    *   02-02-点击按钮设置地图类型

    *   02-03-设置地图模式按钮的选中状态

    *   02-04-地图类型选择按钮的性能优化,增加关闭按钮

  *   GPS/

    *   03-01-设置 GPS 信号监测按钮

    *   03-02-GPS信号强度监测需求确定

    *   03-03-定义 GPS 信号的枚举,代码准备工作

    *   03-04-[扩展]Xcode 8 真机调试时不需要设置 OS_ACTIVITY_MODE

    *   03-05-验证 speed 为-1时,监测到的室内定位结果

    *   04-02-测试两个定位点之间的时间差值

    *   04-03-介绍利用两个定位点的时间差值判断GPS的思路

    *   04-04-利用通知发送时间差值,准备在真机验证 GPS 信号强度的结果

    *   04-05-GPS强度测试结论以及用户体验分享

    *   05-01-确认 GPS 信号强度修改步骤

    *   05-02-计算GPS强度枚举/修改通知参数/恢复控制器代码

    *   05-03-新建GPS强度按钮,利用通知获取GPS强度枚举

    *   05-04-根据 state 设置按钮的基本显示,图像未处理

    *   05-05-利用 IB_DESIGNABLE 通过 Storyboard 直接区分是否是地图按钮

    *   05-06-GPS断开连接的两种可能介绍

    *   05-07-GPS断开的处理,以及极端环境的开发思路分享

    *   06-01-地图控制器开发小结

  *   popover/

    *   06-02-明确popover的开发目标,代码准备工作

    *   06-03-通过代码的方式,实现popover的基本展现

    *   06-04-popover的显示细节

*   第六章 监控控制器/

  *   监控控制器/

    *   01-01-明确监控界面开发的目标

    *   01-02-全屏布局中需要使用比例和容器视图

    *   01-03-增加数字面板,调整视图层次结构

    *   01-04-数字面板中的标签布局

    *   01-05-设置控制面板状态按钮的布局

    *   01-06-设置相机/锁屏/设置按钮的布局

    *   02-01-全屏布局工作的小结

    *   02-02-明确线性渐变的开发需求/基本准备

    *   02-03-设置背景图层,复习图层的几个基本属性

    *   02-04-实现了线性渐变图层效果

    *   02-05-使用代理反向传值,更新监控控制器UI

    *   03-01-明确运动状态切换的目标/按钮约束连线

    *   03-02-设置按钮的分开约束/在Storyboard中约束连线错误查找技巧

    *   03-03-根据参数隐藏暂停按钮以及动画效果实现

    *   03-04-明确自动切换运动状态的目标

    *   03-05-分析运动状态检测的程序入口/方法的准备

    *   03-06-从`继续到暂停`的运动状态的修改

    *   04-01-调试地图控制器的代理方法/实现从暂停到继续的状态切换

    *   04-02-明确模拟状态按钮点击操作的目标

    *   04-03-根据运动状态的变化,模拟状态按钮的点击

    *   04-04-监控界面布局小结

*   第七章 语音播报/

  *   语音播报/

    *   01-01-语音播报功能介绍

    *   01-02-确定语音播报模型/接口方法的定义

    *   01-03-语音播报基本方法的实现

    *   01-04-确认在监控控制器调用语音播报方法

    *   01-05-在监控控制器中实例化语音播报器,并且测试语音播报方法调用

    *   02-01-单位距离语音播报解题思路确定

    *   02-02-利用单位距离和末次播报距离实现整公里播报处理

    *   02-03-使用语音合成器实现语音播报

    *   02-04-介绍使用 mp3 进行拼接播报的思路/添加声音素材包

    *   02-05-加载声音素材的 JSON 并且生成字典

    *   02-06-使用 AVPlayer 测试播放一个 mp3 的音频文件

    *   01-01-播放开始/状态切换的语音

    *   01-02-播报数组中的第一项内容

    *   01-03-利用通知监听播放条目播放完成事件

    *   01-04-播报数组中语音的思路建立

    *   01-05-顺序播放音频键值数组中的语音

    *   01-06-确定数字和时间播放的思路

    *   02-01-利用框架实现数字和时间的转换

    *   02-02-利用流程图梳理语音播放器的代码

    *   02-03-多个音乐以及后台播放的目标确定

    *   02-04-利用音乐会话的分类允许多个应用程序的音乐同时播放

    *   03-01-激活/禁用音乐会话,以及音乐会话的简单小结

    *   03-02-允许后台播放音频

*   第八章 拍照分享/

  *   拍照分享/

    *   01-01-项目地图回顾&拍照分享目标确定

    *   01-02-利用思维导图明确开发目标和开发步骤

    *   01-03-准备相机控制器并且添加图片素材

    *   01-04-相机界面的简单布局+状态栏隐藏

    *   02-01-左右快门视图的自动布局

    *   02-02-激活和禁用约束会提升性能

    *   02-03-利用禁用和启用约束的方式,实现快门视图的动画

    *   02-04-快门中心图片的布局

    *   03-01-利用 CGContextClearRect 函数清除指定区域的显示内容

    *   03-02-使用 CGContextClearRect 清除图像视图的背景颜色内容

    *   03-03-绘制中间的分割线,完成快门动画效果

    *   03-04-减少裁切区域避免边缘出现线条的问题

    *   03-05-自定义相机的四大核心对象

    *   04-01-在设置拍摄会话方法中获取输入设备-后置摄像头

    *   04-02-将输入设备/输出图像添加到拍摄会话

    *   04-03-添加预览图层,开始拍摄

    *   04-04-设置取景框的拉伸效果

    *   01-01-明确对调摄像头以及拍照保存的开发目标

    *   01-02-抽取拍摄设备方法,为切换摄像头做准备工作

    *   01-03-前后摄像头的对调

    *   01-04-解决一个问题:图层顺序问题

    *   02-01-拍照和保存

    *   02-02-修改三目的错误并且判断图像数据的采样缓冲区是否为空

    *   02-03-拍摄的照片需要裁切上下两部分的原因分析

    *   02-04-利用图像上下文来裁切图像

    *   02-05-在 XIB 中添加水印图像视图和距离标签

    *   03-01-生成水印图像以及绘制距离标签

    *   03-02-明确保存照片完成后的动画目标

    *   03-03-拍照完成提示动画,通过delay参数延迟动画效果

    *   03-04-拍照完成之后静止画面

    *   03-05-快门按钮翻转动画需求确定

    *   03-06-快门按钮翻转

    *   04-01-镜头切换/分享按钮翻转

    *   04-02-自定义相机简单小结

    *   04-03-明确ShareSDK的目标以及步骤

    *   04-04-访问官网注册应用程序

    *   04-05-添加了SharedSDK框架

    *   04-06-在info.plist 中设置Scheme白名单保证在iOS 9.0以上能够实现应用间跳转

    *   05-04-复制/修改SharedSDK的注册应用程序的代码

    *   05-05-复制/调整/简单阅读了SharedSDK的分享代码

    *   05-06-使用成员变量传递要分享的照片/实现了OAuth方式的微博分享

    *   05-07-增加简体中文/解决SharedSDK不显示中文的问题

    *   06-01-实现 SSO 跳转应用程序并分享

    *   06-02-演示新浪微博的BundleId在应用程序分享中的作用

    *   06-03-屏蔽短信等分享按钮/关闭窗口/分享小结