最近游戏上线了 iOS 版本,期间来来回回提审了 2、3 次,最终没有经历太多波折顺利上线,写下这篇文章记录下审核期间遇到的问题,方便以后查看和提前避免一些问题。
#iOS
从刚开始学习 iOS 的时候就很想做一款 MarkDown 的编辑工具,但是一直也没有下定决心去搞,最近想开始重新学习 iOS,就想到从 MarkDown 编辑器的实现方式学起,把这段时间学到的东西记录下来,方便以后查看。
前几天在看响应者链条的时候,看到 UIResponder
有两个很有用的属性,但是自己不熟悉,就是 inputView
和 inputAccessoryView
。原来自己练手的时候,需要这样的功能,但是自己不知道这两个属性,导致自己花费了很多时间。所以,就写下这篇,算是对不知道的知识的补充。
响应者链条在刚学 iOS 的时候有学过,但是平常开发也很少去仔细思考,也没有发生过很大的错误,所以就更加不会去考虑 What Under The Hood。
在实习的时候要做自定义 transition。我在 UITransitionView
上添加了一个 subview 作为背景 view,点击这个背景的 view,要 dismiss 掉 present 的 ViewController,给背景的 view 添加了一个 UITapGestureRecognizer
,但是背景的 view 就是死活不响应点击。来来回回折腾了好久才找出原因:事件根本就没有传递给背景的 view 😭😭。
我们知道 iOS App 有五种状态:not running/inactive/active/background/suspended,当用户按下 Home 键的时候,App 就会进入 background 状态,随后进入 suspended 状态。在 suspended 状态下,我们没有办法对 App 进行任何操作。所以,我们会尽量在 background 状态下就做好 App 的一些清理等操作,来使 App 有进入 suspended 的准备。但是,iOS 系统分配给 App 的 background 状态下的时间是有限的,我们需要做一些自定义的操作来向 iOS 系统申请更多的后台时间,或者直接常驻后台。例如一些音乐类 App,当我们退出这类 App,我们还是可以听到 🎵 的播放,这些 App 就属于常驻后台的 App。
这一篇介绍如何将 Autolayout 应用到 UIScrollView 上。
在 [UIScrollView Tutorial: Getting Started][2] 这篇文章中的 Scrolling and Zooming a Large Image 这节中,给 UIScrollView 添加 top/bottom/leading/trailing 的约束,确定 UIScrollView 的 frame。再给 UIScrollView 中的 UIImageView 添加 constant 为 0 的 top/bottom/leading/trailing 约束,运行之后,UIScrollView 中的 contentSize 就是图片的大小,可以滚动查看所有内容。
The Main Function
每个基于 C 语言的程序的入口都是 main 函数,iOS App 也没有区别。开发 iOS 你不需要自己编写 main 函数,Xcode 的模版项目会自动实现,一般情况下你不需要修改 main 函数。main 函数会将控制权交给 UIKit framework。UIApplicationMain
函数会创建应用的核心对象,从 SB 文件中加载 UI 界面,启动 App 的 runloop 等等。
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
关于在 Main 函数之前发生了什么,可以看这个 [iOS 程序 main 函数之前发生了什么][2]。
这一篇主要是总结自己在看 App Programming Guide for iOS 的一些收获。大部分内容都是来自 App Programming Guide for iOS。
Xcode 创建的新项目能直接运行在真机和模拟器上,但是你需要做一些自定义才能提交到 App Store 和给用户提供好的体验。
UITableView 应该是 iOS 开发中最重要的控件,当我们要展示多个相似的模型数据的时候,毫无疑问 UITableView 是最好的选择,Apple 已经将 UITableView 的优化做到非常极致了,满足我们简单的模型数据展示基本上是没有问题的。但是很多时候,我们展示的不是简简单单的文字数据,还有其他对性能消耗很大的数据,例如:图片等。在数据不多的情况下,遵循 UITableView 的标准使用方式就能满足要求。像 Twitter / Weibo 这样的数据模型很复杂,数量也很多的情况下,我们就需要通过各种手段来优化 UITableView 的滚动流畅度。