chore: Initial clean commit
- Removed YuMi/Library/ (138 MB, not tracked) - Removed YuMi/Resources/ (23 MB, not tracked) - Removed old version assets (566 files, not tracked) - Excluded Pods/, xcuserdata/ and other build artifacts - Clean repository optimized for company server deployment
44
YuMi/CustomUI/Adbvertise/AdvertiseModel.h
Normal file
@@ -0,0 +1,44 @@
|
||||
//
|
||||
// AdvertiseModel.h
|
||||
// YUMI
|
||||
//
|
||||
// Created by YUMI on 2022/10/31.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
typedef NS_ENUM(NSInteger, SplashInfoSkipType) {
|
||||
SplashInfoSkipTypePage = 1,
|
||||
SplashInfoSkipTypeRoom = 2,
|
||||
SplashInfoSkipTypeWeb = 3,
|
||||
SplashInfoSkipTypeWeb_CP = 4,
|
||||
SplashInfoSkipTypeWeb_WeekStar = 5,
|
||||
SplashInfoSkipTypeWeb_Custom = 6,
|
||||
};
|
||||
|
||||
@interface AdvertiseFillModel : PIBaseModel
|
||||
|
||||
@property(nonatomic, copy) NSString *loverNick;
|
||||
@property(nonatomic, copy) NSString *loverErbanNo;
|
||||
@property(nonatomic, copy) NSString *loverAvatar;
|
||||
@property(nonatomic, copy) NSString *nick;
|
||||
@property(nonatomic, copy) NSString *erbanNo;
|
||||
@property(nonatomic, copy) NSString *avatar;
|
||||
@property(nonatomic, copy) NSString *picUrl;
|
||||
@property(nonatomic, copy) NSString *giftName;
|
||||
@property(nonatomic, copy) NSString *giftId;
|
||||
|
||||
@end
|
||||
|
||||
@interface AdvertiseModel : PIBaseModel
|
||||
@property (nonatomic, strong) NSString *link;
|
||||
@property (nonatomic, assign) SplashInfoSkipType type;// 1跳app页面,2跳聊天室,3跳h5页面,
|
||||
@property (nonatomic, copy) NSString *pict;
|
||||
@property(nonatomic, strong) AdvertiseFillModel *fillVo;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
23
YuMi/CustomUI/Adbvertise/AdvertiseModel.m
Normal file
@@ -0,0 +1,23 @@
|
||||
//
|
||||
// AdvertiseModel.m
|
||||
// YUMI
|
||||
//
|
||||
// Created by YUMI on 2022/10/31.
|
||||
//
|
||||
|
||||
#import "AdvertiseModel.h"
|
||||
|
||||
@implementation AdvertiseFillModel
|
||||
|
||||
@end
|
||||
|
||||
@implementation AdvertiseModel
|
||||
|
||||
+ (NSDictionary *)objectClassInArray {
|
||||
return @{
|
||||
@"fillVo": [AdvertiseFillModel class],
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@end
|
48
YuMi/CustomUI/Adbvertise/XPAdImageTool.h
Normal file
@@ -0,0 +1,48 @@
|
||||
//
|
||||
// YMAdImageTool.h
|
||||
// YUMI
|
||||
//
|
||||
// Created by YUMI on 2022/10/31.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "AdvertiseModel.h"
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface XPAdImageTool : PIBaseModel
|
||||
+ (instancetype)shareImageTool;
|
||||
|
||||
///是否登录成功im
|
||||
@property (nonatomic,assign)BOOL isImLogin;
|
||||
|
||||
//去除广告信息
|
||||
- (AdvertiseModel *)getAdInfoFromCacheInMainWith:(NSString *)link;
|
||||
///保存信息
|
||||
- (void)saveAdInfo:(AdvertiseModel *)adInfo;
|
||||
/**
|
||||
* 判断文件是否存在
|
||||
*/
|
||||
- (BOOL)isFileExistWithFilePath:(NSString *)filePath;
|
||||
|
||||
/**
|
||||
* 初始化广告页面
|
||||
*/
|
||||
- (void)getAdvertisingImage;
|
||||
|
||||
/**
|
||||
* 下载新图片
|
||||
*/
|
||||
- (void)downloadAdImageWithUrl:(NSString *)imageUrl imageName:(NSString *)imageName;
|
||||
|
||||
/**
|
||||
* 删除旧图片
|
||||
*/
|
||||
- (void)deleteOldImage;
|
||||
|
||||
/**
|
||||
* 根据图片名拼接文件路径
|
||||
*/
|
||||
- (NSString *)getFilePathWithImageName:(NSString *)imageName;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
158
YuMi/CustomUI/Adbvertise/XPAdImageTool.m
Normal file
@@ -0,0 +1,158 @@
|
||||
//
|
||||
// YMAdImageTool.m
|
||||
// YUMI
|
||||
//
|
||||
// Created by YUMI on 2022/10/31.
|
||||
//
|
||||
|
||||
#import "XPAdImageTool.h"
|
||||
#import <YYCache/YYCache.h>
|
||||
#import "UploadFile.h"
|
||||
|
||||
#define CACHENAME @"XPUserCache"
|
||||
|
||||
UIKIT_EXTERN NSString * const adImageName;
|
||||
@interface XPAdImageTool ()
|
||||
@property (nonatomic, strong) YYCache *yyCache;
|
||||
///广告信息
|
||||
@property (nonatomic,strong) AdvertiseModel *infoModel;
|
||||
@end
|
||||
|
||||
static XPAdImageTool* tool;
|
||||
@implementation XPAdImageTool
|
||||
|
||||
+ (instancetype)shareImageTool {
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
tool = [[XPAdImageTool alloc] init];
|
||||
});
|
||||
return tool;
|
||||
}
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
self.yyCache = [YYCache cacheWithName:CACHENAME];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
//去除广告信息
|
||||
- (AdvertiseModel *)getAdInfoFromCacheInMainWith:(NSString *)link {
|
||||
if (link.length > 0) {
|
||||
if ([self.yyCache containsObjectForKey:link]) {
|
||||
return (AdvertiseModel *)[self.yyCache objectForKey:link];
|
||||
}else {
|
||||
return nil;
|
||||
}
|
||||
}else {
|
||||
return nil;
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
||||
///保存信息
|
||||
- (void)saveAdInfo:(AdvertiseModel *)adInfo {
|
||||
self.infoModel = adInfo;
|
||||
NSArray *stringArr = [adInfo.pict componentsSeparatedByString:@"/"];
|
||||
NSString *key = stringArr.lastObject;
|
||||
[self.yyCache setObject:(id<NSCoding> )adInfo forKey:key withBlock:^{
|
||||
|
||||
}];
|
||||
|
||||
[self getAdvertisingImage];
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断文件是否存在
|
||||
*/
|
||||
- (BOOL)isFileExistWithFilePath:(NSString *)filePath {
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
BOOL isDirectory = FALSE;
|
||||
return [fileManager fileExistsAtPath:filePath isDirectory:&isDirectory];
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化广告页面
|
||||
*/
|
||||
- (void)getAdvertisingImage {
|
||||
|
||||
if (self.infoModel.pict.length > 0) {
|
||||
NSString *imageUrl = self.infoModel.pict;
|
||||
// 获取图片名
|
||||
NSArray *stringArr = [imageUrl componentsSeparatedByString:@"/"];
|
||||
NSString *imageName = stringArr.lastObject;
|
||||
|
||||
// 拼接沙盒路径
|
||||
NSString *filePath = [self getFilePathWithImageName:imageName];
|
||||
BOOL isExist = [self isFileExistWithFilePath:filePath];
|
||||
if (!isExist){// 如果该图片不存在,则删除老图片,下载新图片
|
||||
[self downloadAdImageWithUrl:imageUrl imageName:imageName];
|
||||
}
|
||||
}else {
|
||||
[self deleteOldImage];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载新图片
|
||||
*/
|
||||
- (void)downloadAdImageWithUrl:(NSString *)imageUrl imageName:(NSString *)imageName {
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||
NSString *filePath = [self getFilePathWithImageName:imageName]; // 保存文件的名称
|
||||
|
||||
if ([imageUrl.lowercaseString hasSuffix:@"svga"]) {
|
||||
@kWeakify(self);
|
||||
[[UploadFile share] download:imageUrl path:filePath complete:^{
|
||||
@kStrongify(self);
|
||||
[self deleteOldImage];
|
||||
[[NSUserDefaults standardUserDefaults] setValue:imageName forKey:adImageName];
|
||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
||||
} failure:^{
|
||||
@kStrongify(self);
|
||||
[self deleteOldImage];
|
||||
}];
|
||||
} else {
|
||||
NSString *encode = [imageUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
|
||||
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:encode]];
|
||||
UIImage *image = [UIImage imageWithData:data];
|
||||
|
||||
if ([UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES]) {// 保存成功
|
||||
[self deleteOldImage];
|
||||
[[NSUserDefaults standardUserDefaults] setValue:imageName forKey:adImageName];
|
||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
||||
}else{
|
||||
[self deleteOldImage];
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除旧图片
|
||||
*/
|
||||
- (void)deleteOldImage {
|
||||
NSString *imageName = [[NSUserDefaults standardUserDefaults] valueForKey:adImageName];
|
||||
if (imageName) {
|
||||
NSString *filePath = [self getFilePathWithImageName:imageName];
|
||||
NSFileManager *fileManager = [NSFileManager defaultManager];
|
||||
[fileManager removeItemAtPath:filePath error:nil];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据图片名拼接文件路径
|
||||
*/
|
||||
- (NSString *)getFilePathWithImageName:(NSString *)imageName {
|
||||
if (imageName) {
|
||||
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES);
|
||||
NSString *filePath = [[paths xpSafeObjectAtIndex:0] stringByAppendingPathComponent:imageName];
|
||||
|
||||
return filePath;
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
@end
|
26
YuMi/CustomUI/Adbvertise/XPAdvertiseView.h
Normal file
@@ -0,0 +1,26 @@
|
||||
//
|
||||
// YMAdvertiseView.h
|
||||
// YUMI
|
||||
//
|
||||
// Created by YUMI on 2022/10/31.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "AdvertiseModel.h"
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface XPAdvertiseView : UIView
|
||||
|
||||
/** 显示广告页面方法*/
|
||||
- (void)show;
|
||||
|
||||
/** 图片路径*/
|
||||
@property (nonatomic, copy) NSString *filePath;
|
||||
@property(nonatomic, assign) SplashInfoSkipType type;
|
||||
@property(nonatomic, strong) AdvertiseFillModel *fileModel;
|
||||
@property (nonatomic, strong) UIImage *adImage;
|
||||
|
||||
@property (nonatomic, copy) void(^dismissHandler)(BOOL shouldJump); //闪屏消失回调
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
288
YuMi/CustomUI/Adbvertise/XPAdvertiseView.m
Normal file
@@ -0,0 +1,288 @@
|
||||
//
|
||||
// YMAdvertiseView.m
|
||||
// YUMI
|
||||
//
|
||||
// Created by YUMI on 2022/10/31.
|
||||
//
|
||||
|
||||
#import "XPAdvertiseView.h"
|
||||
#import "AppDelegate.h"
|
||||
//tool
|
||||
#import <SVGA.h>
|
||||
#import <sys/sysctl.h>
|
||||
#import <sys/utsname.h>
|
||||
#import "YUMIMacroUitls.h"
|
||||
///Tool
|
||||
#import "UIImage+Utils.h"
|
||||
NSString *const adImageName = @"adImageName";
|
||||
NSString *const adUrl = @"adUrl";
|
||||
// 广告显示的时间
|
||||
static int const showtime = 3;
|
||||
|
||||
@interface XPAdvertiseView() <SVGAPlayerDelegate>
|
||||
|
||||
@property(nonatomic, strong) SVGAImageView *svgaView;
|
||||
|
||||
@property (nonatomic, strong) UIImageView *adView;//广告图片
|
||||
|
||||
@property (nonatomic, strong) UIButton *countdownButton;//倒计时、跳过按钮
|
||||
|
||||
@property (nonatomic, strong) NSTimer *countTimer;
|
||||
|
||||
@property (nonatomic, assign) int count;
|
||||
|
||||
@property (nonatomic, strong) UIWindow *window;
|
||||
|
||||
@property(nonatomic, strong) NSMutableArray *imageLoaders;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@implementation XPAdvertiseView
|
||||
|
||||
#pragma mark - Initialize Methods
|
||||
|
||||
- (instancetype)initWithFrame:(CGRect)frame {
|
||||
if (self = [super initWithFrame:frame]) {
|
||||
|
||||
_adView = [[UIImageView alloc] initWithFrame:frame];
|
||||
_adView.userInteractionEnabled = YES;
|
||||
_adView.contentMode = UIViewContentModeScaleAspectFill;
|
||||
_adView.clipsToBounds = YES;
|
||||
[self addSubview:_adView];
|
||||
|
||||
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapAdViewAction)];
|
||||
[_adView addGestureRecognizer:tap];
|
||||
[self addSubview:self.countdownButton];
|
||||
[self.countdownButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.trailing.mas_equalTo(-24);
|
||||
// make.width.mas_equalTo(60);
|
||||
make.height.mas_equalTo(30);
|
||||
make.top.mas_equalTo(40);
|
||||
}];
|
||||
// // 因为倒数跳秒问题,导致无法及时响应事件,经测试提案说无法接受此结果。所以就做成和安卓一样,去掉倒计时和跳过
|
||||
// if ([self needCountDownBtn]) {
|
||||
// [self addSubview:self.countdownButton];
|
||||
// }
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
#pragma mark - Public Methods
|
||||
|
||||
- (void)show {
|
||||
// 倒计时方法1:GCD
|
||||
[self gcdCoundownHander];
|
||||
|
||||
UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
|
||||
[self.window.rootViewController.view addSubview:self];
|
||||
[self.window makeKeyAndVisible];
|
||||
[keyWindow makeKeyWindow];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Event Response
|
||||
|
||||
/// 点击闪屏操作
|
||||
- (void)onTapAdViewAction {
|
||||
[self dismissWithJumpHandle:YES];
|
||||
}
|
||||
|
||||
/// 点击跳过按钮
|
||||
- (void)onClickSkipButton:(UIButton *)sender {
|
||||
[self dismissWithJumpHandle:NO];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Privite Method
|
||||
|
||||
// GCD倒计时方法
|
||||
- (void)gcdCoundownHander {
|
||||
__block int timeout = showtime;
|
||||
|
||||
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
|
||||
dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
|
||||
dispatch_source_set_timer(_timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0); //每秒执行
|
||||
|
||||
dispatch_source_set_event_handler(_timer, ^{
|
||||
|
||||
if (timeout <= 0) { //倒计时结束,关闭
|
||||
dispatch_source_cancel(_timer);
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[self dismissWithJumpHandle:NO];
|
||||
});
|
||||
} else {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
if (self.countdownButton) {
|
||||
[self.countdownButton setTitle:YMLocalizedString(@"XPAdvertiseView0") forState:UIControlStateNormal];
|
||||
}
|
||||
});
|
||||
timeout--;
|
||||
}
|
||||
});
|
||||
dispatch_resume(_timer);
|
||||
}
|
||||
|
||||
// 移除广告页面
|
||||
- (void)dismissWithJumpHandle:(BOOL)shouldJump {
|
||||
if (self.countTimer) {
|
||||
[self.countTimer invalidate];
|
||||
self.countTimer = nil;
|
||||
}
|
||||
|
||||
@kWeakify(self)
|
||||
[UIView animateWithDuration:0.5f animations:^{
|
||||
@kStrongify(self)
|
||||
self.window.hidden = YES;
|
||||
|
||||
} completion:^(BOOL finished) {
|
||||
@kStrongify(self)
|
||||
|
||||
[self removeFromSuperview];
|
||||
self.window = nil;
|
||||
|
||||
!self.dismissHandler ?: self.dismissHandler(shouldJump);
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
- (NSString *)deviceName {
|
||||
// Gets a string with the device model
|
||||
size_t size;
|
||||
int nR = sysctlbyname("hw.machine", NULL, &size, NULL, 0);
|
||||
char *machine = (char *)malloc(size);
|
||||
nR = sysctlbyname("hw.machine", machine, &size, NULL, 0);
|
||||
NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
|
||||
free(machine);
|
||||
return platform;
|
||||
}
|
||||
|
||||
- (BOOL)needCountDownBtn {
|
||||
|
||||
NSString *platform = [self deviceName];
|
||||
BOOL needBtn = YES;
|
||||
if ([platform isEqualToString:@"iPhone6,1"] ||
|
||||
[platform isEqualToString:@"iPhone6,2"] ||
|
||||
[platform isEqualToString:@"iPhone7,1"] ||
|
||||
[platform isEqualToString:@"iPhone7,2"] ||
|
||||
[platform isEqualToString:@"iPhone8,1"] ||
|
||||
[platform isEqualToString:@"iPhone8,2"] ||
|
||||
[platform isEqualToString:@"iPhone8,4"]) {
|
||||
needBtn = NO;
|
||||
}
|
||||
return needBtn;
|
||||
}
|
||||
|
||||
#pragma mark - Setter
|
||||
- (void)setFilePath:(NSString *)filePath {
|
||||
_filePath = filePath;
|
||||
_imageLoaders = @[].mutableCopy;
|
||||
if (self.type == SplashInfoSkipTypeWeb_CP || self.type == SplashInfoSkipTypeWeb_Custom || self.type == SplashInfoSkipTypeWeb_WeekStar) {
|
||||
_svgaView = [[SVGAImageView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight)];
|
||||
_svgaView.delegate = self;
|
||||
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapAdViewAction)];
|
||||
[_svgaView addGestureRecognizer:tap];
|
||||
// [self addSubview:_svgaView];
|
||||
[self insertSubview:_svgaView belowSubview:self.countdownButton];
|
||||
SVGAParser *p = [[SVGAParser alloc] init];
|
||||
@kWeakify(self);
|
||||
[p parseWithURL:[[NSURL alloc] initFileURLWithPath:filePath] completionBlock:^(SVGAVideoEntity * _Nullable videoItem) {
|
||||
@kStrongify(self);
|
||||
if (videoItem) {
|
||||
self.svgaView.autoPlay = YES;
|
||||
self.svgaView.clearsAfterStop = YES;
|
||||
self.svgaView.videoItem = videoItem;
|
||||
|
||||
if (self.fileModel) {
|
||||
[self updateSvgaImage:self.fileModel.avatar key:@"avatar"];
|
||||
[self updateSvgaImage:self.fileModel.picUrl key:@"gift"];
|
||||
[self updateSvgaImage:self.fileModel.avatar key:@"avatar_1"];
|
||||
[self updateSvgaImage:self.fileModel.loverAvatar key:@"avatar_2"];
|
||||
|
||||
[self updateSvgaText:[NSString stringWithFormat:@"ID: %@", self.fileModel.erbanNo] key:@"id"];
|
||||
[self updateSvgaText:self.fileModel.giftName key:@"name"];
|
||||
[self updateSvgaText:[NSString stringWithFormat:@"ID: %@", self.fileModel.erbanNo] key:@"id_1"];
|
||||
[self updateSvgaText:[NSString stringWithFormat:@"ID: %@", self.fileModel.loverErbanNo] key:@"id_2"];
|
||||
}
|
||||
[self.svgaView startAnimation];
|
||||
}
|
||||
} failureBlock:^(NSError * _Nullable error) {
|
||||
@kStrongify(self);
|
||||
UIImage *image = [UIImage imageWithContentsOfFile:filePath];
|
||||
self.adView.image = [image cutImage:[UIScreen mainScreen].bounds.size];
|
||||
}];
|
||||
} else {
|
||||
UIImage *image = [UIImage imageWithContentsOfFile:filePath];
|
||||
self.adView.image = [image cutImage:[UIScreen mainScreen].bounds.size];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)updateSvgaImage:(NSString *)imagePath key:(NSString *)key {
|
||||
if (self.svgaView && ![NSString isEmpty:imagePath] && ![NSString isEmpty:key]) {
|
||||
UIImage *image = [UIImage imageWithColor:[UIColor colorWithWhite:0.9 alpha:0.9] size:CGSizeMake(100, 100)];
|
||||
[self.svgaView setImage:image
|
||||
forKey:key];
|
||||
__block NetImageView *loader = [[NetImageView alloc] init];
|
||||
@kWeakify(self);
|
||||
@kWeakify(loader);
|
||||
[loader loadImageWithUrl:imagePath
|
||||
completion:^(UIImage * _Nullable image, NSURL * _Nonnull url) {
|
||||
@kStrongify(self);
|
||||
@kStrongify(loader);
|
||||
[self.svgaView setImage:image
|
||||
forKey:key];
|
||||
[self.imageLoaders removeObject:loader];
|
||||
}];
|
||||
[self.imageLoaders addObject:loader];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)updateSvgaText:(NSString *)content key:(NSString *)key {
|
||||
if (self.svgaView && ![NSString isEmpty:content] && ![NSString isEmpty:key]) {
|
||||
NSAttributedString *string = [[NSAttributedString alloc] initWithString:content
|
||||
attributes:@{
|
||||
NSFontAttributeName: kFontMedium(kGetScaleWidth(24)),
|
||||
NSForegroundColorAttributeName: UIColorFromRGB(0xFDF565)
|
||||
}];
|
||||
[self.svgaView setAttributedText:string
|
||||
forKey:key];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setAdImage:(UIImage *)adImage {
|
||||
_adImage = adImage;
|
||||
_adView.image = [adImage cutImage:[UIScreen mainScreen].bounds.size];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - SVGAPlayerDelegate
|
||||
|
||||
|
||||
#pragma mark - Getter
|
||||
|
||||
- (UIWindow *)window {
|
||||
if (_window == nil) {
|
||||
_window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
|
||||
_window.windowLevel = UIWindowLevelAlert;
|
||||
_window.userInteractionEnabled = YES;
|
||||
_window.rootViewController = [[UIViewController alloc] init];
|
||||
}
|
||||
return _window;
|
||||
}
|
||||
|
||||
- (UIButton *)countdownButton {
|
||||
if (_countdownButton == nil) {
|
||||
_countdownButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_countdownButton addTarget:self action:@selector(onClickSkipButton:) forControlEvents:UIControlEventTouchUpInside];
|
||||
[_countdownButton setTitle:YMLocalizedString(@"XPAdvertiseView1") forState:UIControlStateNormal];
|
||||
_countdownButton.titleLabel.font = [UIFont systemFontOfSize:15];
|
||||
[_countdownButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
|
||||
_countdownButton.backgroundColor = [UIColor colorWithRed:38 /255.0 green:38 /255.0 blue:38 /255.0 alpha:0.6];
|
||||
_countdownButton.layer.cornerRadius = 4;
|
||||
_countdownButton.contentEdgeInsets = UIEdgeInsetsMake(0, 8, 0, 8);
|
||||
[_countdownButton sizeToFit];
|
||||
}
|
||||
return _countdownButton;
|
||||
}
|
||||
|
||||
@end
|
79
YuMi/CustomUI/DJDKMIMOMColor.h
Normal file
@@ -0,0 +1,79 @@
|
||||
//
|
||||
// DJDKMIMOMColor.h
|
||||
// YUMI
|
||||
//
|
||||
// Created by YUMI on 2021/9/9.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
|
||||
|
||||
#define UIColorRGBAlpha(rgbValue,a) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:(a)]
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface DJDKMIMOMColor : NSObject
|
||||
/// 主题色0x9682FF
|
||||
+ (UIColor *)appMainColor;
|
||||
///强调色 #248CFE
|
||||
+ (UIColor *)appEmphasizeColor;
|
||||
///强调色1 0xBF36FF
|
||||
+ (UIColor *)appEmphasizeColor1;
|
||||
///强调色2 0xFB486A
|
||||
+ (UIColor *)appEmphasizeColor2;
|
||||
/* ------页面相关颜色 START------ */
|
||||
/// view的背景色 0xF3F5FA
|
||||
+ (UIColor *)appBackgroundColor;
|
||||
/// cell的背景色 0xFFFFFF
|
||||
+ (UIColor *)appCellBackgroundColor;
|
||||
///正文颜色 0x333333
|
||||
+ (UIColor *)mainTextColor;
|
||||
/// 二级文字颜色 0x666666
|
||||
+ (UIColor *)secondTextColor;
|
||||
///三级文字的颜色 0x999999
|
||||
+ (UIColor *)textThirdColor;
|
||||
///分割线的颜色 0xE8E8E8
|
||||
+ (UIColor *)dividerColor;
|
||||
/* ------页面相关颜色 END------ */
|
||||
|
||||
/* ------Button 相关颜色 START------ */
|
||||
/// button 可用 渐变色的开始 0xFFA936
|
||||
+ (UIColor *)confirmButtonGradientStartColor;
|
||||
/// button 可用 渐变色的中间 #9CB3FF
|
||||
+ (UIColor *)confirmButtonGradientMiddleColor;
|
||||
/// button 可用 渐变色的开始 0xFFCB47
|
||||
+ (UIColor *)confirmButtonGradientEndColor;
|
||||
/// 确定的按钮文字颜色 #FFFFFF
|
||||
+ (UIColor *)confirmButtonTextColor;
|
||||
/// 取消按钮 渐变色的开始 0xF7DDBF
|
||||
+ (UIColor *)cancelButtonGradientStartColor;
|
||||
/// 取消按钮 渐变色的结束 0xF7E8C4
|
||||
+ (UIColor *)cancelButtonGradientEndColor;
|
||||
/// 取消的按钮文字颜色 0xFFA936
|
||||
+ (UIColor *)cancelButtonTextColor;
|
||||
/// 取消按钮单一普通背景色 0xFFCE4E
|
||||
+ (UIColor *)cancelButtonNormalBgColor;
|
||||
/// 按钮不可点击背景色 0xD2D5D7
|
||||
+ (UIColor *)disableButtonColor;
|
||||
/// 按钮不可点击文字颜色 0xF9F9F9
|
||||
+ (UIColor *)disableButtonTextColor;
|
||||
/* ------Button 相关颜色 END------ */
|
||||
|
||||
/* ------弹窗相关颜色 START------ */
|
||||
+ (UIColor *)alertBackgroundColor;
|
||||
+ (UIColor *)alertTitleColor;
|
||||
+ (UIColor *)alertMessageColor;
|
||||
+ (UIColor *)actionSeparatorColor;
|
||||
/* ------弹窗相关颜色 END------ */
|
||||
|
||||
///tabbar 没有点击的时候颜色 0x333333, 0.4
|
||||
+ (UIColor *)tabbarNormalColor;
|
||||
/// tabbar的View的color 0xFFFFFF
|
||||
+ (UIColor *)tabbarViewColor;
|
||||
|
||||
+ (UIColor *)colorWithHexString:(NSString *)hexString;
|
||||
|
||||
+ (UIColor *)inputTextColor;
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
177
YuMi/CustomUI/DJDKMIMOMColor.m
Normal file
@@ -0,0 +1,177 @@
|
||||
//
|
||||
// DJDKMIMOMColor.m
|
||||
// YUMI
|
||||
//
|
||||
// Created by YUMI on 2021/9/9.
|
||||
//
|
||||
|
||||
#import "DJDKMIMOMColor.h"
|
||||
|
||||
@implementation DJDKMIMOMColor
|
||||
/// 主题色0x9682FF
|
||||
+ (UIColor *)appMainColor {
|
||||
return UIColorFromRGB(0x9682FF);
|
||||
}
|
||||
|
||||
///强调色 #248CFE
|
||||
+ (UIColor *)appEmphasizeColor {
|
||||
return UIColorFromRGB(0x248CFE);
|
||||
}
|
||||
|
||||
///强调色1 0xBF36FF
|
||||
+ (UIColor *)appEmphasizeColor1 {
|
||||
return UIColorFromRGB(0xBF36FF);
|
||||
}
|
||||
|
||||
///强调色2 0xFB486A
|
||||
+ (UIColor *)appEmphasizeColor2 {
|
||||
return UIColorFromRGB(0xFB486A);
|
||||
}
|
||||
|
||||
/* ------页面相关颜色 START------ */
|
||||
/// view的背景色 0xF3F5FA
|
||||
+ (UIColor *)appBackgroundColor {
|
||||
return UIColorFromRGB(0xF3F5FA);
|
||||
}
|
||||
/// cell的背景色 0xFFFFFF
|
||||
+ (UIColor *)appCellBackgroundColor {
|
||||
return UIColorFromRGB(0xFFFFFF);
|
||||
}
|
||||
///正文颜色 0x333333
|
||||
+ (UIColor *)mainTextColor {
|
||||
return UIColorFromRGB(0x161958);
|
||||
}
|
||||
/// 二级文字颜色 0x666666
|
||||
+ (UIColor *)secondTextColor {
|
||||
return UIColorFromRGB(0x8A8CAB);
|
||||
}
|
||||
///三级文字的颜色 0x999999
|
||||
+ (UIColor *)textThirdColor {
|
||||
return UIColorFromRGB(0xBABBCD);
|
||||
}
|
||||
///分割线的颜色 0xE8E8E8
|
||||
+ (UIColor *)dividerColor {
|
||||
return UIColorFromRGB(0xE8E8E8);
|
||||
}
|
||||
/* ------页面相关颜色 END------ */
|
||||
|
||||
/* ------Button 相关颜色 START------ */
|
||||
/// button 可用 渐变色的开始 0x3CAAFF
|
||||
+ (UIColor *)confirmButtonGradientStartColor {
|
||||
return UIColorFromRGB(0x13E2F5);
|
||||
}
|
||||
/// button 可用 渐变色的开始 0xB176FF
|
||||
+ (UIColor *)confirmButtonGradientEndColor {
|
||||
return UIColorFromRGB(0xCC66FF);
|
||||
}
|
||||
/// 确定的按钮文字颜色 #FFFFFF
|
||||
+ (UIColor *)confirmButtonTextColor {
|
||||
return UIColorFromRGB(0xFFFFFF);
|
||||
}
|
||||
/// 取消按钮 渐变色的开始 0xF7DDBF
|
||||
+ (UIColor *)cancelButtonGradientStartColor {
|
||||
return UIColorFromRGB(0xCEEFFD);
|
||||
}
|
||||
|
||||
/// button 可用 渐变色的中间 #9CB3FF
|
||||
+ (UIColor *)confirmButtonGradientMiddleColor {
|
||||
return UIColorFromRGB(0xf9CB3FF);
|
||||
}
|
||||
/// 取消按钮 渐变色的结束 0xF7E8C4
|
||||
+ (UIColor *)cancelButtonGradientEndColor {
|
||||
return UIColorFromRGB(0xD2F4F4);
|
||||
}
|
||||
/// 取消的按钮文字颜色 0xFFA936
|
||||
+ (UIColor *)cancelButtonTextColor {
|
||||
return UIColorFromRGB(0x5FCCE4);
|
||||
}
|
||||
/// 取消按钮单一普通背景色 0xFFCE4E
|
||||
+ (UIColor *)cancelButtonNormalBgColor {
|
||||
return UIColorFromRGB(0xCEEFFD);
|
||||
}
|
||||
/// 按钮不可点击背景色 0xD2D5D7
|
||||
+ (UIColor *)disableButtonColor {
|
||||
return UIColorFromRGB(0xCEEFFD);
|
||||
}
|
||||
/// 按钮不可点击文字颜色 0xF9F9F9
|
||||
+ (UIColor *)disableButtonTextColor {
|
||||
return UIColorFromRGB(0xB3B3C3);
|
||||
}
|
||||
/* ------Button 相关颜色 END------ */
|
||||
|
||||
/* ------弹窗相关颜色 START------ */
|
||||
+ (UIColor *)alertBackgroundColor {
|
||||
return UIColorFromRGB(0xFFFFFF);
|
||||
}
|
||||
+ (UIColor *)alertTitleColor {
|
||||
return UIColorFromRGB(0x333333);
|
||||
}
|
||||
+ (UIColor *)alertMessageColor {
|
||||
return UIColorFromRGB(0x333333);
|
||||
}
|
||||
+ (UIColor *)actionSeparatorColor {
|
||||
return UIColorFromRGB(0xF0F0F0);
|
||||
}
|
||||
/* ------弹窗相关颜色 END------ */
|
||||
|
||||
///tabbar 没有点击的时候颜色 0x333333, 0.4
|
||||
+ (UIColor *)tabbarNormalColor {
|
||||
return UIColorRGBAlpha(0x333333, 0.4);
|
||||
}
|
||||
/// tabbar的View的color 0xFFFFFF
|
||||
+ (UIColor *)tabbarViewColor {
|
||||
return UIColorFromRGB(0xFFFFFF);
|
||||
}
|
||||
|
||||
+ (UIColor *)colorWithHexString: (NSString *) hexString {
|
||||
if (hexString.length == 0) {
|
||||
return [UIColor blackColor];
|
||||
}
|
||||
NSString *colorString = [[hexString stringByReplacingOccurrencesOfString: @"#" withString: @""] uppercaseString];
|
||||
CGFloat alpha, red, blue, green;
|
||||
switch ([colorString length]) {
|
||||
case 3: // #RGB
|
||||
alpha = 1.0f;
|
||||
red = [self colorComponentFrom: colorString start: 0 length: 1];
|
||||
green = [self colorComponentFrom: colorString start: 1 length: 1];
|
||||
blue = [self colorComponentFrom: colorString start: 2 length: 1];
|
||||
break;
|
||||
case 4: // #ARGB
|
||||
alpha = [self colorComponentFrom: colorString start: 0 length: 1];
|
||||
red = [self colorComponentFrom: colorString start: 1 length: 1];
|
||||
green = [self colorComponentFrom: colorString start: 2 length: 1];
|
||||
blue = [self colorComponentFrom: colorString start: 3 length: 1];
|
||||
break;
|
||||
case 6: // #RRGGBB
|
||||
alpha = 1.0f;
|
||||
red = [self colorComponentFrom: colorString start: 0 length: 2];
|
||||
green = [self colorComponentFrom: colorString start: 2 length: 2];
|
||||
blue = [self colorComponentFrom: colorString start: 4 length: 2];
|
||||
break;
|
||||
case 8: // #AARRGGBB
|
||||
alpha = [self colorComponentFrom: colorString start: 0 length: 2];
|
||||
red = [self colorComponentFrom: colorString start: 2 length: 2];
|
||||
green = [self colorComponentFrom: colorString start: 4 length: 2];
|
||||
blue = [self colorComponentFrom: colorString start: 6 length: 2];
|
||||
break;
|
||||
default:
|
||||
[NSException raise:@"Invalid color value" format: @"Color value %@ is invalid. It should be a hex value of the form #RBG, #ARGB, #RRGGBB, or #AARRGGBB", hexString];
|
||||
break;
|
||||
}
|
||||
return [UIColor colorWithRed: red green: green blue: blue alpha: alpha];
|
||||
}
|
||||
|
||||
+ (CGFloat) colorComponentFrom: (NSString *) string start: (NSUInteger) start length: (NSUInteger) length {
|
||||
NSString *substring = [string substringWithRange: NSMakeRange(start, length)];
|
||||
NSString *fullHex = length == 2 ? substring : [NSString stringWithFormat: @"%@%@", substring, substring];
|
||||
unsigned hexComponent;
|
||||
[[NSScanner scannerWithString: fullHex] scanHexInt: &hexComponent];
|
||||
return hexComponent / 255.0;
|
||||
}
|
||||
|
||||
///输入框的文本颜色 #1F1A4E
|
||||
+ (UIColor *)inputTextColor {
|
||||
return [self colorWithHexString:@"#1F1A4E"];
|
||||
}
|
||||
|
||||
@end
|
16
YuMi/CustomUI/EmptyDataView.h
Normal file
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// EmptyDataView.h
|
||||
// YuMi
|
||||
//
|
||||
// Created by P on 2024/12/23.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface EmptyDataView : UIView
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
20
YuMi/CustomUI/EmptyDataView.m
Normal file
@@ -0,0 +1,20 @@
|
||||
//
|
||||
// EmptyDataView.m
|
||||
// YuMi
|
||||
//
|
||||
// Created by P on 2024/12/23.
|
||||
//
|
||||
|
||||
#import "EmptyDataView.h"
|
||||
|
||||
@implementation EmptyDataView
|
||||
|
||||
/*
|
||||
// Only override drawRect: if you perform custom drawing.
|
||||
// An empty implementation adversely affects performance during animation.
|
||||
- (void)drawRect:(CGRect)rect {
|
||||
// Drawing code
|
||||
}
|
||||
*/
|
||||
|
||||
@end
|
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
6
YuMi/CustomUI/InputView/Assets.xcassets/Contents.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
54
YuMi/CustomUI/InputView/Assets.xcassets/input/q_chat_emoji_black_normal.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "chat_icon_emoji_black_l_normal@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "chat_icon_emoji_black_l_normal@2x-1.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "chat_icon_emoji_black_l_normal@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "chat_icon_emoji_black_l_normal@3x-1.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 1017 B |
After Width: | Height: | Size: 973 B |
After Width: | Height: | Size: 781 B |
After Width: | Height: | Size: 781 B |
54
YuMi/CustomUI/InputView/Assets.xcassets/input/q_chat_extend_black_normal.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "chat_icon_more_black_l_normal@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "chat_icon_more_black_l_normal@2x-1.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "chat_icon_more_black_l_normal@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "chat_icon_more_black_l_normal@3x-1.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 677 B |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 653 B |
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "chat_icon_keyboard_black_l_normal@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "chat_icon_keyboard_black_l_normal@2x-1.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "chat_icon_keyboard_black_l_normal@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "chat_icon_keyboard_black_l_normal@3x-1.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 986 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 856 B |
After Width: | Height: | Size: 971 B |
54
YuMi/CustomUI/InputView/Assets.xcassets/input/q_chat_voice_black_normal.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "chat_icon_voice@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "chat_icon_voice_dark@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "chat_icon_voice@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "chat_icon_voice_dark@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
22
YuMi/CustomUI/InputView/Assets.xcassets/input/q_emotion_delete.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "compose_emotion_delete_highlighted.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "compose_emotion_delete_highlighted-1.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.2 KiB |
52
YuMi/CustomUI/InputView/Assets.xcassets/q_white_btn.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "white_rect.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "white_btn_dark.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
YuMi/CustomUI/InputView/Assets.xcassets/q_white_btn.imageset/white_btn_dark.png
vendored
Normal file
After Width: | Height: | Size: 543 B |
BIN
YuMi/CustomUI/InputView/Assets.xcassets/q_white_btn.imageset/white_rect.png
vendored
Normal file
After Width: | Height: | Size: 83 B |
52
YuMi/CustomUI/InputView/Assets.xcassets/q_white_input_btn.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "white_rect.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "white_input_btn_dark.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
YuMi/CustomUI/InputView/Assets.xcassets/q_white_input_btn.imageset/white_input_btn_dark.png
vendored
Normal file
After Width: | Height: | Size: 542 B |
BIN
YuMi/CustomUI/InputView/Assets.xcassets/q_white_input_btn.imageset/white_rect.png
vendored
Normal file
After Width: | Height: | Size: 83 B |
52
YuMi/CustomUI/InputView/Assets.xcassets/q_white_input_press_btn.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "white_input_press_btn.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"filename" : "white_input_press_btn_dark.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
YuMi/CustomUI/InputView/Assets.xcassets/q_white_input_press_btn.imageset/white_input_press_btn.png
vendored
Normal file
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 3.9 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoj_s_normal@2x.png
Executable file
After Width: | Height: | Size: 3.1 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoj_s_pressed@2x.png
Executable file
After Width: | Height: | Size: 3.1 KiB |
131
YuMi/CustomUI/InputView/Emoji/emoji.xml
Executable file
@@ -0,0 +1,131 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PopoEmoticons>
|
||||
<Catalog ID="default" Title="emoji" Icon="emoj_s_normal.png" IconPressed="emoj_s_pressed.png">
|
||||
<Emoticon ID="emoticon_emoji_01" Tag="[可爱]" File="emoji_01.png" />
|
||||
<Emoticon ID="emoticon_emoji_0" Tag="[大笑]" File="emoji_00.png" />
|
||||
<Emoticon ID="emoticon_emoji_02" Tag="[色]" File="emoji_02.png" />
|
||||
<Emoticon ID="emoticon_emoji_03" Tag="[嘘]" File="emoji_03.png" />
|
||||
<Emoticon ID="emoticon_emoji_04" Tag="[亲]" File="emoji_04.png" />
|
||||
<Emoticon ID="emoticon_emoji_05" Tag="[呆]" File="emoji_05.png" />
|
||||
<Emoticon ID="emoticon_emoji_06" Tag="[口水]" File="emoji_06.png" />
|
||||
<Emoticon ID="emoticon_emoji_145" Tag="[汗]" File="emoji_145.png" />
|
||||
<Emoticon ID="emoticon_emoji_07" Tag="[呲牙]" File="emoji_07.png" />
|
||||
<Emoticon ID="emoticon_emoji_08" Tag="[鬼脸]" File="emoji_08.png" />
|
||||
<Emoticon ID="emoticon_emoji_09" Tag="[害羞]" File="emoji_09.png" />
|
||||
<Emoticon ID="emoticon_emoji_10" Tag="[偷笑]" File="emoji_10.png" />
|
||||
<Emoticon ID="emoticon_emoji_11" Tag="[调皮]" File="emoji_11.png" />
|
||||
<Emoticon ID="emoticon_emoji_12" Tag="[可怜]" File="emoji_12.png" />
|
||||
<Emoticon ID="emoticon_emoji_13" Tag="[敲]" File="emoji_13.png" />
|
||||
<Emoticon ID="emoticon_emoji_14" Tag="[惊讶]" File="emoji_14.png" />
|
||||
<Emoticon ID="emoticon_emoji_15" Tag="[流感]" File="emoji_15.png" />
|
||||
<Emoticon ID="emoticon_emoji_16" Tag="[委屈]" File="emoji_16.png" />
|
||||
<Emoticon ID="emoticon_emoji_17" Tag="[流泪]" File="emoji_17.png" />
|
||||
<Emoticon ID="emoticon_emoji_18" Tag="[嚎哭]" File="emoji_18.png" />
|
||||
<Emoticon ID="emoticon_emoji_19" Tag="[惊恐]" File="emoji_19.png" />
|
||||
<Emoticon ID="emoticon_emoji_20" Tag="[怒]" File="emoji_20.png" />
|
||||
<Emoticon ID="emoticon_emoji_21" Tag="[酷]" File="emoji_21.png" />
|
||||
<Emoticon ID="emoticon_emoji_22" Tag="[不说]" File="emoji_22.png" />
|
||||
<Emoticon ID="emoticon_emoji_23" Tag="[鄙视]" File="emoji_23.png" />
|
||||
<Emoticon ID="emoticon_emoji_24" Tag="[阿弥陀佛]" File="emoji_24.png" />
|
||||
<Emoticon ID="emoticon_emoji_25" Tag="[奸笑]" File="emoji_25.png" />
|
||||
<Emoticon ID="emoticon_emoji_26" Tag="[睡着]" File="emoji_26.png" />
|
||||
<Emoticon ID="emoticon_emoji_27" Tag="[口罩]" File="emoji_27.png" />
|
||||
<Emoticon ID="emoticon_emoji_28" Tag="[努力]" File="emoji_28.png" />
|
||||
<Emoticon ID="emoticon_emoji_29" Tag="[抠鼻孔]" File="emoji_29.png" />
|
||||
<Emoticon ID="emoticon_emoji_30" Tag="[疑问]" File="emoji_30.png" />
|
||||
<Emoticon ID="emoticon_emoji_31" Tag="[怒骂]" File="emoji_31.png" />
|
||||
<Emoticon ID="emoticon_emoji_32" Tag="[晕]" File="emoji_32.png" />
|
||||
<Emoticon ID="emoticon_emoji_33" Tag="[呕吐]" File="emoji_33.png" />
|
||||
<Emoticon ID="emoticon_emoji_160" Tag="[拜一拜]" File="emoji_160.png" />
|
||||
<Emoticon ID="emoticon_emoji_161" Tag="[惊喜]" File="emoji_161.png" />
|
||||
<Emoticon ID="emoticon_emoji_162" Tag="[流汗]" File="emoji_162.png" />
|
||||
<Emoticon ID="emoticon_emoji_163" Tag="[卖萌]" File="emoji_163.png" />
|
||||
<Emoticon ID="emoticon_emoji_164" Tag="[默契眨眼]" File="emoji_164.png" />
|
||||
<Emoticon ID="emoticon_emoji_165" Tag="[烧香拜佛]" File="emoji_165.png" />
|
||||
<Emoticon ID="emoticon_emoji_166" Tag="[晚安]" File="emoji_166.png" />
|
||||
<Emoticon ID="emoticon_emoji_34" Tag="[强]" File="emoji_34.png" />
|
||||
<Emoticon ID="emoticon_emoji_35" Tag="[弱]" File="emoji_35.png" />
|
||||
<Emoticon ID="emoticon_emoji_36" Tag="[OK]" File="emoji_36.png" />
|
||||
<Emoticon ID="emoticon_emoji_37" Tag="[拳头]" File="emoji_37.png" />
|
||||
<Emoticon ID="emoticon_emoji_38" Tag="[胜利]" File="emoji_38.png" />
|
||||
<Emoticon ID="emoticon_emoji_39" Tag="[鼓掌]" File="emoji_39.png" />
|
||||
<Emoticon ID="emoticon_emoji_200" Tag="[握手]" File="emoji_200.png" />
|
||||
<Emoticon ID="emoticon_emoji_40" Tag="[发怒]" File="emoji_40.png" />
|
||||
<Emoticon ID="emoticon_emoji_41" Tag="[骷髅]" File="emoji_41.png" />
|
||||
<Emoticon ID="emoticon_emoji_42" Tag="[便便]" File="emoji_42.png" />
|
||||
<Emoticon ID="emoticon_emoji_43" Tag="[火]" File="emoji_43.png" />
|
||||
<Emoticon ID="emoticon_emoji_44" Tag="[溜]" File="emoji_44.png" />
|
||||
<Emoticon ID="emoticon_emoji_45" Tag="[爱心]" File="emoji_45.png" />
|
||||
<Emoticon ID="emoticon_emoji_46" Tag="[心碎]" File="emoji_46.png" />
|
||||
<Emoticon ID="emoticon_emoji_47" Tag="[钟情]" File="emoji_47.png" />
|
||||
<Emoticon ID="emoticon_emoji_48" Tag="[唇]" File="emoji_48.png" />
|
||||
<Emoticon ID="emoticon_emoji_49" Tag="[戒指]" File="emoji_49.png" />
|
||||
<Emoticon ID="emoticon_emoji_50" Tag="[钻石]" File="emoji_50.png" />
|
||||
<Emoticon ID="emoticon_emoji_51" Tag="[太阳]" File="emoji_51.png" />
|
||||
<Emoticon ID="emoticon_emoji_52" Tag="[有时晴]" File="emoji_52.png" />
|
||||
<Emoticon ID="emoticon_emoji_53" Tag="[多云]" File="emoji_53.png" />
|
||||
<Emoticon ID="emoticon_emoji_54" Tag="[雷]" File="emoji_54.png" />
|
||||
<Emoticon ID="emoticon_emoji_55" Tag="[雨]" File="emoji_55.png" />
|
||||
<Emoticon ID="emoticon_emoji_56" Tag="[雪花]" File="emoji_56.png" />
|
||||
<Emoticon ID="emoticon_emoji_57" Tag="[爱人]" File="emoji_57.png" />
|
||||
<Emoticon ID="emoticon_emoji_58" Tag="[帽子]" File="emoji_58.png" />
|
||||
<Emoticon ID="emoticon_emoji_59" Tag="[皇冠]" File="emoji_59.png" />
|
||||
<Emoticon ID="emoticon_emoji_60" Tag="[篮球]" File="emoji_60.png" />
|
||||
<Emoticon ID="emoticon_emoji_61" Tag="[足球]" File="emoji_61.png" />
|
||||
<Emoticon ID="emoticon_emoji_62" Tag="[垒球]" File="emoji_62.png" />
|
||||
<Emoticon ID="emoticon_emoji_63" Tag="[网球]" File="emoji_63.png" />
|
||||
<Emoticon ID="emoticon_emoji_64" Tag="[台球]" File="emoji_64.png" />
|
||||
<Emoticon ID="emoticon_emoji_65" Tag="[咖啡]" File="emoji_65.png" />
|
||||
<Emoticon ID="emoticon_emoji_66" Tag="[啤酒]" File="emoji_66.png" />
|
||||
<Emoticon ID="emoticon_emoji_67" Tag="[干杯]" File="emoji_67.png" />
|
||||
<Emoticon ID="emoticon_emoji_68" Tag="[柠檬汁]" File="emoji_68.png" />
|
||||
<Emoticon ID="emoticon_emoji_69" Tag="[餐具]" File="emoji_69.png" />
|
||||
<Emoticon ID="emoticon_emoji_70" Tag="[汉堡]" File="emoji_70.png" />
|
||||
<Emoticon ID="emoticon_emoji_71" Tag="[鸡腿]" File="emoji_71.png" />
|
||||
<Emoticon ID="emoticon_emoji_72" Tag="[面条]" File="emoji_72.png" />
|
||||
<Emoticon ID="emoticon_emoji_73" Tag="[冰淇淋]" File="emoji_73.png" />
|
||||
<Emoticon ID="emoticon_emoji_74" Tag="[沙冰]" File="emoji_74.png" />
|
||||
<Emoticon ID="emoticon_emoji_75" Tag="[生日蛋糕]" File="emoji_75.png" />
|
||||
<Emoticon ID="emoticon_emoji_76" Tag="[蛋糕]" File="emoji_76.png" />
|
||||
<Emoticon ID="emoticon_emoji_77" Tag="[糖果]" File="emoji_77.png" />
|
||||
<Emoticon ID="emoticon_emoji_78" Tag="[葡萄]" File="emoji_78.png" />
|
||||
<Emoticon ID="emoticon_emoji_79" Tag="[西瓜]" File="emoji_79.png" />
|
||||
<Emoticon ID="emoticon_emoji_80" Tag="[光碟]" File="emoji_80.png" />
|
||||
<Emoticon ID="emoticon_emoji_81" Tag="[手机]" File="emoji_81.png" />
|
||||
<Emoticon ID="emoticon_emoji_82" Tag="[电话]" File="emoji_82.png" />
|
||||
<Emoticon ID="emoticon_emoji_83" Tag="[电视]" File="emoji_83.png" />
|
||||
<Emoticon ID="emoticon_emoji_84" Tag="[声音开启]" File="emoji_84.png" />
|
||||
<Emoticon ID="emoticon_emoji_85" Tag="[声音关闭]" File="emoji_85.png" />
|
||||
<Emoticon ID="emoticon_emoji_86" Tag="[铃铛]" File="emoji_86.png" />
|
||||
<Emoticon ID="emoticon_emoji_87" Tag="[锁头]" File="emoji_87.png" />
|
||||
<Emoticon ID="emoticon_emoji_88" Tag="[放大镜]" File="emoji_88.png" />
|
||||
<Emoticon ID="emoticon_emoji_89" Tag="[灯泡]" File="emoji_89.png" />
|
||||
<Emoticon ID="emoticon_emoji_90" Tag="[锤头]" File="emoji_90.png" />
|
||||
<Emoticon ID="emoticon_emoji_91" Tag="[烟]" File="emoji_91.png" />
|
||||
<Emoticon ID="emoticon_emoji_92" Tag="[炸弹]" File="emoji_92.png" />
|
||||
<Emoticon ID="emoticon_emoji_93" Tag="[枪]" File="emoji_93.png" />
|
||||
<Emoticon ID="emoticon_emoji_94" Tag="[刀]" File="emoji_94.png" />
|
||||
<Emoticon ID="emoticon_emoji_95" Tag="[药]" File="emoji_95.png" />
|
||||
<Emoticon ID="emoticon_emoji_96" Tag="[打针]" File="emoji_96.png" />
|
||||
<Emoticon ID="emoticon_emoji_97" Tag="[钱袋]" File="emoji_97.png" />
|
||||
<Emoticon ID="emoticon_emoji_98" Tag="[钞票]" File="emoji_98.png" />
|
||||
<Emoticon ID="emoticon_emoji_99" Tag="[银行卡]" File="emoji_99.png" />
|
||||
<Emoticon ID="emoticon_emoji_100" Tag="[手柄]" File="emoji_100.png" />
|
||||
<Emoticon ID="emoticon_emoji_101" Tag="[麻将]" File="emoji_101.png" />
|
||||
<Emoticon ID="emoticon_emoji_102" Tag="[调色板]" File="emoji_102.png" />
|
||||
<Emoticon ID="emoticon_emoji_103" Tag="[电影]" File="emoji_103.png" />
|
||||
<Emoticon ID="emoticon_emoji_104" Tag="[麦克风]" File="emoji_104.png" />
|
||||
<Emoticon ID="emoticon_emoji_105" Tag="[耳机]" File="emoji_105.png" />
|
||||
<Emoticon ID="emoticon_emoji_106" Tag="[音乐]" File="emoji_106.png" />
|
||||
<Emoticon ID="emoticon_emoji_107" Tag="[吉他]" File="emoji_107.png" />
|
||||
<Emoticon ID="emoticon_emoji_108" Tag="[火箭]" File="emoji_108.png" />
|
||||
<Emoticon ID="emoticon_emoji_109" Tag="[飞机]" File="emoji_109.png" />
|
||||
<Emoticon ID="emoticon_emoji_110" Tag="[火车]" File="emoji_110.png" />
|
||||
<Emoticon ID="emoticon_emoji_111" Tag="[公交]" File="emoji_111.png" />
|
||||
<Emoticon ID="emoticon_emoji_112" Tag="[轿车]" File="emoji_112.png" />
|
||||
<Emoticon ID="emoticon_emoji_113" Tag="[出租车]" File="emoji_113.png" />
|
||||
<Emoticon ID="emoticon_emoji_114" Tag="[警车]" File="emoji_114.png" />
|
||||
<Emoticon ID="emoticon_emoji_115" Tag="[自行车]" File="emoji_115.png" />
|
||||
</Catalog>
|
||||
</PopoEmoticons>
|
||||
˜
|
BIN
YuMi/CustomUI/InputView/Emoji/emoji_00@2x.png
Executable file
After Width: | Height: | Size: 8.7 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_01@2x.png
Executable file
After Width: | Height: | Size: 8.1 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_02@2x.png
Executable file
After Width: | Height: | Size: 8.7 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_03@2x.png
Executable file
After Width: | Height: | Size: 8.3 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_04@2x.png
Executable file
After Width: | Height: | Size: 8.4 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_05@2x.png
Executable file
After Width: | Height: | Size: 9.1 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_06@2x.png
Executable file
After Width: | Height: | Size: 9.1 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_07@2x.png
Executable file
After Width: | Height: | Size: 8.5 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_08@2x.png
Executable file
After Width: | Height: | Size: 8.9 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_09@2x.png
Executable file
After Width: | Height: | Size: 8.5 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_100@2x.png
Executable file
After Width: | Height: | Size: 9.2 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_101@2x.png
Executable file
After Width: | Height: | Size: 6.6 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_102@2x.png
Executable file
After Width: | Height: | Size: 10 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_103@2x.png
Executable file
After Width: | Height: | Size: 7.8 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_104@2x.png
Executable file
After Width: | Height: | Size: 7.7 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_105@2x.png
Executable file
After Width: | Height: | Size: 6.8 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_106@2x.png
Executable file
After Width: | Height: | Size: 7.2 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_107@2x.png
Executable file
After Width: | Height: | Size: 7.9 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_108@2x.png
Executable file
After Width: | Height: | Size: 9.2 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_109@2x.png
Executable file
After Width: | Height: | Size: 9.6 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_10@2x.png
Executable file
After Width: | Height: | Size: 8.6 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_110@2x.png
Executable file
After Width: | Height: | Size: 8.8 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_111@2x.png
Executable file
After Width: | Height: | Size: 9.1 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_112@2x.png
Executable file
After Width: | Height: | Size: 7.6 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_113@2x.png
Executable file
After Width: | Height: | Size: 7.5 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_114@2x.png
Executable file
After Width: | Height: | Size: 7.6 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_115@2x.png
Executable file
After Width: | Height: | Size: 9.9 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_116@2x.png
Executable file
After Width: | Height: | Size: 8.1 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_117@2x.png
Executable file
After Width: | Height: | Size: 8.6 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_118@2x.png
Executable file
After Width: | Height: | Size: 7.9 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_119@2x.png
Executable file
After Width: | Height: | Size: 8.6 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_11@2x.png
Executable file
After Width: | Height: | Size: 8.1 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_120@2x.png
Executable file
After Width: | Height: | Size: 8.2 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_121@2x.png
Executable file
After Width: | Height: | Size: 8.9 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_122@2x.png
Executable file
After Width: | Height: | Size: 9.0 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_123@2x.png
Executable file
After Width: | Height: | Size: 9.2 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_124@2x.png
Executable file
After Width: | Height: | Size: 8.6 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_125@2x.png
Executable file
After Width: | Height: | Size: 7.6 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_126@2x.png
Executable file
After Width: | Height: | Size: 8.8 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_127@2x.png
Executable file
After Width: | Height: | Size: 7.5 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_128@2x.png
Executable file
After Width: | Height: | Size: 9.0 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_129@2x.png
Executable file
After Width: | Height: | Size: 11 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_12@2x.png
Executable file
After Width: | Height: | Size: 9.7 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_130@2x.png
Executable file
After Width: | Height: | Size: 12 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_131@2x.png
Executable file
After Width: | Height: | Size: 10 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_132@2x.png
Executable file
After Width: | Height: | Size: 11 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_133@2x.png
Executable file
After Width: | Height: | Size: 9.7 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_134@2x.png
Executable file
After Width: | Height: | Size: 9.7 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_135@2x.png
Executable file
After Width: | Height: | Size: 9.6 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_136@2x.png
Executable file
After Width: | Height: | Size: 10 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_137@2x.png
Executable file
After Width: | Height: | Size: 7.5 KiB |
BIN
YuMi/CustomUI/InputView/Emoji/emoji_138@2x.png
Executable file
After Width: | Height: | Size: 7.7 KiB |