7.表情贴图类MSSticker与MSStickerView
在制作表情包Sticker Picks的时候,开发者不需要编写一行代码,实际上如果要通过代码来开发表情包也是没有问题的,这里需要用到的一个类就是MSSticker类,简单理解,MSSticker类对象就是一个表情贴图,但是它不是一个View视图,若想在Messages App中看到这个表情贴图,还需要借助一个类MSStickerView,MSStickerView是用于承载表情贴图的视图类,用户选中它后,可以在Messages应用中进行发送。
首先,MSSticker类创建方法如下:
//初始化方法 通过文件URL 来创建实例
- (nullable instancetype)initWithContentsOfFileURL:(NSURL *)fileURL localizedDescription:(NSString *)localizedDescription error:(NSError * _Nullable *)error NS_DESIGNATED_INITIALIZER;
MSStickerView类解析如下:
//通过MSSticker来进行MSStickerView类的创建
- (instancetype)initWithFrame:(CGRect)frame sticker:(nullable MSSticker *)sticker;
//获取动画播放一遍的时间 如果是gif
@property(nonatomic, readonly) NSTimeInterval animationDuration;
//开始动画
-(void) startAnimating;
//结束动画
-(void) stopAnimating;
//获取动画状态
- (BOOL)isAnimating;
需要注意,MSStickerView如果加载的是gif类型的表情贴图,默认不会播放动画,开发者可以调用开始动画的方法来进行gif动画的播放。
8.表情包视图控制器MSStickerBrowserViewController
其实通过前面的内容,已经可以自定义开发一个表情包Messages App了,但是还有一个视图控制器类MSStickerBrowserViewController,这个类可以更加简单方面的创建表情包视图控制器。要了解MSStickerBrowserViewController类,首先应该先了解MSStickerBrowserView类,这两个类的关系十分类似于UITableViewController与UITableView类的关系。MSStickerBrowserView是用于展示表情视图的容器,其继承自UIView,但却和UICollectionView十分类似,其中方法解析如下:
//初始化方法 设置frame 和其中表情视图的尺寸模式
/*
typedef NS_ENUM(NSInteger, MSStickerSize) {
//小尺寸
MSStickerSizeSmall,
//标准尺寸
MSStickerSizeRegular,
//大尺寸
MSStickerSizeLarge
} NS_ENUM_AVAILABLE_IOS(10_0);
*/
- (instancetype)initWithFrame:(CGRect)frame stickerSize:(MSStickerSize)stickerSize NS_DESIGNATED_INITIALIZER;
//数据源代理
@property (nonatomic, weak, nullable) id <MSStickerBrowserViewDataSource> dataSource;
//当前的滑动位置
@property (nonatomic, assign, readwrite) CGPoint contentOffset;
//内容偏移尺寸
@property (nonatomic, assign, readwrite) UIEdgeInsets contentInset;
//设置当前的滑动位置
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;
//刷新数据
- (void)reloadData;
MSStickerBrowserView的数据填充需要在代理方法中实现,如下:
//设置表情贴图个数
- (NSInteger)numberOfStickersInStickerBrowserView:(MSStickerBrowserView *)stickerBrowserView;
//设置具体每个位置的表情贴图
- (MSSticker *)stickerBrowserView:(MSStickerBrowserView *)stickerBrowserView stickerAtIndex:(NSInteger)index;
再看MSStickerBrowserViewController就十分容易了,它只是将MSStickerBrowserView封装在了一个UIViewController中,并且这个UIViewController遵守了MSStickerBrowserViewDataSource协议,开发者直接实现协议方法即可。
四、开发Messages App中的建议
下面是Apple对Messages App的定位和一些建议,还有我的一些理解:
1.确保应用是有用的并且易于理解。
2.功能要聚焦单一,不要组合多种功能在一起。
3.Messages通常用在双人非正式的交谈中,应从这里入手,让交流更加有趣。
4.Messages的最大两点是分享,利用这一点出发开发Messages App。
5.插图内容布局要注意,系统会自动将内容变为圆角,不要把重要的信息放在角落。
6.注意,在紧凑模式下,Messages App的界面是不允许水平滚动的。
7.同样,在紧凑模式下,Messages App不允许键盘输入。