美文网首页Swift学习iOS tipsiOS学习
iOS10新特性-自定义iMessage application

iOS10新特性-自定义iMessage application

作者: coderYJ | 来源:发表于2016-09-21 16:40 被阅读360次

    上一篇文章分享了最简单的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

      本文链接:https://www.haomeiwen.com/subject/uieaettx.html