从 0 开发一款 iOS App
朱德权
腾讯高级工程师
24183 人已学习
新⼈⾸单¥59
课程目录
已完结/共 106 讲
第一章:课程简介和开发前的准备 (4讲)
第二章:实现App的基本界面 (33讲)
第三章:实现App的基础功能 (35讲)
时长 18:24
第四章:App功能扩展和完善 (34讲)
从 0 开发一款 iOS App
登录|注册
留言
12
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 27 | 使用UIGestureRecognizer实现自定义点击与手势
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 常见App类型及技术栈浅析
04 | 使用Xcode创建第一个工程
05 | MVC模式:iOS中的架构基石
06 | iOS中的视图UIView
07 | 了解UIView的生命周期
08 | 视图的控制器UIViewController
09 | 结合视图和控制器构建Tabbar样式页面
10 | 使用Navigation构建App的基础交互
11 | iOS基本页面框架的构成和实现
12 | 系统函数中常见模式Delegate
13 | UITableView简介
14 | UITableView中Delegate和Datasource的使用
15 | UITableViewCell的复用及原理
16 | 结合子视图实现完整的列表界面
17 | UICollectionView的基本应用和实现
18 | UICollectionViewLayout的应用
19 | 基本列表视图的选择和使用
20 | 滚动视图的基类UIScrollView简介
21 | 应用UIScrollViewDelegate实现复杂逻辑
22 | iOS中滚动视图对比及App内应用场景浅析
23 | iOS中文字的展示:UILabel的使用与布局
24 | iOS中图片的展示:UIImage与UIImageView的应用
25 | iOS中按钮的实现:UIButton的使用
26 | UIControl以及Target-Action模式
27 | 使用UIGestureRecognizer实现自定义点击与手势
28 | 通过UIAlertView了解UIKit系统函数的设计和使用
29 | Web基础知识及WKWebView 介绍
30 | 使用WKWebView及Delgate实现简单的页面加载
31 | 认识观察者模式KVO并展示页面加载进度
32 | iOS开发中的Web应用浅析
33 | 使用UIView动画完善界面的交互
34 | 动画背后的CALayer基本应用
35 | CoreAnimation及开源动画框架介绍
36 | 常用代码规范和重构方式
37 | 结合UIKit分析常用App的页面结构
38 | 网络基础及请求的封装
39 | NSURLSession基础原理、组织和使用
40 | 使用系统网络架构NSURLSession加载网络数据
41 | 常用框架集成方式Submodule、Carthage和CocoaPods对比和使用
42 | 集成和使用开源网络框架
43 | iOS中的JSON解析
44 | 使用结构化的数据进行解析和展示
45 | 实现列表数据加载、解析和展示的完整流程
46 | iOS沙盒机制和文件结构
47 | 使用NSFileManager操作和管理文件
48 | iOS中的序列化NSCoding
49 | 开源存储方案对比与分析
50 | 缓存新闻列表数据及已读状态
51 | iOS中线程的基础知识及NSThread
52 | GCD的常用方法分析和使用
53 | 了解Operation、Runloop以及多线程开发总结
54 | 如何管理App中的图片下载与存储
55 | 开源图片框架接触的架构和使用
56 | 了解iOS系统的音视频框架
57 | 重构视频列表展示视频
58 | 实现简单视频播放器AVPlayer
59 | iOS消息机制NSNotification简介
60 | 使用Notification接收和处理播放状态通知
61 | 使用KVO监听和处理播放资源的状态变化
62 | CMTime及播放缓冲进度的获取和使用
63 | 使用单例模式重构播放器业务逻辑
64 | 常用App视频业务及流程浅析
65 | AutoLayout简介
66 | 使用AutoLayout实现通用ToolBar视图
67 | iOS常用布局方式选择
68 | 逻辑分辨率适配
69 | 物理分辨率适配
70 | 使用ImageAsset管理图片资源
71 | iPhone X适配
72 | iOS开发适配常用方法总结
73 | App启动过程及生命周期分析
74 | 通过App生命周期回调实现启动页
75 | 使用URL Scheme进行App间的唤起和通信
76 | Universal Link简介
77 | 常用组件化Target-Action方案
78 | 常用组件化URL Scheme方案
79 | 常用组件化Protocol-Class方案
80 | 实现简单的第三方登录和分享功能
81 | iOS中静态库的制作和使用
82 | iOS当中Framework的制作和使用
83 | OAuth和OpenID原理和使用
84 | 集成QQ SDK实现登录和分享功能
85 | iOS中常用日志和上报系统浅析
86 | 类CocoaLumberjack日志框架架构浅析
87 | Crash的类型介绍和常用收集方案
88 | 常用上报技术方案对比和分析
89 | iOS中定位和定位权限
90 | 定位功能实现和位置信息的获取
91 | iOS中推送和推送权限
92 | 使用UserNotifications实现本地推送
93 | 远程推送与APNs简介
94 | 使用UserNotifications接收远程推送
95 | iOS图标管理和动态更新
96 | iOS App Extension简介
97 | 实现Today Extension以及数据共享
98 | UITextField和UITextView
99 | 使用UITextField实现搜索条
100 | 使用UITextView实现输入框
101 | 复杂列表页实现方案及IGListKit浅析
102 | 复杂内容页展示逻辑及实现方案浅析
103 | App的签名原理和证书申请
104 | 常用iOS唯一标识符
105 | App的打包和上架流程
106 | 结课测试&结束语
本节摘要

PDF 课件和源代码下载地址:

https://gitee.com/geektime-geekbang/geektime-ios-course

登录 后留言

全部留言(12)

  • 最新
  • 精选
Shnerd
为什么我点击黄色的UIView时view会向上动

作者回复: 整体的原因就是因为UIScrollViewContentInsetAdjustmentBehavior这个属性,在项目中我们为了简单演示UIScrollView的滚动属性,没有引入其他的复杂概念,所以没有讲解到这个具体的属性设置。 具体的原因:默认系统会在addsubview之后,就是scrollView展示之前自动的调整Inset,导致了offset的变化,所以初始化的时候,其实整体的页面是下移的。设置了pagingEnabled,系统会自动的处理offset来实现分页的效果.所以对于垂直方向,所以这种自动处理在滑动时会导致之前变化的offset回滚到0。所以就有了上移,而不设置pagingEnabled时系统不会自动调整offset,完全由用户操作,所以就不会出现这种现象。 解决的办法:设置scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever。在开发过程中的frame布局的项目中,所有的scrollView也都建议设置这个属性。

2020-03-19
3
VHJM
TapGesture 的 target 设置的是 self, 这个 self 指代的不是黄色的 view 吗? TapGesture 的 delegate 设置的也是 self,这个 self 指代的是整个 UIViewController 吗? 怎么两个 self 指代的不一样啊?还是我理解错了

作者回复: target中的self,以及delegate的self 都是指当前这个类,也就是UIViewController。UITapGestureRecognizer简单的理解,就是一个手势,当这个手势被系统检测到的时候,调用Target的action。所以你可以看到代码后面的@selector其实是在当前这个类中的,简单的说就是调用self的某一个selector,当然target可以是任何Object,只要能响应后面的selector就好。至于黄色的View,我们是将UITapGestureRecognizer加到它上面,所以它调用addGestureRecognizer方法,来增加手势。

2019-12-07
1
九三
老师 预计什么时候全部就更新完了

作者回复: 最早六月末 最晚七月中旬吧

2019-05-17
1
Shnerd
最近在学网络知识, 想一次性把新更新的视频看完

作者回复: 加油!

2020-03-19
Geek_Maggie
不懂就问:为啥可以这么写—— view addSubView:({ UIView *view = ......; view; })

作者回复: 这个是gcc的一种扩展,具体可见https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html 主要的作用就是优化代码结构,当在代码较多的时候,非常方便阅读。

2020-03-08
2
miss
老师,我想问问,iOS中的控件是啥?是不是我们常见的组件呐?

作者回复: 说下我简单的理解哈,视图组件我个人认为就是一些UI视图组成的,可以复用的常用视图单元。我们把这些视图封装成组件的原因,就是为了划分功能边界,方便复用,提升开发效率。当然组件也可以脱离视图,比如iOS中说的组件化,都是业务逻辑维度的,但是也都是为了合理的区分功能进行解耦,方便复用,背后也是为了提升开发效率。所以组件更加想表达的是解耦和边界。而控件我感觉更想表达的是可以进行交互的视图组件,比如按钮、输入框、复选框等等。当然这些‘术语’并不是标准和规范的,我们也大可不必过分的纠结其意义和使用场景,比如你想实现一个类似的输入框的小功能,然后说封装成了组件,或者封装成了控件,应该都是可以接受的。

2019-12-22
Rilakkuma
为什么我点击黄色的UIView 这个view会向上挪动

作者回复: 整体的原因就是因为UIScrollViewContentInsetAdjustmentBehavior这个属性,在项目中我们为了简单演示UIScrollView的滚动属性,没有引入其他的复杂概念,所以没有设置。 具体的原因:默认系统会在addsubview之后,就是scrollView展示之前自动的调整Inset,导致了offset的变化,所以初始化的时候,其实整体的页面是下移的。设置了pagingEnabled,系统会自动的处理offset来实现分页的效果.所以对于垂直方向,所以这种自动处理在滑动时会导致之前变化的offset回滚到0。所以就有了上移,而不设置pagingEnabled时系统不会自动调整offset,完全由用户操作,所以就不会出现这种现象。 解决的办法:设置scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever。在开发过程中的frame布局的项目中,所有的scrollView也都建议设置这个属性。

2019-08-18
Realtime
老师,您讲的很清楚, 我有一个更深入点儿的问题。那就是既然是selector,那么系统应该是在runtime的时候来响应手势的方法吧。 系统是如何监听到点击方法的呢?

作者回复: 整个点击的响应,是根据响应链传递的。在runloop中系统会默认接收事件,然后通过响应链传递给子View,选择合适的View来处理这个事件。而selector以及你说的runtime,则是View在接收到这个事件之后到处理,执行了这个selector的调用。我们传递的selector只是响应之后的业务逻辑,是不会影响响应手势的。

2019-07-17
Geek_3ef812
老师,我想设置导航条的标题,给四个tabbar里面的Controller分别单独设置,我只能使用self.tabBarController.navigationItem.title方式设置 设置一个其他四个也被设置了,包括self.navigationItem.rightBarButtonItem单独的设置 有什么好的方式吗?
2020-09-07
1
Geek_b7eb88
朱老师,之前学习完课程后,收获很大。目前在手势这方面遇到个疑问。比如我在同一个View上面添加了两个PanGesture,当我在View上滑动时,只有最上层的手势响应了滑动的方法。我想知道这是为什么?手势之间的竞争以及手势失败的原因,好像没有文档写的很明白。并且手势也不像事件响应一样有明确的流程逻辑,所以对于这方面比较疑惑。
2023-06-05
收起评论