iOS开发-iMessage App可发送贴纸、音频、视频
来源:互联网 发布:软件测试的薪资 编辑:程序博客网 时间:2024/04/30 08:28
前言
iMessage app是iOS10中嵌入到Message内容的 iMessage apps,包含简单的表情包以及自定义的复杂界面。
iMessage APP可以分为2类:
- Sticker pack app:单独的表情包应用,不需要编写任何代码,只需拖动图片即可,包括静态和动态表情。
- iMessage app:单独的iMessage应用,要编写代码,可以发送表情包、文字、视频、音频。
上面两个也可以以一个APP扩展嵌入到iMessage 应用中。(比如美图秀秀)一个APP,在iMessage中又有扩展。卸载APP时就会把iMessage中的扩展也卸载掉。
本文图片大多来自官方例子
本文参考内容: Messages框架 、官方例子、iOS 10 创建iMessage App
创建Sticker pack app独立的表情包
表情包限制(只是建议,具体可以自己运行试试)
- Small: 100 x 100 pt @3x scale (300 x 300 pixel image)
- Medium: 136 x 136 pt @3x scale (378 x 378 pixel image)
- Large: 206 x 206 pt @3x scale (618 x 618 pixel image)
也有其他的一些限制, 表情包的大小:
- 文件中images不可以大于500kb;
- image不可以小于100 x 100 pt (300 x 300 pixels).
- image不可以大于206 x 206 pt (618 x 618 pixels).
- image格式必须是 PNG, APNG, JPEG, GIF ;
添加静态表情包
1.创建 Sticker pack工程
2.拖入图片
3.运行效果
完成了Sticker pack静态表情包。
添加动态表情包
1.选中Sticker Pack文件夹 点击下方➕号选择New Sticker Sequence添加动态表情。
2.拖入该动态图片的各个帧图片即可。
3.可设置动态表情包时间
4.运行效果
这就已经完成了Sticker pack app。
创建iMessage APP
个人理解有三种实现方式
1. 直接在MessagesAppViewController类中添加View。简单,复杂的View不好管理。
2. 创建MSStickerBrowserViewController。作为子类添加到MessagesAppViewController中,只需要实现贴纸界面可以选择这种方式比较简单。
3. 自定义一个ViewControlle,作为子类添加到MessagesAppViewController中。添加过后和普通APP开发基本没区别,但要注意View高度的变化,自动布局。
自定义贴纸布局
Messages框架有几个基础类:
MSMessagesAppViewController:iMessage APP程序入口,工程默认创建其子类MessagesAppViewController
MSSticker:表情。
MSStickerBrowserView:表情View。
MSStickerBrowserViewController:表情ViewController。
MSStickerBrowserViewDataSource:表情数据来源代理。
其实上面四个类就近似于UITableViewCell、UITableView、UITableViewController,UITableViewDataSource的关系(不过UITableViewCell是UIView子类,而MSSticker是NSObject子类)。
生成的目录结构,主要是针对MessageExtension文件夹开发。其中resource是自己加的图片数据。
在MessagesAppViewController中加载表情包数据,创建MSStickerBrowserViewController实现MSStickerBrowserViewDataSource代理数据。
#import "MessagesViewController.h"@interface MessagesViewController ()<MSStickerBrowserViewDataSource>@property (nonatomic,strong) NSMutableArray *stickers;@end@implementation MessagesViewController- (void)viewDidLoad { [super viewDidLoad]; [self loadStickers]; [self createStickerBrowser];}//加载表情包- (void)loadStickers { NSMutableArray *arrayM = [NSMutableArray array]; for (int i = 1; i < 11; i++) { NSURL *url = [[NSBundle mainBundle] URLForResource:[NSString stringWithFormat:@"scoops%02d_sticker",i] withExtension:@"png"]; MSSticker *sticker = [[MSSticker alloc] initWithContentsOfFileURL:url localizedDescription:@"" error:nil]; [arrayM addObject:sticker]; } self.stickers = arrayM;}-(void)createStickerBrowser{ MSStickerBrowserViewController *controller = [[MSStickerBrowserViewController alloc] initWithStickerSize:MSStickerSizeSmall]; [self addChildViewController:controller]; [self.view addSubview:controller.view]; controller.stickerBrowserView.backgroundColor = [UIColor greenColor]; controller.stickerBrowserView.dataSource = self; controller.view.translatesAutoresizingMaskIntoConstraints = NO; //自动布局 [self.view.topAnchor constraintEqualToAnchor:controller.view.topAnchor].active = YES; [self.view.bottomAnchor constraintEqualToAnchor:controller.view.bottomAnchor].active = YES; [self.view.leftAnchor constraintEqualToAnchor:controller.view.leftAnchor].active = YES; [self.view.rightAnchor constraintEqualToAnchor:controller.view.rightAnchor].active = YES;}@end
这样就完成了在代码中添加贴图。
自定义ViewController可发送图片,音频,视频文件
我们可以像上面一样添加一个iMessage应用,也可以在一个普通APP中加入iMessage扩展(APP)。接下来我们在已有的项目中添加iMessage APP扩展。
点击➕添加iMessage扩展
点击finish,弹框选Yes。完成添加扩展生成的目录和创建的iMessage APP在MyMessage2Extension目录下是一样的。
发送图片、音视频文件。
activeConversation
是MSMessagesAppViewController
里面的一个属性。发送音视频文件,都是通过这个方法。
[self.activeConversation insertAttachment:url withAlternateFilename:nil completionHandler:^(NSError * _Nullable error) { if (error) { NSLog(@"%@",error); }}];
传入对应文件的URL即可。
NSURL *url = [[NSBundle mainBundle] URLForResource:@"image" withExtension:@"png"];
有时候可能找不到对应的URL。可在这里查看是否有加入的文件,没有点击➕号加入该文件即可。
发送贴纸
发送贴纸通过这个方法,同理传入对应URL即可,注意贴纸尺寸问题。
MSSticker *sticker = [[MSSticker alloc] initWithContentsOfFileURL:url localizedDescription:@"localizedDescription" error:nil];[self.activeConversation insertSticker:sticker completionHandler:^(NSError * _Nullable error) { if (error) { NSLog(@"%@",error); }}];
发送自定义消息
发送自定义消息主要是定义message的layout
属性以及其他的相关属性。
MSMessageTemplateLayout *layout = [[MSMessageTemplateLayout alloc] init];layout.image = [UIImage imageNamed:@"image"];layout.imageTitle = @"老虎";MSMessage *message = [[MSMessage alloc] init];message.layout =layout;[self.activeConversation insertMessage:message completionHandler:^(NSError * _Nullable error) { if (error) { NSLog(@"%@",error); }}];
参考内容:iOS 10 创建iMessage App、 Messages框架 、官方例子
如果能弄懂官方例子的话iMessage APP可以说基本掌握了。
附上自己写的Demo
- iOS开发-iMessage App可发送贴纸、音频、视频
- iMessage app 开发
- iOS开发音频、视频
- iOS 10 创建iMessage App
- iOS 10 创建iMessage App
- IOS开发音频与视频
- ios 视频,音频,开发详解
- 趁热来一波,WWDC 2016 iMessage App开发
- ios 10 开发-使用 Extension创建iMessage App & Sticker Pack Application
- iOS开发----音频、视频的实现
- iOS开发 音频播放、录音、视频播放、拍照、视频录制
- iOS开发:音频播放、录音、视频播放、拍照、视频录制
- iOS开发--音频播放、录音、视频播放、拍照、视频录制
- iOS开发15-iOS SQLite存取图片、视频、音频
- iMessage 通讯录发送
- iOS开发之音轨合成(音频与音频,音频与视频)
- iOS开发-播放本地音频(可后台播放)
- iOS开发-播放本地音频(可后台播放)
- Linux mint18安装WPS与截图工具shutter
- HDU-2026首字母变大写
- 11个热门物联网开发平台的比较
- 深拷贝
- ubuntu下的ssh安装配置
- iOS开发-iMessage App可发送贴纸、音频、视频
- memcpy strcpy
- Linux Mint (应用软件:Calculator)
- 三条指令安装docker registry
- Last K elements in LinkedList(CC150 2.2)
- DOM对HTML元素的增删改查操作2
- onCreate(Bundle savedInstanceState, PersistableBundle persistentState)大坑!
- 在Eclipse中如何关联源代码
- muduo网络库学习笔记(11):有用的EventLoop::runInLoop()函数