飞豹客 · 课能看,资料也能带走
飞豹客体系课

【iOS】黑马行实战项目

这门课解决什么问题 很多做 iOS 的朋友都有类似困惑:Swift 语法和系统控件看过了,但一接到真实业务,还是不知道从哪下手。这门黑马行项目课针对的就是这种尴尬。它用一个运动计步 App 当载体,带你把地图定位、轨迹绘制、本地存储、自定义转场这些零散知识点串起来,做成一个能跑的完整功能。你不是在背

单课价¥38.00新品 上架
会员价¥19.00开通会员,全站课程按会员价下载套餐详情
72 人关注 更新于 2026-09-19 永久有效
发货

网盘链接 · 支付成功后自动发货

保障

永久有效 · 链接失效免费补发

客服

每日 9:00-21:00 在线客服 联系客服

购买本课销量 0 · 永久有效
会员价 · 单课标价 ¥38.00

会员 · 按档位

永久¥19.005折
年¥22.806折
月¥26.607折

游客按标价购买,不享受上表折扣。

支付成功后自动发放网盘链接,链接失效可找客服免费补

正版保障 极速发货 售后无忧

这门课解决什么问题

很多做 iOS 的朋友都有类似困惑:Swift 语法和系统控件看过了,但一接到真实业务,还是不知道从哪下手。这门黑马行项目课针对的就是这种尴尬。它用一个运动计步 App 当载体,带你把地图定位、轨迹绘制、本地存储、自定义转场这些零散知识点串起来,做成一个能跑的完整功能。你不是在背 API,而是在解决具体场景:用户开始跑步,App 怎么持续追踪位置、怎么把路径画到地图上、运动结束怎么把记录存下来、下次打开怎么查出来。这种从需求到实现的完整链路,正是很多人缺的一环。

适合什么基础、怎么用资料

这课不适合零基础。你得对 Swift 语法、UIKit 常用控件、表格视图有基本了解,不然跟着敲会很吃力。如果 MVC、协议、闭包这些概念还模糊,建议先补再来看。资料本身是项目实战型,建议这样用:先把 CoreData 那几节单独拎出来看,因为本地存储是整个计步记录的底座,数据模型建不好后面全是空中楼阁;看完新增、查询、修改、删除这几个操作后,再进入地图定位和轨迹绘制部分,这时你会更理解"画完轨迹得把数据存下来"的完整逻辑。每看完一节,自己新建一个空项目把核心代码敲一遍,别只跟着视频点头。父子控制器、图层渐变、自定义转场这些偏界面的内容,可以等核心功能跑通后再回头补,属于锦上添花。

学完能独立做什么

走完整个项目,你应该能独立搭一个带地图和本地存储的 App。具体来说:会用高德地图 SDK 做定位和轨迹绘制,能用 CoreData 完成数据增删改查并监听变化,能处理界面层的需求比如渐变色和转场动画。更重要的是,你会形成一种"拿到需求先拆数据模型、再理界面流转、最后填业务逻辑"的工作习惯。这套思路不只能套在计步 App 上,做骑行、徒步、打卡这类 LBS 类应用都能直接迁移。如果你之前一直卡在"懂语法但做不出东西"的阶段,这门课的价值就是帮你把零碎知识拼成一个能交付的整体。


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

课程目录

*   第一章 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-屏蔽短信等分享按钮/关闭窗口/分享小结