iOS10新特性-自定义iMessage application

上一篇文章分享了最简单的iMessage application的开发,显然那个固定的模板是满足不了我们的需求的,所以本次军哥分享自定义的iMessage application
本次WWDC大会最大的两点就是iMessage,所以让我们来体验一下吧

接下来废话不多说直接上教程
1.创建工程


选择

2.工程创建完毕之后你会看到是这个样子的


如果你想自定义在MessageViewController.swift里面写

3.在开发之前先说明MessageExtension文件夹下的文件作用
  1. MessagesViewController.swift : iMessage app的程序入口;
  1. MainInterface.storyboard: 可视化操作;
  2. Assets.xcassets: 图片集合;
  3. Info.plist : 配置一些扩展信息;

4.那么我们开始开发吧
要想显示图片表情,必须要初始化一个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
        // 设置数据源
        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.加载表情包,上面设置了数据源,所以我们要加载图片(数据)

// 创建一个MSSticker数组来存储我们的表情包
    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方法里面调用就OK了

override func viewDidLoad() {
        super.viewDidLoad()
        // 初始化本地表情包
        loadStickers()
        // 创建本地表情包控制器
        setupStickerBrowser()
    }

7.接下来实现MSStickerBrowserViewController数据源方法

// MARK: - MSStickerBrowserViewDataSource 必须要实现的数据源方法
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.最后军哥来逐一介绍一下这个类里面的其他方法,会话处理状态

  • 1.didReceiveMemoryWarning 当发生内存警告的时候调用
  • 2.willBecomeActive 将要获取焦点的时候调用
  • 3.didResignActive 失去焦点
  • 4.didReceive 收到信息
  • 5.didStartSending 开始发送
  • 6.didCancelSending 取消发送
  • 7.willTransition 将要过度,可以改变风格
  • 8.didTransition 过度完毕

图片素材下载
github代码下载
真机调试报错问题请看我的另一片文章iOS10新特性-最简单的iMessage application开发

好了小伙伴们赶快去试试吧
持续更新实用的干货,关注军哥请看我的首页

你可能感兴趣的:(iOS10新特性-自定义iMessage application)