上一篇文章分享了最簡單的iMessage application的開發(fā),顯然那個固定的模板是滿足不了我們的需求的,所以本次軍哥分享自定義的iMessage application
本次WWDC大會最大的兩點(diǎn)就是iMessage,所以讓我們來體驗(yàn)一下吧
接下來廢話不多說直接上教程
1.創(chuàng)建工程
2.工程創(chuàng)建完畢之后你會看到是這個樣子的
3.在開發(fā)之前先說明MessageExtension文件夾下的文件作用
- MessagesViewController.swift : iMessage app的程序入口;
- MainInterface.storyboard: 可視化操作;
- Assets.xcassets: 圖片集合;
- Info.plist : 配置一些擴(kuò)展信息;
4.那么我們開始開發(fā)吧
要想顯示圖片表情,必須要初始化一個MSStickerBrowserViewController作為根視圖,代碼如下
// 初始化一個MSStickerBrowserViewController作為根視圖
private func setupStickerBrowser() {
/*
case small 小圖模式
case regular 中圖
case large 大圖
}
*/
let controller = MSStickerBrowserViewController(stickerSize: .small)
addChildViewController(controller)
view.addSubview(controller.view)
// 語法變了
controller.stickerBrowserView.backgroundColor = UIColor.yellow
// 設(shè)置數(shù)據(jù)源
controller.stickerBrowserView.dataSource = self
// 布局
view.topAnchor.constraint(equalTo: controller.view.topAnchor).isActive = true
view.bottomAnchor.constraint(equalTo: controller.view.bottomAnchor).isActive = true
view.leftAnchor.constraint(equalTo: controller.view.leftAnchor).isActive = true
view.rightAnchor.constraint(equalTo: controller.view.rightAnchor).isActive = true
}
5.加載表情包,上面設(shè)置了數(shù)據(jù)源,所以我們要加載圖片(數(shù)據(jù))
// 創(chuàng)建一個MSSticker數(shù)組來存儲我們的表情包
var stickers = [MSSticker]()
private func loadStickers() {
for i in 1...31 {
// 語法變了
let str = String(format: "%02d", i)
print(str)
if let url = Bundle.main.url(forResource: str, withExtension: "gif") {
do {
let sticker = try MSSticker(contentsOfFileURL: url, localizedDescription: "")
stickers.append(sticker)
} catch {
print(error)
}
}
}
}
6.接下來在viewDidLoad方法里面調(diào)用就OK了
override func viewDidLoad() {
super.viewDidLoad()
// 初始化本地表情包
loadStickers()
// 創(chuàng)建本地表情包控制器
setupStickerBrowser()
}
7.接下來實(shí)現(xiàn)MSStickerBrowserViewController數(shù)據(jù)源方法
// MARK: - MSStickerBrowserViewDataSource 必須要實(shí)現(xiàn)的數(shù)據(jù)源方法
extension MessagesViewController: MSStickerBrowserViewDataSource{
// 一共有多少個
func numberOfStickers(in stickerBrowserView: MSStickerBrowserView) -> Int {
return stickers.count
}
// 每一個要顯示什么
func stickerBrowserView(_ stickerBrowserView: MSStickerBrowserView, stickerAt index: Int) -> MSSticker {
return stickers[index]
}
}
8.到此大工告成你會看到這樣的界面
9.最后軍哥來逐一介紹一下這個類里面的其他方法,會話處理狀態(tài)
- 1.didReceiveMemoryWarning 當(dāng)發(fā)生內(nèi)存警告的時候調(diào)用
- 2.willBecomeActive 將要獲取焦點(diǎn)的時候調(diào)用
- 3.didResignActive 失去焦點(diǎn)
- 4.didReceive 收到信息
- 5.didStartSending 開始發(fā)送
- 6.didCancelSending 取消發(fā)送
- 7.willTransition 將要過度,可以改變風(fēng)格
- 8.didTransition 過度完畢
圖片素材下載
github代碼下載
真機(jī)調(diào)試報(bào)錯問題請看我的另一片文章iOS10新特性-最簡單的iMessage application開發(fā)
好了小伙伴們趕快去試試吧
持續(xù)更新實(shí)用的干貨,關(guān)注軍哥請看我的簡書首頁