这是此文档的第一篇文章,写在之前要说的话。里面设计的技术点可能有些新人不是太了解,我只会说我遇到的难点和思路,文章也是想到那里写到那里。
初始化工程,我们采用Swift
进行开发,我们选择基于iOS8.0以上进行开发,只支持iPhone。
获取资源文件和图片
我们利用电脑的iTunes
下载最新的百思不得姐的应用,我下载的是4.5版本的应用,后续的版本可能有一些不同。
修改百思不得姐 4.5.ipa
名字改成百思不得姐 4.5.zip
点击弹出框使用zip
的后缀名称。
我们使用Mac
自带的解压或者其他解压的工具解压百思不得姐 4.5.zip
我们打开解压出来的文件包,前往~/Payload/MyWeiboJingXuan
目录。
MyWeiboJingXuan
这个可以点击右键,点击查看包内容
进入。
我们删除没用的签名文件夹_CodeSignature
,nib
文件,
我们把留下来的资源文件放在我新建的工程里面。修改我们的初始化工程和文件所在文件包的位置。
初始化工程文件包下载地址下载地址。
启动页面
虽然我们项目设置的启动图,但都是一闪而过。我们需要做一些展示广告事情什么的,就需要单独的做一个界面出来。
我们在Main.stroyboard
里面新建一个UIViewController
的界面,新建一个类BLaunchViewController
。让我们新建的界面类指向BLaunchViewController
;
因为要显示启动的图片,我们选择添加UIImageView
控件到BLaunchViewController
界面上去,设置约束占整个界面。
我们新建一个UIImageView
的变量名称叫做launchImageView
连接到BLaunchViewController
类里面。
我们只支持iOS8.0以上,只支持iPhone,所以只支持下面的机型。
iPhone4s/iPhone5/iPhone5c/iPhone5s/iPhone se/iPhone6/iPhone plus/iPhone7/iPhone7 plus
所以我们支持的分辨率有640x960/640x1136/750x1334/1242x2208
一个不好的解决方法:
因为现在启动图都在启动图包里面存储,暂时没找到办法获取到里面的图片。我们只好提取需要尺寸的图片单独拿出来。
如果有其他获取启动包里面图片可以告诉我。我觉得这个方法严重造成安装包的臃肿。
我们在BLaunchViewController
里面新增获取当前要显示图片的获取方法getLaunchImage
.
因为我之前命名按照屏幕的分辨率+@屏幕的倍数,我们就需要方法获取屏幕的尺寸和倍数就可以合成图片的名称。
我们定义常量KAppScreenWidth
标识屏幕的宽度,定义常量KAppScreenHeight
标识屏幕的高度,定义常量KappScreenScale
标识屏幕的倍数。
因为是CGFloat
类型,可能造成因为小数点影响图片名字查找我们同意用Int()
函数强行换成Int
类型的。
/// 获取启动的图片
///
/// - returns: 可能因为图片的问题 获取不到返回为nil
func getLaunchImage() -> UIImage? {
let launchImageName = "\(Int(KAppScreenWidth))x\(Int(KAppScreenHeight))@\(Int(KappScreenScale))"
return UIImage(named: launchImageName)
}
我们在BLaunchViewController
的viewDidLoad()
方法里面给launchImageView
赋值。
我们是不是迫不及待的查看效果,我们run
一下。运行在iPhone5s 8.4
上面
结果如下:
为啥是这个样子
按照自己的逻辑应该不回错的,运行出不来,一头雾水。
我觉得可能图片没有获取到,我们断点看一下生成图片的名称。
看到这里我们霍然开朗,前面只是屏幕的尺寸不是分辨率。并且还缺少x
这个字段。我们修改一下代码。
let launchImageName = "\(Int(KAppScreenWidth * KappScreenScale))x\(Int(KAppScreenHeight * KappScreenScale))@\(Int(KappScreenScale))x"
我们继续的测试运行。
还是没有出现。
我们使用
po UIImage(named: launchImageName)
打印出来nil
代表没有找到,我们打印一下图片的名字。
po launchImageName
"640x1136@2x"
这样都获取不到数据,是不是因为图片名称后面没有后缀?我们使用expression
重新设置图片的名称。
expression launchImageName = "640x1136@2x.png"
我们再次的获取图片,还是获取不到。
我们查看一下名字 发现系统已经自动把后缀去掉 只剩下分辨率作为图片的名称。
我们再次利用expression
修改名字。
(lldb) expression launchImageName = "640x1136"
(lldb) po UIImage(named: launchImageName)
发现这次有结果了。
既然这样可以,我们修改一下代码
let launchImageName = "\(Int(KAppScreenWidth * KappScreenScale))x\(Int(KAppScreenHeight * KappScreenScale))"
再次运行。
本章教程结束 下一章继续。
本次版本下载版本下载