专栏首页岑志军的专栏iOS10新特性-自定义iMessage application

iOS10新特性-自定义iMessage application

1、创建工程

2、工程创建完成后的目录结构

###3、接下来开始写代码

//
//  MessagesViewController.swift
//  MessagesExtension
//
//  Created by 岑志军 on 2016/9/28.
//  Copyright © 2016年 cen. All rights reserved.
//


/*
 虽然没有严格限制,但是苹果建议的表情文件大小:
 1. Small: 100 x 100 pt @3x scale (300 x 300 pixel image)
 2. Medium: 136 x 136 pt @3x scale (378 x 378 pixel image)
 3. Large: 206 x 206 pt @3x scale (618 x 618 pixel image)

 表情包的大小:
 1. 文件中images不可以大于500kb;
 2. iamge不可以小于100 x 100 pt (300 x 300 pixels).
 3. iamge不可以大于206 x 206 pt (618 x 618 pixels).
 4. 图片格式必须是 PNG, APNG, JPEG, GIF ;


 MessageExtension文件
 1. MessagesViewController.swift : iMessage app的程序入口;
 2. MainInterface.storyboard: 可视化操作;
 3. Assets.xcassets: 图片集合;
 4. Info.plist : 配置一些扩展信息;
 */

import UIKit
import Messages

class MessagesViewController: MSMessagesAppViewController {


    // 创建一个MSSticker数组来存储我们的表情包
    var stickers = [MSSticker]()

    /*
     case small 小图模式
     case regular 中图
     case large   大图
     */
     // 要想显示图片表情,必须要初始化一个MSStickerBrowserViewController作为根视图,代码如下
    private func setupStickerBrowser() {
        let controller = MSStickerBrowserViewController(stickerSize: .small)

        addChildViewController(controller)
        view.addSubview(controller.view)

        // 设置数据源
        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.加载表情包,上面设置了数据源,所以我们要加载图片(数据)
    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)
                }

            }

        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        // 初始化本地表情包
        loadStickers()
        // 创建本地表情包控制器
        setupStickerBrowser()
    }
}

// 实现MSStickerBrowserViewController数据源方法
extension MessagesViewController: MSStickerBrowserViewDataSource{
    // 一共有多少个
    func numberOfStickers(in stickerBrowserView: MSStickerBrowserView) -> Int {
        return stickers.count
    }

    // 每一个要显示什么
    func stickerBrowserView(_ stickerBrowserView: MSStickerBrowserView, stickerAt index: Int) -> MSSticker {
        return stickers[index]
    }
}

最后大功告成:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • HTML5-CSS布局

    czjwarrior
  • WKWebView 白屏问题

    czjwarrior
  • HTML5选择器

    czjwarrior
  • 【AlphaGo Zero之后,AI何时超越人类?】谷歌Kurzweil:2045

    【新智元导读】继AlphaGo Zero无师自通击败上一版本的AlphaGo之后,人们纷纷猜测AI何时超越人类智慧。谷歌工程负责人、未来学家Ray Kurzwe...

    新智元
  • 调用 MFMessageComposeViewController UINavigationBar 高出一截

    GuangdongQi
  • 关于爬虫数据的解析器设计

    我的七月小说网肯定不止爬单个站点的,每新增一个站点或者网页dom发生变化就得修改代码,多累哦。 所以我决定弄个数据解析器。

    从今若
  • K8S 生态周报| 终端下的 K8S 资源树查看器

    「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s 生态」。

    Jintao Zhang
  • 「回顾」强化学习在自然语言处理中的应用

    本文首先介绍了强化学习的概念和相关知识,以及与监督学习的区别,然后就强化学习在自然语言处理应用中的挑战和优势进行了讨论。

    石晓文
  • leetcode386. Lexicographical Numbers

    将1~n这n个数字按照字母序排序,并返回排序后的结果。 即如果n=13,则1~13的字母序为1,10,11,12,13,2,3,4,5,6,7,8,9

    眯眯眼的猫头鹰
  • 替换HTML代码

    将一些HTML替换掉eg:strContent=strContent.Replace(&,&a...

    Java架构师必看

扫码关注云+社区

领取腾讯云代金券