Compare commits

...

315 Commits

Author SHA1 Message Date
edwinQQQ
cd9c2ea15a 优化 XPRoomMessageContainerView 和 XPRoomMessageTableViewCell,改进消息处理逻辑,增加行高预计算方法,减少不必要的视图更新,提升性能和用户体验。同时,调整 UITableView 的约束更新方式,确保更高效的布局管理。 2025-08-21 19:22:20 +08:00
edwinQQQ
b9de95b4e6 移除 XPRoomViewController 和 RoomAnimationView 中的调试代码,提升代码整洁性和可维护性。 2025-08-21 18:54:04 +08:00
edwinQQQ
1bfc989fe9 移除 RoomAnimationView 中的调试背景色设置,提升代码整洁性和可维护性。 2025-08-21 18:25:46 +08:00
edwinQQQ
09a2b2f02b 优化 XPRoomPresenter、XPRoomViewController 和 XPMessageRemoteExtModel,移除冗余代码,增强 NIM 聊天室成员信息获取逻辑,新增房间类型和模式属性,提升代码可维护性和用户体验。同时,重构定时器管理和消息发送逻辑,确保功能的稳定性和一致性。 2025-08-21 18:23:18 +08:00
edwinQQQ
49975b5dc1 优化 AdvertiseModel 和 XPRoomViewController,移除不必要的注释,新增上麦请求弹窗定时器,增强消息处理逻辑,提升代码可维护性和用户体验。同时,更新本地化字符串,支持新的上麦邀请功能。 2025-08-21 16:36:46 +08:00
edwinQQQ
267650759c 新增 versionType 属性以支持新旧版本兼容,更新 XPRoomPresenter 和 XPMessageRemoteExtModel,优化 micButton 处理逻辑,增强消息发送功能的稳定性和可维护性。 2025-08-20 19:06:49 +08:00
edwinQQQ
0b89480a77 优化 RoomAnimationView 和 PIGiftBravoGiftBroadcastView 的内存管理,新增动画控制方法以提升用户体验。更新了连击视图的清理逻辑,确保资源的正确释放,避免内存泄漏。同时,新增 NetImageView 的取消加载功能,增强图片加载的灵活性和性能。重构相关方法以支持新的逻辑流程,提升代码可维护性和可读性。 2025-08-20 18:07:34 +08:00
edwinQQQ
e0466700b5 新增手势优化和触摸区域缓存管理模块,提升了 Banner 交互性能和用户体验。新增 GestureOptimizer 和 TouchAreaCacheManager,分别负责手势识别优化和触摸区域信息缓存。更新 RoomAnimationView 和 BravoGiftBannerView,集成新模块以优化手势处理逻辑,确保更流畅的用户交互。同时,重构相关方法以支持新的逻辑流程,提升代码可维护性和可读性。 2025-08-20 16:37:48 +08:00
edwinQQQ
be52c53b2f 新增 BannerScheduler 模块,统一管理 V2 Banner 的播放队列和状态,优化了 Banner 播放逻辑,支持优先级排序、状态控制和代理模式。更新 RoomAnimationView,集成 BannerScheduler,重构了 Banner 添加和播放逻辑,提升了代码可维护性和用户体验。同时,新增 BannerScheduler 的单元测试,确保功能的正确性和稳定性。 2025-08-20 14:19:32 +08:00
edwinQQQ
aeb9fcd30e 新增 micButton 状态表格文档,详细记录了 micButton 在不同用户状态下的显示和可用性,以及状态变化的关键时序和同步机制。同时,新增 GiftComboManager 线程优化总结文档,优化了线程处理和网络请求逻辑,提升了代码性能和可维护性。更新了 CountdownRingView 和 GiftComboView 的内存管理和状态处理逻辑,确保资源的正确释放和避免内存泄漏。 2025-08-19 19:33:26 +08:00
edwinQQQ
6d4061bea5 优化 AppDelegate+ThirdConfig 中 NIMSDK 配置,确保生产环境启用 HTTPS,新增 CDN 统计回调和最小时间间隔设置,提升代码可维护性和功能完整性。同时,重构 GiftComboManager,新增后台处理队列和网络处理队列,优化定时器和请求处理逻辑,确保 UI 回调在主线程执行,增强用户体验和代码可读性。 2025-08-19 16:33:22 +08:00
edwinQQQ
83e26bdbae 重构 GiftComboManager,移除 giftComboQueue,新增 networkQueue 和 uiQueue,优化队列处理逻辑,提升代码可维护性和可读性。同时,更新相关方法以支持新的队列结构,确保连击效果的准确处理。 2025-08-19 15:30:39 +08:00
edwinQQQ
c551146afd 优化 GiftComboManager 接口,移除废弃方法并统一配置流程,提升代码可维护性和可读性。同时,更新 XPRoomViewController 和 XPSendGiftView 中的状态检查逻辑,确保连击状态的准确性。新增 GiftComboManager 调用方更新总结文档,记录了接口变更和优化效果。 2025-08-19 14:39:27 +08:00
edwinQQQ
961edefe4a 新增连击计数逻辑修正总结文档,详细记录了连击计数的修正目标、发现的问题及其根源,主要修改内容包括 GiftComboManager、GiftComboView 和 XPSendGiftView 的接口优化和逻辑调整,确保连击计数基于 API 成功回调,提升了用户体验和代码可维护性。同时,更新了相关方法以支持新的逻辑流程和状态管理。 2025-08-19 14:12:51 +08:00
edwinQQQ
f1daa16e59 更新 Podfile 中 NIMSDK_LITE 版本至 '~> 10.9.40',并在多个文件中新增日志记录功能以优化连击消息处理,增强调试能力。同时,新增连击计数重置通知和相关方法,提升用户体验和代码可维护性。 2025-08-18 19:02:47 +08:00
edwinQQQ
9688e4413b 新增 GiftComboManager 及相关模块的重构,优化了连击功能的接口,建立了清晰的分层架构,统一了并发模型,提升了可维护性和可测试性。同时,新增了 GiftComboConfig、GiftComboTransport 和 GiftComboUIAdapter 模块,简化了接口并提供了更好的错误处理机制,确保向后兼容性。 2025-08-18 16:24:45 +08:00
edwinQQQ
79f6f45bc1 新增礼物动画处理日志记录功能,优化了 GiftAnimationManager 和 GiftComboManager 中的连击计数逻辑,确保连击计数的有效性和准确性。同时,增强了日志输出,便于调试和监控动画处理状态,提升用户体验。 2025-08-18 14:01:57 +08:00
edwinQQQ
3f97b0293e 新增 Banner 手势优化实施总结文档,记录了在 RoomAnimationView 中对 banner 手势系统的优化过程,包括手势识别器的重新设计、区域划分逻辑、tap 手势处理逻辑及交互区域检查等。同时,优化了多个视图中的通知处理逻辑,确保手势事件的准确传递与处理,提升用户交互体验。 2025-08-15 19:34:25 +08:00
edwinQQQ
84e146277a 在 RoomAnimationView 中新增触摸事件处理逻辑,确保在没有 banner 显示或 banner 容器不可见时不接收触摸事件,提升用户交互体验。同时,优化了 banner 区域的触摸点检测逻辑,增强代码可读性。 2025-08-15 11:41:45 +08:00
edwinQQQ
5192d58b07 优化 NIMSDK 和 SudSDK 的初始化逻辑,新增从配置中获取 appKey 和 appId 的功能,提升代码灵活性和可维护性。同时,修正 sudKey 的属性名称以保持一致性。 2025-08-14 18:48:47 +08:00
edwinQQQ
cd4710ecf6 优化公共房间管理器的进入逻辑,新增延迟进入公共房间的功能以改善用户体验。同时,移除 RoomAnimationView 中的调试视图相关代码,提升代码整洁性和可维护性。 2025-08-14 18:36:23 +08:00
edwinQQQ
edf844c1e8 新增公共房间管理器的初始化逻辑,并在登录和信息补全成功后调用初始化方法;在相关文件中引入公共房间管理器的头文件以支持新功能。同时,优化了公共房间管理器的状态检查和日志输出,提升代码可读性和功能性。 2025-08-14 18:04:38 +08:00
edwinQQQ
b1e46f6d28 fix(消息容器): 修复多语言文本截断问题并优化布局
统一文本布局策略,修复阿拉伯语、中文等文本显示不全问题
优化约束逻辑,移除冗余计算,提升性能
添加测试用例验证多语言文本布局
2025-08-14 17:56:56 +08:00
edwinQQQ
2a99d2238f feat(文本布局): 统一文本尺寸计算并支持RTL文本
- 使用YYTextLayout统一处理所有文本尺寸计算,提高RTL文本精度
- 根据文本方向自动配置截断类型(RTL文本使用Start,LTR使用End)
- 移除阿拉伯文本的额外高度调整,依赖YYTextLayout的精确计算
- 新增测试类验证纯阿拉伯文本、混合文本和长文本的布局效果
- 添加README文档说明统一文本布局的实现细节和优势
2025-08-14 14:06:35 +08:00
edwinQQQ
3da0148ad1 在多个视图的 dismissBanner 方法中新增日志输出,以便于调试和监控动画完成状态;在 RoomAnimationView 中新增 ensureDebugViewsExist 方法,确保调试视图的存在并优化调试信息的输出;在 inserBannerModelToQueue 方法中添加参数验证和调试信息,提升代码的可读性和调试能力。 2025-08-13 18:16:46 +08:00
edwinQQQ
9206b4be45 优化公共房间管理器的消息处理逻辑,新增 handleFirst_106 方法以处理特定类型的消息转发,提升代码可读性和功能性。同时,移除冗余代码,确保代码整洁性。 2025-08-13 17:21:48 +08:00
edwinQQQ
2867c7ddb5 新增公共房间消息转发通知常量,并在相关管理器和视图控制器中实现消息转发逻辑,优化公共房间消息处理流程,提升代码可读性和功能性。 2025-08-12 18:50:43 +08:00
edwinQQQ
505472b073 在 RoomAnimationView.m 中新增对 MSRoomOnLineView 的引用,并优化了手势识别逻辑,以支持对该视图的直接交互。此更改提升了用户体验和代码的可读性。 2025-08-12 18:50:36 +08:00
edwinQQQ
64cfb1b10e 更新Banner区域手势系统,新增区域化手势识别,优化用户交互体验;调整Banner高度,确保适配性;移除冗余代码,提升代码整洁性和可维护性;更新相关文档以支持新手势系统的集成和使用。 2025-08-12 17:44:32 +08:00
edwinQQQ
9b2ebb796f 更新公共房间管理器的日志输出,改为使用消息的原始附件内容;优化动画播放逻辑,使用 switch 语句替代多个 if-else 语句以提高可读性;移除与守护星球相关的消息处理逻辑,确保代码整洁性;更新多个本地化字符串文件,移除与守护星球相关的条目,确保语言支持的一致性。 2025-08-12 14:51:13 +08:00
edwinQQQ
6fd831ff42 删除与星级厨房相关的所有图像资源及其配置文件,包括 room_star_kitchen.imageset 及其内容;在 AttachmentModel.h 中移除与星级厨房相关的枚举值,确保代码整洁性;更新多个本地化字符串文件,移除与 XPRoomStarKitchenBannerView 相关的条目,确保语言支持的一致性。 2025-08-12 14:07:38 +08:00
edwinQQQ
259ac3e2d3 删除与房间塔罗相关的图像资源及其配置文件,包括 room_tarrow_banner_bg 和 room_tarrow_banner_h5_bg 的所有内容;在 NIMSDKManager.h 和 NIMSDKManager.m 中添加空行以提升代码可读性;更新多个本地化字符串文件,移除与 XPRoomTarrowBannerView 相关的条目,确保语言支持的一致性。 2025-08-12 13:53:12 +08:00
edwinQQQ
446e172939 新增飘屏组件分析文档和新Banner组件架构设计,详细描述了飘屏组件的共同特征、抽象方案及其优势,提供了基类和子类的设计方案,增强了代码的可维护性和扩展性。同时,更新了相关文档以支持新架构的集成和使用。 2025-08-12 11:16:28 +08:00
edwinQQQ
c0bc29486f 新增连击状态管理功能,包含强制重置连击状态的方法和应用生命周期保护;在 XPSendGiftView 和 GiftComboManager 中实现相关逻辑,确保 UI 状态与连击状态一致;注册通知以处理连击状态的强制重置,增强用户体验和系统稳定性。 2025-08-11 14:51:57 +08:00
edwinQQQ
1fb6cadabf 新增公共房间管理器 PublicRoomManager,负责管理用户进入公共聊天房间的逻辑;在 ClientConfig.m 中添加对公共房间管理器的配置更新通知;在多个文件中集成公共房间管理器,确保用户信息更新和状态管理的正确性;更新相关文档以提供使用指南和集成说明。 2025-08-08 17:01:59 +08:00
edwinQQQ
e3dfd8cb0a Version update 2025-07-15 14:59:56 +08:00
edwinQQQ
96c44cb032 删除阿拉伯语首充相关图像资源及其配置文件;在 UIImage+Utils.m 中优化语言图像处理逻辑,新增对葡萄牙语的支持;在多个文件中添加对葡萄牙语的支持,包括本地化字符串和 InfoPlist 配置;更新 UI 组件以适应新的语言设置,确保用户界面的一致性和可用性。 2025-07-15 14:35:05 +08:00
edwinQQQ
16f9041ba9 chore: 更新 .gitignore 文件,移除不必要的包文件类型;新增邮箱验证码登录流程和 OAuth/Ticket 认证系统 API 文档;更新勋章相关逻辑,优化用户信息获取失败处理;调整勋章展示逻辑,支持多等级高亮功能。 2025-07-14 17:37:10 +08:00
edwinQQQ
99db078b62 feat(勋章): 新增多等级高亮功能并优化勋章展示逻辑
refactor(勋章排行): 重构排行榜分页加载和刷新逻辑

fix(会话): 优化官方账号判断逻辑和跳转处理

style(UI): 调整勋章排行榜和游戏菜单UI布局

chore: 更新Podfile配置和bitcode框架列表
2025-07-03 19:35:17 +08:00
edwinQQQ
e32e5653fd change page item limit 2025-07-03 18:04:56 +08:00
edwinQQQ
8a096239da 新增 next-chat.mdc 文件以定义对话上下文的规则;在 Assets.xcassets 中添加多个图像资源及其对应的 Contents.json 文件;更新 AttachmentModel.h 中的枚举值以修正飘屏消息类型;在 SessionViewController.h 和 SessionViewController.m 中添加 userInfo 属性并调整相关逻辑;在 SessionListViewController.h 和 SessionListViewController.m 中优化会话列表的展示逻辑;在多个模型和视图文件中进行小幅调整以提升代码可读性和一致性。 2025-07-02 15:52:48 +08:00
edwinQQQ
f0dad8886f 更新 MedalsModel.h 和 MedalsModel.m,新增 expireDateString 方法以格式化过期时间;在 MedalsCollectionViewCell.m 和 MedalsCyclePagerCell.m 中优化 MP4 和图片的显示逻辑,增强降级处理;在 MedalsDetailView.m 中更新勋章显示逻辑,使用新的 URL 优先级;在 MedalsLevelIndicatorView.h 和 MedalsLevelIndicatorView.m 中新增重置等级指示器的方法;在 MedalsWearingControlCollectionViewCell.m 和 MedalsWearingListCollectionViewCell.m 中实现新的显示逻辑,支持 MP4 和图片的降级处理;在 NSString+Utils.h 和 NSString+Utils.m 中新增图片格式验证方法,提升代码健壮性和可读性。 2025-06-27 19:56:03 +08:00
edwinQQQ
0d6570a086 更新 .vscode/settings.json 文件,新增拼写检查词汇 "Defalut" 和 "MAXFLOAT";在 XPRoomSendTextView.m 中调整约束逻辑,确保 editTextFiled 和 imageButton 的布局正确;在 XPRoomMessageTableViewCell.m 中优化消息内容标签的约束,确保气泡和内容标签的布局一致性,增强代码可读性和健壮性。 2025-06-27 16:15:12 +08:00
edwinQQQ
f52af5d620 更新 YUMIHtmlUrl.h 和 YUMIHtmlUrl.m,新增首充相关的 URL 类型和路径;在 FeedBackViewController.h 和 FeedBackViewController.m 中,调整属性类型为强引用以增强内存管理;重构 FeedBackViewController 的视图设置逻辑,添加子视图的初始化方法以提高代码可读性;移除不再使用的 FeedBackViewController.xib 文件,优化项目结构;在 XPGiftBarView.h 和 XPGiftBarView.m 中,移除首充按钮相关代码,替换为新的首充视图逻辑;更新 XPWebViewController.h 和 XPWebViewController.m,调整 webview 属性为可写以支持动态更新;在 FirstRechargeManager.m 中,优化首充状态检查逻辑,确保在调试模式下始终显示首充信息。 2025-06-27 11:33:16 +08:00
edwinQQQ
86094da26f 添加首充管理功能,新增 FirstRechargeManager 和相关模型以支持首充监控;在多个模块中集成首充监控逻辑,确保在登录和页面加载时正确启动和停止监控;移除不再使用的首充相关代码,优化代码结构和可读性。 2025-06-26 11:08:21 +08:00
edwinQQQ
6f59274ca0 更新 XPRoomMessageParser.m,优化房间表情属性创建逻辑,简化代码结构;新增 createImageAttribute:size: 方法以支持自定义图像大小,增强代码可读性和灵活性;调整图像处理逻辑,确保在不同条件下正确展示表情图像,保持代码一致性。 2025-06-25 15:22:09 +08:00
edwinQQQ
e01148a3a9 更新 pi_area_info.json,新增突尼斯地区信息;更新 Assets.xcassets 中的 Contents.json,修复幸运数字图像的文件名;移除多个文件中的调试代码以优化勋章展示逻辑,保持代码结构一致性;在 XPRoomFaceTool.m 中改进表情文件加载路径和错误处理,增强代码健壮性;在 XPRoomFaceViewController.m 中添加消息发送错误日志;更新 XPRoomMessageContainerView.m 和 XPRoomMessageParser.m,调整索引类型以提高代码一致性。 2025-06-25 14:29:23 +08:00
edwinQQQ
1190e0f6d9 更新 XPMineUserInfoHeaderView.m,调整勋章显示逻辑,允许最多显示 10 个勋章;在 UserRoomCardViewController.m 中新增 UserRoomCardMedalCell 以支持勋章的展示,优化勋章区域的高度计算和更新逻辑,保持代码结构一致性。 2025-06-24 18:50:45 +08:00
edwinQQQ
c5d966317b 更新 XPMineUserInfoHeaderView.m,新增 UIScrollView 作为勋章展示的容器,调整勋章 StackView 的布局逻辑以适应 ScrollView,更新勋章显示方法以处理勋章的内容尺寸,保持代码结构一致性。 2025-06-24 17:10:11 +08:00
edwinQQQ
6573c0f6fe 更新 XPMineUserInfoHeaderView.m,新增 medalsStackView 和 medalMP4Views 属性以支持勋章展示逻辑;添加 medalsHeight 方法计算勋章高度;实现 setupMedalsArea 方法以配置勋章视图;更新 updateMedalsDisplay 方法以处理勋章的 MP4 和图片展示,保持代码结构一致性。同时,更新 .vscode/settings.json 文件以添加拼写检查词汇。 2025-06-24 16:45:26 +08:00
edwinQQQ
7810057542 更新 MedalsViewController.m,移除调试代码以优化勋章展示逻辑;在 XPMineUserInfoHeaderView.m 中新增 medalsStackView 和 userMedals 属性以支持用户勋章的显示;在 UserInfoModel.m 中更新 medalsPic 属性以增强模型的兼容性,保持代码结构一致性。 2025-06-24 15:42:56 +08:00
edwinQQQ
059305d3df 更新 MedalsViewController.m,新增其他用户勋章的显示逻辑,包括 MP4 播放和图片展示,优化相关方法以提升用户体验,保持代码结构一致性。同时,更新 MedalsWearingControlCollectionViewCell.m,移除调试背景颜色设置,保持代码整洁。 2025-06-24 15:01:33 +08:00
edwinQQQ
a15d6b34ed 更新 MedalsRankViewController.m,添加勋章排行视图的点击手势和回调处理,优化用户交互体验,保持代码结构一致性。 2025-06-23 19:09:45 +08:00
edwinQQQ
6d0122f3d1 更新 MedalsViewController.m,调整背景约束和底部勋章列表高度以适应不同显示类型,优化底部背景图像的拉伸处理,保持代码结构一致性。 2025-06-23 18:57:05 +08:00
edwinQQQ
286e68b5e3 更新 MedalsCyclePagerCell 和 MedalsViewController 以优化勋章展示和自动轮播功能,调整可见性管理逻辑,确保在视图切换时正确处理播放状态,保持代码结构一致性。 2025-06-23 18:43:17 +08:00
edwinQQQ
c0500397b6 删除不再使用的资源文件,包括多个图像集和其对应的 Contents.json 文件,更新 MedalsModel.h 和 MedalsModel.m 以支持使用勋章的类型,新增 MedalsCyclePagerCell 组件以优化勋章展示,保持代码结构一致性。 2025-06-23 16:36:39 +08:00
edwinQQQ
f62af24c48 更新勋章相关模型和视图,添加对使用勋章的支持,优化可见性管理和状态更新逻辑,保持代码结构一致性。 2025-06-23 15:55:11 +08:00
edwinQQQ
a72c010b56 新增勋章 VIP 控制相关的资源,包括 medals_control_vip4、medals_control_vip6、medals_control_vip7 和 medals_control_vip9 的 Contents.json 文件及其对应的 vip@3x.png 图片,保持代码结构一致性。 2025-06-23 14:29:08 +08:00
edwinQQQ
143ad115bc 新增勋章排行相关的 UI 组件,包括 MedalsRankViewController、MedalsRankTopView 和 MedalsRankListCell,更新 MedalsViewController 以支持展示其他用户的勋章信息,优化相关逻辑以提升用户体验,保持代码结构一致性。 2025-06-20 18:44:20 +08:00
edwinQQQ
4c76813273 新增勋章相关的 UI 组件,包括 MedalsWearingViewController、MedalsWearingControlCollectionViewCell 和 MedalsWearingListCollectionViewCell,更新相关逻辑以支持勋章的使用状态管理和展示,保持代码结构一致性。 2025-06-19 19:22:56 +08:00
edwinQQQ
da8d88347e 更新 Api+Medals.m 中的请求路径为 "medal/square",修改 MedalsViewController.m 中的导航栏标题以支持勋章广场,新增本地化字符串 "20.20.61_text_10" 以表示勋章广场,保持代码结构一致性。 2025-06-19 14:09:36 +08:00
edwinQQQ
06fecf1bf4 调整 MedalsDetailView.m 中的高度约束以适应内容,优化 MedalsLevelIndicatorView.m 中的图片视图创建和加载逻辑,新增缓存图片 URL 属性以支持延迟加载,确保代码结构一致性。 2025-06-19 11:49:25 +08:00
edwinQQQ
c978a8c355 优化 UIImage+Utils.m 中的灰度图像处理逻辑,调整 MedalsLevelIndicatorView.m 中的图片视图约束和间距,更新图像加载逻辑以使用裁剪后的图像,保持代码结构一致性。 2025-06-19 11:28:07 +08:00
edwinQQQ
a0fc15fefd 更新 MedalsCollectionViewCell 和 MedalsDetailView 以支持带图片的等级指示器,新增 MedalsLevelIndicatorType 枚举以区分指示器类型,优化手势识别功能,确保用户体验流畅,保持代码结构一致性。 2025-06-18 19:47:39 +08:00
edwinQQQ
c1b9dd3d9f 新增手势识别功能以处理背景和内容区域的点击事件,确保用户体验流畅。重写 removeFromSuperview 方法以停止 MP4 播放并释放资源,添加 dealloc 方法以确保资源正确释放,保持代码结构一致性。 2025-06-18 19:00:01 +08:00
edwinQQQ
887bb19056 新增 MedalsDetailView 和 MedalsLevelIndicatorView 组件,更新 MedalsCollectionViewCell 以支持 MP4 播放控制和可见性管理,优化相关逻辑以提升用户体验,保持代码结构一致性。 2025-06-18 18:31:13 +08:00
edwinQQQ
413b2c6944 新增等级指示器视图和容器视图,更新 MedalsCollectionViewCell 以集成等级指示器功能,支持等级选择回调。更新 .vscode/settings.json 文件以包含新组件 QGVAP 的配置,保持代码结构一致性。 2025-06-18 17:11:13 +08:00
edwinQQQ
89d9b57dea 更新 Podfile 以注释掉不再使用的 ZLCollectionViewFlowLayout 依赖,同时新增勋章相关功能,包括勋章使用、广场、排行和管理列表的 API 方法,新增 MedalsModel、MedalsPresenter 和 MedalsViewController 相关文件,保持代码结构一致性。新增勋章相关的 UI 组件和本地化字符串支持。 2025-06-18 16:28:13 +08:00
edwinQQQ
8c0276a208 优化数组操作,新增 NSMutableArray 的安全方法,包括安全移除、插入和替换对象,确保在索引超出范围时不发生崩溃。更新相关文件以使用新方法,保持代码结构一致性。 2025-06-16 17:30:20 +08:00
edwinQQQ
68ce148abb 新增勋章相关功能,包括勋章使用、广场、排行和管理列表的 API 方法,更新 Api+Mine.h 和 Api+Mine.m 文件以支持新功能。同时,新增 BaseModelVo.h 和 BaseModelVo.m 文件以定义勋章相关数据模型,并在 UserInfoModel.h 中引入 BaseModelVo。保持代码结构一致性。 2025-06-11 15:00:02 +08:00
edwinQQQ
4416e9f9c8 新增 VIP 和转账功能的 URL 路径,更新相关文件以使用 XPWebViewController 替代 VIPCenterViewController,保持代码结构一致性。调整公屏礼物消失的显示内容。 2025-06-11 11:27:00 +08:00
edwinQQQ
6e814f76cb 移除与 Agora 相关的 SDK 代码和引用,更新 Podfile 以删除不再使用的依赖项,调整房间初始化逻辑以使用 TRTC 引擎。保持代码结构一致性。 2025-06-10 16:07:59 +08:00
edwinQQQ
443e1a4332 新增分享功能的多个方法,包括提取 URL 和剩余字符串、强制关闭分享弹窗,以及分享内容的构建逻辑。更新 ShareProvider 类以支持新的初始化方法和不同分享类型的内容提供。保持代码结构一致性。 2025-06-09 16:39:32 +08:00
edwinQQQ
8dab721de9 在 SessionListViewController 中添加了对最近会话的日志输出。在 LuckyGiftWinningBannerView 和 BravoGiftBannerView 中引入了可配置的显示时间,注释掉了不再使用的代码。在 XPRoomFunctionContainerView 中优化了 hitTest 方法以增强用户交互体验,确保子视图的点击响应逻辑更加清晰。更新了 MicroView 中的表情加载逻辑,增加了对下载失败情况的处理。保持代码结构一致性。 2025-06-09 15:52:34 +08:00
edwinQQQ
5985b5701e 新增排行榜功能,更新 YUMIHtmlUrl.h 和 YUMIHtmlUrl.m 文件以支持新路径 kRankV2,调整 XPNewHomeViewController.m 中的相关逻辑以使用新排行榜链接,更新 XPMineUserInfoViewController.m 和 XPMineUserInfoHeaderView.m 文件以修复用户信息展示。保持代码结构一致性。 2025-06-03 11:00:10 +08:00
edwinQQQ
5ff62bafee 优化房间退出逻辑,更新退出事件处理,修复房间类型判断。更新分享功能以支持内容参数。调整游戏状态处理,重置当前游戏ID。 2025-05-29 11:50:00 +08:00
edwinQQQ
ca25ed14ac 新增搜索视图的 UITextFieldDelegate 实现,优化搜索逻辑,添加 isReturnKey 属性以区分回车触发的搜索。更新 GiftComboManager 和 HttpRequestHelper 中的错误处理逻辑,修复条件判断中的错误。移除不再使用的代码。版本号更新至1.0.28.2。 2025-05-27 16:02:11 +08:00
edwinQQQ
e5c8baad34 更新版本号至1.0.28.1,移除调试代码,新增隐私信息文件,优化房间消息处理逻辑,增加网络检测相关功能,调整部分接口参数,修复UI问题,更新本地化字符串,更新 SUD SDK 2025-05-26 15:24:31 +08:00
edwinQQQ
c765e78ec6 更新资源文件,替换部分图片文件名,调整图片内容,更新版本号至1.0.28。增加新的图片资源并删除不再使用的图片文件。 2025-05-23 14:43:39 +08:00
edwinQQQ
95e3e2601f 新增自定义麦位布局和房间麦位选择视图,优化房间用户界面,更新本地化字符串,调整部分UI组件约束。版本号更新至20.20.65。 2025-05-22 18:04:39 +08:00
edwinQQQ
0d01b1e6e9 更新事件中心模块,新增 HomeBannerInfoModel 相关功能,优化事件列表数据处理,调整时间选择器逻辑,修复部分 UI 问题,更新本地化字符串。版本号更新至20.20.64。 2025-05-22 11:50:53 +08:00
edwinQQQ
298a7e80c4 优化内购交易重试机制,增加交易重试次数记录,完善后台任务处理,更新相关API接口,调整UI组件约束,修复部分UI问题,更新本地化字符串。版本号更新至20.20.63。 2025-05-21 18:59:32 +08:00
edwinQQQ
b688962559 更新事件创建功能,新增金钱加载接口,优化事件时长选择器,调整UI组件约束,修复部分UI问题,更新本地化字符串。增加删除事件功能的提示确认。版本号更新至20.20.62。 2025-05-20 18:49:04 +08:00
edwinQQQ
353491f56f 更新活动中心模块,新增事件配置模型及相关API接口,优化事件列表展示,修复部分UI问题,更新本地化字符串,调整部分UI组件。删除不再使用的视图控制器。版本号更新至20.20.61。 2025-05-19 19:27:53 +08:00
edwinQQQ
a99e650d45 新增活动详情页相关功能,包括事件模型、API接口、UI组件及相关资源文件。更新版本号至20.20.60。 2025-05-15 16:24:43 +08:00
edwinQQQ
bd2e5e380f 增加选择房间 vc 2025-05-12 18:53:42 +08:00
edwinQQQ
2c5a1a289e 创建事件 create event UI 2025-05-12 17:37:58 +08:00
edwinQQQ
ffdfa121f9 新增 JoyPlay 游戏支持 2025-05-08 17:10:54 +08:00
AI Health Developer
07ebee2fc1 修正部分体验问题; 房间表情新增 api; 房间表情新增 svga 支持以及持久化缓存 2025-05-07 19:30:50 +08:00
AI Health Developer
69863a91ff feat(EventCenter): 添加活动中心模块
新增活动中心模块,包括官方活动、活动广场和我的活动三个页面。支持活动列表展示、倒计时功能及创建活动按钮。优化了页面切换和UI交互体验。
2025-05-06 16:45:34 +08:00
AI Health Developer
a9538c61ff 修正表情播放问题 2025-04-28 18:28:59 +08:00
AI Health Developer
41aae87dd6 修改 UI 需求和问题 2025-04-28 14:52:00 +08:00
AI Health Developer
ff365e8ae4 修正审核问题,适配后端修改 2025-04-25 15:54:30 +08:00
AI Health Developer
40311a1d85 完成 1.0.26 需求 2025-04-21 13:52:13 +08:00
AI Health Developer
2caa476640 temp save 2025-04-11 10:46:17 +08:00
AI Health Developer
faa6a2c4dc 修正 combo 金币显示问题 2025-04-11 10:45:49 +08:00
edwinQQQ
0275decc7e Finish 2.7.34 2025-04-02 11:04:07 +08:00
edwinQQQ
bc9a02802d boom 重构暂存 2025-03-25 15:22:01 +08:00
edwinQQQ
d9850e2c8b 需求暫存 2025-03-24 16:09:48 +08:00
edwinQQQ
e27b564fdc 完成 2.7.32 需求 2025-03-21 16:19:07 +08:00
edwinQQQ
d6e13ac0fe 修正线上首页显示内容不对问题
阿语环境下,有概率会 hot 列表显示为最后一个 tab 的内容
2025-03-14 19:44:58 +08:00
edwinQQQ
e7b2f594e8 版本需求修改暂存 2025-03-14 19:43:04 +08:00
edwinQQQ
e152d0f8a1 Feature: 完成金币兑换 UX 调整 2025-03-07 11:03:35 +08:00
edwinQQQ
9d3f08c9b3 2.3.31 finish 2025-03-06 15:26:44 +08:00
edwinQQQ
7807824a97 Finish all works! 2025-02-28 19:04:09 +08:00
edwinQQQ
8a1ed09905 移除不使用代码 2025-02-10 19:12:27 +08:00
edwinQQQ
fc399e0afc Dangerous Modify: 移除 Firebase/Analytics lib; 移除埋点文件(不使用);移除部分不使用的 分享功能 相关代码; 2025-02-10 18:49:34 +08:00
edwinQQQ
f582077804 Promotion: 优化首页API 加载逻辑 2025-02-05 18:16:27 +08:00
edwinQQQ
b592097865 Promotion: 优化 API 请求基类 2025-02-05 18:15:41 +08:00
edwinQQQ
a4651740bd Fix: 尝试修复线上 crash 问题 2025-02-05 14:31:39 +08:00
edwinQQQ
d958a3ca36 feat: 修正最后验收问题 2025-01-22 21:22:58 +08:00
edwinQQQ
f963f0ed81 完成房间动画类重构 2025-01-16 16:00:12 +08:00
edwinQQQ
e2f022246f 重构 room 动画层 50% 2025-01-15 19:02:58 +08:00
edwinQQQ
b6325180d4 feat: 更新房间管理弹窗内容 2025-01-14 14:29:14 +08:00
edwinQQQ
471b8e945f 优化:调整送礼动画代码 2025-01-13 15:29:58 +08:00
edwinQQQ
d71a139afb 隐藏埋点上报代码(已没有使用) 2025-01-13 14:17:57 +08:00
edwinQQQ
9b0520c1eb feat:移除不使用图片资源 | 新增新需求图片资源 | 部分代码优化 2025-01-13 14:10:27 +08:00
edwinQQQ
311868fde6 Version Update 2025-01-09 18:36:30 +08:00
edwinQQQ
a79bf667cc fix: bug fix 2025-01-09 18:05:02 +08:00
edwinQQQ
bc02ca29fc fix: Bug fix 2025-01-09 14:22:59 +08:00
edwinQQQ
93c3304601 fix: 修正 UI 验收问题 2025-01-08 12:10:02 +08:00
edwinQQQ
d9e8d6639b fix: 修正验收问题 2025-01-07 20:07:54 +08:00
edwinQQQ
893c1ab647 fix: 修正房间聊天开关问题 | 修复部分 crash 场景 2025-01-02 17:31:17 +08:00
edwinQQQ
ed25b30a35 feat: 优化 UI 体验 2025-01-02 14:34:56 +08:00
edwinQQQ
54cc9ebde3 feat: 修正房间聊天框中文显示不全问题 2024-12-31 18:47:48 +08:00
edwinQQQ
81a0094dbf feat: 完成 代充页面修改 | 开屏 & 首页banner 支持 svga 2024-12-31 15:09:44 +08:00
edwinQQQ
4abb686790 feat: 优化首页 tab 加载逻辑 | 补全 side menu 控制逻辑 | 基本完成 20 mic | 部分小需求 | 优化房间聊天气泡 2024-12-28 15:41:56 +08:00
edwinQQQ
2c5d72846d feat: 重构房间右下菜单栏 2024-12-20 19:05:43 +08:00
edwinQQQ
ab544a2d84 补充部分 UI 验收问题 2024-12-19 15:10:41 +08:00
edwinQQQ
83d1a1df95 Version update 2024-12-19 14:04:51 +08:00
edwinQQQ
75a9bac88a Version update 2024-12-19 14:04:39 +08:00
edwinQQQ
c0e7e7ff83 修复验收问题 2024-12-19 14:02:37 +08:00
edwinQQQ
47c0f141a8 Update version 2024-12-18 17:12:48 +08:00
edwinQQQ
a0b2dea116 100% 完成需求 2024-12-18 17:12:03 +08:00
edwinQQQ
e82939f767 70% 完成需求 2024-12-16 19:41:23 +08:00
edwinQQQ
68370912b2 fix: 修正线上问题 2024-12-11 10:48:01 +08:00
edwinQQQ
57735e37c4 fix: 优化送礼的内存效率 |
TODO:调整 combo 时的金币变动效果
2024-12-09 19:27:02 +08:00
edwinQQQ
8ba4eaf2f5 try to fix send gift animation problems 2024-12-06 21:00:20 +08:00
edwinQQQ
612b84e47b Version update 2024-12-06 14:41:12 +08:00
edwinQQQ
4c94a61da6 1.0.30 封版 2024-12-06 14:38:45 +08:00
edwinQQQ
50bc8a28b3 修正热度值 UI 2024-12-04 22:03:31 +08:00
edwinQQQ
80abf631c6 Merge branch 'test/fix-chat-bug' into 1.0.30
# Conflicts:
#	YuMi/Modules/YMRoom/View/MessageContainerView/Model/XPMessageInfoModel.m
#	YuMi/Modules/YMRoom/View/MessageContainerView/Tool/XPRoomMessageParser.m
#	YuMi/Modules/YMRoom/View/MessageContainerView/View/XPNetImageYYLabel.m
#	YuMi/Modules/YMRoom/View/MessageContainerView/View/XPRoomMessageHeaderView.m
#	YuMi/Modules/YMRoom/View/MessageContainerView/View/XPRoomMessageTableViewCell.m
#	YuMi/Modules/YMRoom/View/MessageContainerView/XPRoomMessageContainerView.m
#	YuMi/Modules/YMRoom/View/ThemeColor+Room.m
2024-12-04 21:24:28 +08:00
edwinQQQ
2b4de25c80 完成版本需求 2024-12-04 21:22:38 +08:00
edwinQQQ
2637ae065e feat: 增加超级封禁 2024-12-03 17:40:29 +08:00
edwinQQQ
c49517dd94 feat: 修正发送礼物的处理 2024-12-02 19:33:20 +08:00
edwinQQQ
4d6e71450a temp save: 基本完成房间聊天列表的内容高度适配 | 调整房间音乐面板入口 & UI 2024-12-02 16:49:16 +08:00
edwinQQQ
c77bb17b03 temp save: 更好的效果 2024-11-29 21:50:24 +08:00
edwinQQQ
6b2dbee88c temp save: 基本完整显示聊天内容 2024-11-29 16:46:36 +08:00
edwinQQQ
5fa7595965 调整铭牌的大小 2024-11-28 20:39:27 +08:00
edwinQQQ
b7ebe93013 尝试修复房间聊天列表显示问题 2024-11-28 18:45:28 +08:00
edwinQQQ
a6af37e51b fix:修正切换语言后 tabbar 显示顺序不正确问题 2024-11-28 11:05:57 +08:00
edwinQQQ
2415016337 feat:修正需求验收问题 2024-11-28 10:40:21 +08:00
P
cafb009362 修正 UI & 补充本地化语言文本 2024-11-25 11:53:00 +08:00
P
cd582b52f3 feat: 基本完成需求 2024-11-22 21:05:47 +08:00
P
786f15cae7 feat: 基本完成礼物支持嵌入元素功能 2024-11-22 13:47:34 +08:00
P
9fe30ce255 feat: 基本完成首页 UI 调整 2024-11-20 20:20:43 +08:00
P
f07773ff03 feat:90% 完成新商场/我的装扮 2024-11-20 18:25:13 +08:00
P
17fbd340d6 fix: 修复首页 API 可能被 block 住的bug | 修正 API 可能被设置过短超时的场景 2024-11-20 10:35:59 +08:00
eggmanQQQ
b936d7dea5 feat:新商城增加 svga 播放处理 2024-11-18 19:39:38 +08:00
eggmanQQQ
ab4a9cf88b feat:新商城增加 svga 播放处理 2024-11-15 18:17:15 +08:00
eggmanQQQ
dd247c0688 feat: 新商城暂存 2024-11-15 16:36:03 +08:00
eggmanQQQ
cb1172eb8c fix:修正阿语房间背景价格显示问题 2024-11-15 16:36:03 +08:00
eggmanQQQ
a1306b32b8 fix: 修正首页列表加载逻辑 | 修正部分 UI 效果 2024-11-15 16:36:01 +08:00
eggmanQQQ
98e38008be fix:修正首页列表显示问题 2024-11-15 10:57:12 +08:00
eggmanQQQ
dcd5e04503 feat: 新商城暂存 2024-11-15 10:56:54 +08:00
eggmanQQQ
e47259c82c feat: 新商城框架 2024-11-13 19:17:06 +08:00
eggmanQQQ
9a3aab22e9 代码整理 2024-11-13 14:21:00 +08:00
eggmanQQQ
4cf14841cf 1.0.30 feat:version update 2024-11-13 11:23:14 +08:00
eggmanQQQ
219a591f3d Bug fix 2024-11-13 11:20:56 +08:00
eggmanQQQ
80facecd80 修复自定义背景选择逻辑问题 2024-11-12 16:47:29 +08:00
eggmanQQQ
d876d7759d 修正测试代码 2024-11-12 15:40:13 +08:00
eggmanQQQ
4648dd3b53 1.0.19 feat:UI 改进 & 修复线上 crash 问题 2024-11-12 15:35:56 +08:00
eggmanQQQ
00014f0327 1.0.19 feat:基本完成所有需求 & bug fix 2024-11-11 19:35:21 +08:00
eggmanQQQ
efefa94d3c temp save 2024-11-07 16:16:09 +08:00
eggmanQQQ
694d56b604 1.0.19 feat:首页 UI 配置更新 2024-11-06 17:57:32 +08:00
eggmanQQQ
a5f7a5eb87 1.0.19 feat:移除 API:privateChat/check 2024-11-05 17:24:52 +08:00
eggmanQQQ
b3fee0eef9 1.0.19 feat:个性化房间背景-free 部分 / 首页支持 API 更新 UI 2024-11-05 17:09:22 +08:00
eggmanQQQ
faacf7b22d 1.0.19 feat:个性化房间背景 API / 新礼物飘屏 UI 2024-11-01 20:49:31 +08:00
eggmanQQQ
ec70554f9d 1.0.19 feat:个性化房间背景 UI 2024-10-31 19:24:04 +08:00
eggmanQQQ
ae4229675d 1.0.19 feat:开始个性化房间背景 2024-10-30 17:22:29 +08:00
eggmanQQQ
9e9e5fa0e8 1.0.19 feat:Vip 权限显示调整 2024-10-30 14:09:05 +08:00
eggmanQQQ
cd93cc1024 优化个播房主播头像 2024-10-29 17:14:38 +08:00
eggmanQQQ
0e00f4df11 代码 & UI 小优化 2024-10-29 17:10:56 +08:00
eggmanQQQ
1f6b060898 1.0.18 feat:多语言支持 2024-10-29 17:00:27 +08:00
eggmanQQQ
0adb06fcd3 移除不使用文件 2024-10-29 11:07:56 +08:00
eggmanQQQ
4051a94dd4 1.0.18 feat:重构 VIP 页面,修正发现问题,更新地区选择 API 2024-10-24 19:43:46 +08:00
eggmanQQQ
fc323bd470 1.0.18 feat:基本完成 1.0.18 功能 2024-10-23 19:08:51 +08:00
eggmanQQQ
d0ea8932cc 1.0.18 feat:增加 VIP 权限设置页面 & API 2024-10-22 18:46:06 +08:00
eggmanQQQ
d5572c204a 1.0.18 feat:增加图片资源,修正游戏列表 UI 问题 2024-10-22 17:14:20 +08:00
eggmanQQQ
37f9457532 1.0.18 feat:完成更新房间头像 2024-10-22 15:26:41 +08:00
eggmanQQQ
6bc081dbad 1.0.18 feat:调整 web 小游戏逻辑 2024-10-22 14:34:42 +08:00
eggmanQQQ
602789ab5c 1.0.18 feat:房间设置增加修改房间头像的选项 2024-10-21 18:38:57 +08:00
eggmanQQQ
01743623f2 1.0.18 feat:支持给自己送礼物 2024-10-21 18:38:27 +08:00
eggmanQQQ
442af3d760 1.0.18 fix:修正个播房 mic 为不能点击问题 2024-10-21 18:37:55 +08:00
eggmanQQQ
d043adf7e8 1.0.18 feat:菜单入口支持新的小游戏 2024-10-21 18:34:48 +08:00
eggmanQQQ
a946ee1c50 1.0.18 feat:处理 GIF 头像上传入口 2024-10-21 18:34:18 +08:00
eggmanQQQ
8c64d6fdc0 1.0.18 feat:连击礼物请求加入到每 0.2s 执行一次的队列 2024-10-21 18:31:09 +08:00
eggmanQQQ
b34e8ccb16 1.0.18 feat:支持新的小游戏 2024-10-21 18:29:30 +08:00
eggmanQQQ
81167d8e0f temp save 2024-10-18 20:24:47 +08:00
eggmanQQQ
c9cacb388b fix:修正部分问题 2024-10-17 16:05:02 +08:00
eggmanQQQ
e72f39ffde fix:修正部分问题 2024-10-16 17:28:37 +08:00
eggmanQQQ
0505054aec version update 2024-10-15 21:06:19 +08:00
eggmanQQQ
f576d9c3cf finish:1.0.17 2024-10-15 20:56:25 +08:00
eggmanQQQ
0b14b6bf5f feat: 修正各种小问题,补充多语言 2024-10-14 15:26:57 +08:00
eggmanQQQ
3f6fae9c07 feat: 修正初步 debug 问题 2024-10-12 19:30:41 +08:00
eggmanQQQ
80549b57aa feat: 基本完成房间内消息列表的调整 2024-10-11 16:41:55 +08:00
eggmanQQQ
b79adfa576 feat: 基本完成 boom 需求 2024-10-11 12:31:37 +08:00
eggmanQQQ
5c87f850e7 temp save 2024-10-10 20:16:23 +08:00
eggmanQQQ
94c11e5148 feat:强制 web 使用 initWithRoomUID 初始化 2024-10-08 11:47:06 +08:00
eggmanQQQ
259d161df8 feat:引入资源和新建火箭视图 2024-10-08 11:30:40 +08:00
eggmanQQQ
a2795817ac feat: Version Update 2024-09-27 11:18:28 +08:00
eggmanQQQ
931887fc8c feat: 完成 1.0.16 验收 2024-09-27 11:17:04 +08:00
eggmanQQQ
4d46e1505c feat: 优化 PIIAPRegulate 2024-09-24 18:02:05 +08:00
eggmanQQQ
6ba054c694 feat: 新建内购管理 IAPManager 2024-09-24 18:01:08 +08:00
eggmanQQQ
a43b34b934 feat: 补充多语言 | 修正自测问题 2024-09-23 20:35:29 +08:00
eggmanQQQ
9fa668a0d8 feat: 完成 CP 相关动效 2024-09-23 18:01:54 +08:00
eggmanQQQ
a09a1d20f0 fix: 修正玩小游戏时,送礼会遮挡 UI 问题 2024-09-23 12:21:11 +08:00
eggmanQQQ
240846c809 fix: 修正公会管理列表选中不响应问题 2024-09-23 11:01:27 +08:00
eggmanQQQ
eb46a2b002 feat: 基本cp绑定飘屏 2024-09-20 21:19:08 +08:00
eggmanQQQ
f8d387aa84 feat: 基本完成用户页面 2024-09-20 20:16:20 +08:00
eggmanQQQ
ea3dbd4cb4 hot fix:修正部分类型礼物连击后送礼异常问题 2024-09-20 10:47:49 +08:00
eggmanQQQ
513cabbedc feat: 补充个人资料页公会信息 2024-09-19 18:58:23 +08:00
eggmanQQQ
61e316044d feat:完善个人主页 cp 模块 2024-09-19 16:52:32 +08:00
eggmanQQQ
994df0af28 temp save 2024-09-18 17:45:11 +08:00
eggmanQQQ
1b0b461fd8 调整用户资料页的 UI 2024-09-18 17:04:07 +08:00
eggmanQQQ
25b82beaf6 移除不使用的 pod 和代码 2024-09-18 17:03:45 +08:00
eggmanQQQ
c67bad9481 feat: 修改部分用户详情页内容 2024-09-18 10:31:21 +08:00
eggmanQQQ
11c31b6616 feat: 完成房间 UI 调整 2024-09-14 18:29:36 +08:00
eggmanQQQ
76a80eaf1e fix: 修正发现问题 2024-09-12 18:49:42 +08:00
eggmanQQQ
3c024b808f feat: 完成礼物连击功能 2024-09-12 14:01:12 +08:00
eggmanQQQ
f668f43a42 feat: 完成礼物连击功能 | 更换金币资源图片 2024-09-10 15:27:47 +08:00
eggmanQQQ
e45176485d feat: 构建送礼连击 manager, 从 send gift view 中抽离发送礼物-发送消息功能 2024-09-05 19:43:01 +08:00
eggmanQQQ
ccbdfb7ee2 version update to 1.0.21 2024-09-04 20:21:45 +08:00
eggmanQQQ
fa6934299c logic fix and version update 2024-09-04 20:18:20 +08:00
eggmanQQQ
b9edaddf7c 修正反馈问题 2024-09-04 18:26:30 +08:00
eggmanQQQ
1f9e998b00 修正翻译 2024-09-04 17:16:28 +08:00
eggmanQQQ
cf0a0a87c7 feat: 更新 UI 2024-09-04 16:11:11 +08:00
eggmanQQQ
4dbc7422ec feat: 更新 VIP 页面内容 | 更新一级页面 UI 2024-09-03 20:22:54 +08:00
eggmanQQQ
966aedcc7d feat: 更新 VIP 页面内容 2024-09-02 19:28:36 +08:00
eggmanQQQ
c8674be186 feat: 移除公聊 2024-08-22 11:40:50 +08:00
eggmanQQQ
3e6fec0601 feat: 调整 UI 效果,调整剩余日期计算 2024-08-22 10:32:42 +08:00
eggmanQQQ
0f54b562e2 完善新 VIP 页 2024-08-19 19:41:22 +08:00
eggmanQQQ
3d2fb62d19 feat: 新 VIP 充值页 2024-08-16 21:14:11 +08:00
eggmanQQQ
d555f5815c fix:修正所有礼物缓存问题 2024-08-14 16:32:40 +08:00
eggmanQQQ
39f928be02 fix: 修正玩百顺游戏时,礼物动画会在最上层的问题 2024-08-13 14:18:08 +08:00
eggmanQQQ
218d312b73 Version Update: 1.0.20 / 20.20.34 2024-08-13 10:35:46 +08:00
eggmanQQQ
b2ee73c924 fix:修正人气礼物送出普通礼物问题 2024-08-10 01:18:23 +08:00
eggmanQQQ
9fddcc83ad fix:修正我的页不显示我的转赠问题 2024-08-09 17:28:37 +08:00
eggmanQQQ
fa1362dcb2 feat: 礼物面板缓存方案调整 | 修复礼物面板选择礼物问题 2024-08-09 17:17:02 +08:00
eggmanQQQ
814954e04c feat: 礼物面板缓存方案调整 2024-08-08 19:46:25 +08:00
eggmanQQQ
778b9cfa4b fix: 修正我的 tab 渲染卡主线程问题 | 修正靓号 ID centerY 对齐 2024-08-08 15:45:46 +08:00
eggmanQQQ
259c8ab3f7 feat: 优化 LUDO 的退房提示 2024-08-07 15:35:30 +08:00
eggmanQQQ
c999bdbaf8 fix: 修正礼物面板提示问题 2024-08-07 12:26:08 +08:00
eggmanQQQ
18949d3217 fix: 修正房间 PK 按钮显示问题 2024-08-06 20:06:37 +08:00
eggmanQQQ
bb9f933e05 fix: 修正进房异常提示 UI,增加用户访问失败时的返回处理 2024-08-06 18:58:44 +08:00
eggmanQQQ
541db3cb1e fix: 修正进房异常提示 UI,增加用户访问失败时的返回处理 2024-08-06 16:46:25 +08:00
eggmanQQQ
75bdf84320 fix: 修正房间相册上传问题 2024-08-06 15:07:21 +08:00
eggmanQQQ
5cb36eb8b5 修正面板测试问题 2024-08-06 10:38:50 +08:00
eggmanQQQ
fb30106c63 -- 客户端“我的装扮”入口
-- 礼物面板 API 调试
-- 礼物面板调整
2024-08-02 21:09:02 +08:00
eggmanQQQ
d3ce09517b "我的" 列表支持跳转至“我的装扮” 2024-08-02 10:14:26 +08:00
eggmanQQQ
ca5137dff9 -- 优化 iOS 端页面效果(个人页/聊天气泡)
-- 优化 iOS 端部分 API 多次调用逻辑和错误处理
-- 修正相亲房玩法入口问题
2024-08-01 19:59:50 +08:00
eggmanQQQ
ba06b327a5 调整 masonry 布局,使用 leading/trailing 替代全部 left/right 2024-07-30 20:16:21 +08:00
eggmanQQQ
a4c3327c29 优化礼物面板效果 2024-07-30 16:45:40 +08:00
eggmanQQQ
dae2a03c35 优化个人资料相关 UI 显示效果 2024-07-30 14:43:29 +08:00
eggmanQQQ
e48cce107a 1. 优化礼物面板加载
2. 百顺游戏 debug 环境添加 vConsole
2024-07-29 20:23:38 +08:00
eggmanQQQ
2805f0d858 feat: 公聊厅点击头像跳转到个人页 2024-07-29 12:18:12 +08:00
eggmanQQQ
e8dffabb2c fix:修正个播房活动入口显示逻辑 #1430 2024-07-29 11:26:34 +08:00
eggmanQQQ
4ea792cbcd Version code update 2024-07-25 20:18:44 +08:00
eggmanQQQ
2c894befca RoomInfo 增加参数,房间支持配置入口
修正登录 API 的 toast 显示 2024-07-25 20:16:51 +08:00
eggmanQQQ
2f969aadf5 优化登录时的错误提示处理,防止出现多个 toast 2024-07-25 11:16:21 +08:00
eggmanQQQ
0899930a3f #1419
1. 入口优化完成基本调整
2. 优化礼物面板加载逻辑
2024-07-23 17:24:46 +08:00
eggmanQQQ
3f5f8344df 20.20.29 / 1.0.15 2024-07-22 21:09:29 +08:00
eggmanQQQ
59db4366a6 1. 同步Android 我的 tag UI
2. 其他优化
2024-07-22 19:29:12 +08:00
eggmanQQQ
5e00713960 移除 “我的” tab不使用的内容 2024-07-22 14:13:58 +08:00
eggmanQQQ
eeec862e2e 修正替代过期方法的逻辑 2024-07-22 14:13:29 +08:00
eggmanQQQ
c312f471cb 更正英语文案 2024-07-19 18:21:55 +08:00
eggmanQQQ
d9aedceebc 1. 修正 XPSVGAPlayer 中过期方法的处理
2. 移除房间的测试用动画
3. 优化进房效果
2024-07-19 16:26:51 +08:00
eggmanQQQ
614d431b2c 优化 mic 位头像逻辑
调整错误的代码单词
2024-07-19 14:59:36 +08:00
eggmanQQQ
f717711852 修正 SVGA 的警告 2024-07-19 14:14:29 +08:00
eggmanQQQ
ecc00415e6 移除 “Piko” 内容 2024-07-19 14:14:08 +08:00
eggmanQQQ
dc34b919f5 调整 Bugly 的监控配置,降低 debug 环境的“内耗” 2024-07-19 14:13:48 +08:00
eggmanQQQ
f031f387a1 1. 优化房间进房逻辑
2. 增加进房时麦位效果
3. 修正错误的代码单词
2024-07-18 19:03:11 +08:00
eggmanQQQ
c7aea082be 1. 优化动态名字部分的显示效果
2. 修正部分错误的单词
2024-07-17 18:06:24 +08:00
eggmanQQQ
7fe6cc9125 修正部分错误的单词 2024-07-17 17:49:33 +08:00
eggmanQQQ
228e077f44 修正英语文案
调整公聊滚动展示区域首次展示的效果 2024-07-16 18:53:08 +08:00
eggmanQQQ
27faf849f3 修正英语翻译 2024-07-16 17:47:09 +08:00
eggmanQQQ
3723161b8f FIX: 修复加载图片类型通用飘屏时不显示并会卡住所有后续数据的问题 2024-07-15 19:05:47 +08:00
eggmanQQQ
c5428785c1 Merge branch 'feature/1.0.14' into develop_piko
* feature/1.0.14: (22 commits)
  修正 UI 验收问题
  修正 UI 反馈
  fix ui bugs
  Bug fix
  修正聊天卡片 UI 修正其他 UI 问题
  開黑點單 & Bug fix
  合并几个需求的内容
  个人资料页代码整理 整理 userinfomodel
  修正 bugs
  修正 bugs
  个人资料页代码整理
  审核小版本
  审核小版本
  開黑點單 & Bug fix
  调试拉起支付
  合并几个需求的内容
  个人资料页代码整理 整理 userinfomodel
  #1217 修正 bugs
  修正反馈页内容 修正个播房公告
  #1217 修正 bugs
  ...

# Conflicts:
#	YuMi/Modules/YMMessage/View/Session/MSSessionPublicChatHallVC.m
#	YuMi/Modules/YMMine/View/SubViews/MineInfo/XPMineUserInfoHeaderView.m
#	YuMi/Modules/YMRoom/View/MenuContainerView/XPRoomSendTextView.m
#	YuMi/Modules/YMRoom/View/XPRoomViewController.m
#	YuMi/Structure/MVP/Model/UserInfoModel.h
#	YuMi/Structure/MVP/Model/UserInfoModel.m
2024-07-15 11:23:42 +08:00
eggmanQQQ
2010befed6 修正 UI 验收问题 2024-07-15 11:17:04 +08:00
eggmanQQQ
bce103c034 修正 UI 反馈 2024-07-12 15:53:11 +08:00
eggmanQQQ
e803011bef Merge branch 'test/remove_resource' into feature/1.0.14
* test/remove_resource:
  try remove unused resource
  try remove unused resource
2024-07-12 14:08:29 +08:00
eggmanQQQ
f573b53ae8 fix ui bugs 2024-07-12 14:07:53 +08:00
eggmanQQQ
3fbb87be6c Bug fix 2024-07-11 18:57:34 +08:00
eggmanQQQ
0a973ca4d5 修正聊天卡片 UI
修正其他 UI 问题
2024-07-11 13:37:43 +08:00
eggmanQQQ
0d950baaf4 開黑點單 & Bug fix 2024-07-11 10:22:49 +08:00
eggmanQQQ
8ba415a6b5 合并几个需求的内容 2024-07-11 10:22:47 +08:00
eggmanQQQ
ec16e8626c 个人资料页代码整理
整理 userinfomodel
2024-07-11 10:20:24 +08:00
eggmanQQQ
d9fe86a3c2 修正 bugs 2024-07-11 10:20:02 +08:00
eggmanQQQ
aee0679353 修正 bugs 2024-07-11 10:19:21 +08:00
eggmanQQQ
acf9430ca8 个人资料页代码整理 2024-07-11 10:16:44 +08:00
eggmanQQQ
af707b8bfd 审核小版本 2024-07-11 10:14:41 +08:00
eggmanQQQ
f10b286101 审核小版本 2024-07-11 10:13:44 +08:00
eggmanQQQ
fb58ff1ec7 開黑點單 & Bug fix 2024-07-11 10:06:33 +08:00
eggmanQQQ
e57895d3e3 调试拉起支付 2024-07-09 15:02:39 +08:00
eggmanQQQ
3dfc5c770e 合并几个需求的内容 2024-07-08 17:06:10 +08:00
eggmanQQQ
cfa67aa4ac 个人资料页代码整理
整理 userinfomodel
2024-07-06 17:29:49 +08:00
eggmanQQQ
c4add806d2 个人资料页代码整理 2024-07-06 17:20:41 +08:00
eggmanQQQ
592bff3244 Merge branch 'hotfix/1.0.13' into develop_piko
* hotfix/1.0.13:
  审核小版本
  审核小版本
2024-07-06 16:37:01 +08:00
eggmanQQQ
8adb50763d #1217
修正 bugs
2024-07-05 11:16:18 +08:00
eggmanQQQ
479638f16e 修正反馈页内容
修正个播房公告
2024-07-04 15:46:46 +08:00
eggmanQQQ
5026542a09 #1217
修正 bugs
2024-07-04 15:40:58 +08:00
eggmanQQQ
0544a6b8d0 #1217
新功能:反馈页
2024-07-04 10:18:42 +08:00
eggmanQQQ
1b9c86d66f #1249
更换新主题色物料
2024-07-02 19:24:43 +08:00
eggmanQQQ
ac829e6a21 try remove unused resource 2024-06-21 17:47:05 +08:00
eggmanQQQ
679198a976 try remove unused resource 2024-06-21 17:29:47 +08:00
3681 changed files with 134019 additions and 53441 deletions

1
.bevel/VERSION Normal file
View File

@@ -0,0 +1 @@
1.3.0

0
.bevel/do_not_share/.env Normal file
View File

File diff suppressed because it is too large Load Diff

Binary file not shown.

1
.bevel/do_not_share/port Normal file
View File

@@ -0,0 +1 @@
57817

View File

@@ -0,0 +1 @@
# this functions like a .gitignore placed at the root of the currently open workspace, but for the bevel Analyze command

View File

@@ -0,0 +1,75 @@
{
"supportedFileExtensions": {
"COBOL": [
".cbl",
".cob",
".ccp",
".cobol",
".cpy",
".cpb",
".cblcpy",
".mf"
],
"CSharp": [
".cs"
],
"Kotlin": [
".kt",
".kts"
],
"TypeScript": [
".ts",
".tsx"
],
"JavaScript": [
".js",
".jsx"
],
"Python": [
".py"
],
"Ruby": [
".rb"
],
"Java": [
".java"
],
"Go": [
".go"
],
"Rust": [
".rs"
],
"Scala": [
".scala"
],
"Swift": [
".swift"
],
"C": [
".c",
".h"
],
"Cpp": [
".cpp",
".h",
".hpp"
],
"Perl": [
".pl",
".pm",
".pod"
],
"PHP": [
".php"
],
"Pascal": [
".pas",
".dfm",
".inc"
],
"Dart": [
".dart"
]
}
}

View File

@@ -0,0 +1,5 @@
{
"selectedLLM": "AZURE_OPENAI",
"endpoint": "https://[CUSTOM ORGANIZATION LINK].cognitiveservices.azure.com",
"deploymentName": "gpt-4o-mini"
}

View File

@@ -0,0 +1,7 @@
---
description:
globs:
alwaysApply: false
---
本次对话的上下文已经太长了,我打算关掉并重新开一个新的会话。
你有什么想对你的继任者说的,以便它能更好的理解你当前的工作并顺利继续?

7
.gitignore vendored
View File

@@ -82,12 +82,6 @@ iOSInjectionProject/
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.war
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
@@ -151,3 +145,4 @@ iOS/Podfile.lock
Podfile.lock
*/.DS_Store
.DS_Store
YuMi.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings

View File

45
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,45 @@
{
"cSpell.ignoreWords": [
"DJDKMIMOM",
"Strongify",
"Weakify",
"instancetype",
"nonatomic"
],
"cSpell.words": [
"autoreleasepool",
"Autoresizing",
"BGMP",
"Bugly",
"Commont",
"Contol",
"CPSVGA",
"Defalut",
"erban",
"exper",
"Headwear",
"HWDMP",
"ifndef",
"Interitem",
"kindof",
"MAXFLOAT",
"Moli",
"MSRTL",
"NIMSDK",
"Nonnull",
"NSEC",
"NSURL",
"objc",
"Offical",
"Podfile",
"Procotol",
"QGVAP",
"Subview",
"subviews",
"Superview",
"Uids",
"XNDJTDD"
],
"C_Cpp.errorSquiggles": "disabled",
"bevel.java": "/Users/edwinqqq/.trae/extensions/bevel-software.bevel-1.3.0-universal/backend/amazon-corretto-17.jdk/Contents/Home/bin/java"
}

26
DOC/log.txt Normal file
View File

@@ -0,0 +1,26 @@
-[XPRoomViewController dealloc] [Line 314]🔄 XPRoomViewController: 清理 RoomAnimationView
-[RoomAnimationView removeItSelf] [Line 193]<5D><> RoomAnimationView: 开始销毁
-[RoomAnimationView cleanupAllSubviews] [Line 239] 清理所有子视图
-[RoomAnimationView cleanupAllSubviews] [Line 250]<5D><> 标记移除视图: BravoGiftBannerView (从容器: XPRoomAnimationHitView)
-[RoomAnimationView cleanupAllSubviews] [Line 250]<5D><> 标记移除视图: BravoGiftWinningFlagView (从容器: XPRoomAnimationHitView)
-[RoomAnimationView cleanupAllSubviews] [Line 250]<5D><> 标记移除视图: BravoGiftWinningFlagView (从容器: XPRoomAnimationHitView)
-[RoomAnimationView cleanupAllSubviews] [Line 250]<5D><> 标记移除视图: BravoGiftWinningFlagView (从容器: XPRoomAnimationHitView)
-[RoomAnimationView cleanupAllSubviews] [Line 250]<5D><> 标记移除视图: BravoGiftWinningFlagView (从容器: XPRoomAnimationHitView)
-[RoomAnimationView cleanupAllSubviews] [Line 250]<5D><> 标记移除视图: BravoGiftWinningFlagView (从容器: XPRoomAnimationHitView)
-[RoomAnimationView cleanupAllSubviews] [Line 250]<5D><> 标记移除视图: NetImageView (从容器: XPRoomAnimationHitView)
-[RoomAnimationView cleanupAllSubviews] [Line 250]<5D><> 标记移除视图: NetImageView (从容器: XPRoomAnimationHitView)
-[RoomAnimationView cleanupAllSubviews] [Line 250]<5D><> 标记移除视图: NetImageView (从容器: XPRoomAnimationHitView)
-[RoomAnimationView cleanupAllSubviews] [Line 250]<5D><> 标记移除视图: NetImageView (从容器: XPRoomAnimationHitView)
-[RoomAnimationView cleanupAllSubviews] [Line 250]<5D><> 标记移除视图: NetImageView (从容器: XPRoomAnimationHitView)
-[RoomAnimationView cleanupAllSubviews] [Line 250]<5D><> 标记移除视图: NetImageView (从容器: XPRoomAnimationHitView)
-[RoomAnimationView cleanupAllSubviews] [Line 250]<5D><> 标记移除视图: NetImageView (从容器: XPRoomAnimationHitView)
-[RoomAnimationView cleanupAllSubviews] [Line 265]🔄 所有子视图清理完成
-[RoomAnimationView removeItSelf] [Line 220]<5D><> 清理 BannerScheduler
-[RoomAnimationView cleanupGestureRecognizers] [Line 3690]🔄 清理手势识别器
-[RoomAnimationView cleanupGestureRecognizers] [Line 3713]🔄 手势识别器清理完成
-[RoomAnimationView cleanupCacheManagers] [Line 3717]🔄 清理缓存管理器
-[RoomAnimationView cleanupCacheManagers] [Line 3730]🔄 缓存管理器清理完成
-[RoomAnimationView removeNotificationObservers] [Line 3743]🔄 移除通知监听
-[RoomAnimationView removeNotificationObservers] [Line 3753]🔄 通知监听移除完成
-[RoomAnimationView removeItSelf] [Line 235]<5D><> RoomAnimationView: 销毁完成
-[RoomAnimationView playBroveBanner:]_block_invoke [Line 752]🔄 BravoGiftBannerView complete 回调被调用

View File

@@ -0,0 +1,471 @@
# 新Banner组件架构设计
## 设计概述
基于对现有7种Banner组件的深度分析设计一套统一的Banner组件架构包含父类、子类、数据模型和用户反馈机制。
## 现有组件分析总结
### 共同UI结构模式
| 组件 | 背景 | 头像 | 标题/内容 | 礼物图标 | 操作按钮 | 动画效果 |
|------|------|------|-----------|----------|----------|----------|
| RoomHighValueGiftBannerAnimation | ✓ | ✓ | ✓ | ✓ | ✓ | SVGA |
| CPGiftBanner | ✓ | ✓✓(双人) | ✓ | ✓ | - | POP |
| BravoGiftBannerView | ✓ | ✓ | ✓ | ✓ | - | SVGA |
| LuckyPackageBannerView | ✓ | ✓ | ✓ | - | ✓ | POP |
| LuckyGiftWinningBannerView | ✓ | ✓ | ✓ | - | ✓ | POP |
| GameUniversalBannerView | ✓ | ✓ | ✓ | ✓ | ✓ | SVGA |
| PIUniversalBannerView | ✓ | - | ✓ | - | ✓ | SVGA |
### 共同数据模式
- AttachmentModel作为数据源
- 专用ViewModel进行数据解析
- 完成回调机制
- 用户交互跳转
## 架构设计
### 1. 基础父类设计
```objc
// YMBaseBannerView.h
#import <UIKit/UIKit.h>
#import "YMBannerDataProtocol.h"
#import "YMBannerDelegate.h"
NS_ASSUME_NONNULL_BEGIN
@class AttachmentModel, YMBaseBannerViewModel;
typedef NS_ENUM(NSUInteger, YMBannerType) {
YMBannerTypeHighValueGift, // 高价值礼物
YMBannerTypeCPGift, // CP礼物
YMBannerTypeBravoGift, // Bravo超级礼物
YMBannerTypeLuckyPackage, // 幸运红包
YMBannerTypeLuckyWinning, // 幸运中奖
YMBannerTypeGameUniversal, // 通用游戏
YMBannerTypeUniversal // 通用飘屏
};
typedef NS_ENUM(NSUInteger, YMBannerAnimationType) {
YMBannerAnimationTypeSlide, // 滑动动画
YMBannerAnimationTypeFade, // 淡入淡出
YMBannerAnimationTypeBounce, // 弹跳效果
YMBannerAnimationTypeCustom // 自定义动画
};
@interface YMBaseBannerView : UIView
#pragma mark - 核心属性
@property (nonatomic, assign, readonly) YMBannerType bannerType;
@property (nonatomic, strong) AttachmentModel *attachment;
@property (nonatomic, strong) YMBaseBannerViewModel *viewModel;
@property (nonatomic, weak) id<YMBannerDelegate> delegate;
#pragma mark - UI组件 (子类可选择使用)
@property (nonatomic, strong, readonly) UIView *containerView;
@property (nonatomic, strong, readonly) UIImageView *backgroundImageView;
@property (nonatomic, strong, readonly) NetImageView *avatarImageView;
@property (nonatomic, strong, readonly) NetImageView *secondAvatarImageView; // CP双头像
@property (nonatomic, strong, readonly) UILabel *titleLabel;
@property (nonatomic, strong, readonly) UILabel *subtitleLabel;
@property (nonatomic, strong, readonly) UILabel *contentLabel;
@property (nonatomic, strong, readonly) NetImageView *iconImageView;
@property (nonatomic, strong, readonly) UIButton *actionButton;
@property (nonatomic, strong, readonly) SVGAImageView *svgaView;
#pragma mark - 动画配置
@property (nonatomic, assign) YMBannerAnimationType animationType;
@property (nonatomic, assign) CGFloat showDuration;
@property (nonatomic, assign) CGFloat stayDuration;
@property (nonatomic, assign) CGFloat hideDuration;
@property (nonatomic, assign) BOOL enableSwipeGesture;
#pragma mark - 回调
@property (nonatomic, copy) void(^onDisplayComplete)(void);
@property (nonatomic, copy) void(^onUserTap)(YMBaseBannerView *banner);
@property (nonatomic, copy) void(^onActionTap)(YMBaseBannerView *banner);
@property (nonatomic, copy) void(^onDismiss)(YMBaseBannerView *banner);
#pragma mark - 状态
@property (nonatomic, assign, readonly) BOOL isDisplaying;
@property (nonatomic, assign, readonly) BOOL isDismissed;
#pragma mark - 类方法
+ (instancetype)bannerWithAttachment:(AttachmentModel *)attachment;
+ (void)displayInView:(UIView *)superView
attachment:(AttachmentModel *)attachment
complete:(void(^)(void))complete;
#pragma mark - 实例方法
- (instancetype)initWithBannerType:(YMBannerType)type;
- (void)configureWithAttachment:(AttachmentModel *)attachment;
- (void)displayInView:(UIView *)superView;
- (void)dismissWithAnimation:(BOOL)animated;
#pragma mark - 子类重写方法
- (Class)viewModelClass; // 返回对应的ViewModel类
- (void)setupUIComponents; // 设置UI组件
- (void)layoutUIComponents; // 布局UI组件
- (void)configureWithViewModel:(YMBaseBannerViewModel *)viewModel; // 配置数据
- (void)performShowAnimation; // 执行显示动画
- (void)performHideAnimation; // 执行隐藏动画
- (void)handleUserTap; // 处理用户点击
- (void)handleActionTap; // 处理操作按钮点击
#pragma mark - 用户反馈
- (void)reportDisplayEvent; // 上报展示事件
- (void)reportClickEvent:(NSString *)action; // 上报点击事件
- (void)reportDismissEvent:(NSString *)reason; // 上报消失事件
@end
NS_ASSUME_NONNULL_END
```
### 2. 基础数据模型
```objc
// YMBaseBannerViewModel.h
#import <Foundation/Foundation.h>
#import "PIBaseModel.h"
NS_ASSUME_NONNULL_BEGIN
@interface YMBaseBannerViewModel : PIBaseModel
#pragma mark - 基础信息
@property (nonatomic, assign) NSInteger roomUid;
@property (nonatomic, assign) NSInteger targetRoomUid;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
@property (nonatomic, copy) NSString *content;
#pragma mark - 用户信息
@property (nonatomic, copy) NSString *senderNick;
@property (nonatomic, copy) NSString *senderAvatar;
@property (nonatomic, assign) NSInteger senderUid;
@property (nonatomic, copy) NSString *receiverNick;
@property (nonatomic, copy) NSString *receiverAvatar;
@property (nonatomic, assign) NSInteger receiverUid;
#pragma mark - 视觉资源
@property (nonatomic, copy) NSString *backgroundImageUrl;
@property (nonatomic, copy) NSString *iconImageUrl;
@property (nonatomic, copy) NSString *svgaUrl;
#pragma mark - 交互配置
@property (nonatomic, copy) NSString *actionText;
@property (nonatomic, copy) NSString *skipUrl;
@property (nonatomic, assign) BOOL enableClick;
@property (nonatomic, assign) BOOL enableAction;
#pragma mark - 埋点数据
@property (nonatomic, copy) NSString *eventType;
@property (nonatomic, strong) NSDictionary *trackingData;
@end
NS_ASSUME_NONNULL_END
```
### 3. 代理协议设计
```objc
// YMBannerDelegate.h
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class YMBaseBannerView;
@protocol YMBannerDelegate <NSObject>
@optional
#pragma mark - 生命周期回调
- (void)bannerWillDisplay:(YMBaseBannerView *)banner;
- (void)bannerDidDisplay:(YMBaseBannerView *)banner;
- (void)bannerWillDismiss:(YMBaseBannerView *)banner;
- (void)bannerDidDismiss:(YMBaseBannerView *)banner;
#pragma mark - 交互回调
- (void)banner:(YMBaseBannerView *)banner didTapWithAction:(NSString *)action;
- (void)banner:(YMBaseBannerView *)banner willNavigateToRoom:(NSInteger)roomUid;
- (void)banner:(YMBaseBannerView *)banner willOpenURL:(NSString *)url;
#pragma mark - 数据回调
- (void)banner:(YMBaseBannerView *)banner didReportEvent:(NSString *)event data:(NSDictionary *)data;
@end
NS_ASSUME_NONNULL_END
```
## 子类设计
### 1. 高价值礼物Banner
```objc
// YMHighValueGiftBannerView.h
#import "YMBaseBannerView.h"
@interface YMHighValueGiftBannerView : YMBaseBannerView
@property (nonatomic, strong, readonly) UILabel *giftNameLabel;
@property (nonatomic, strong, readonly) UILabel *giftCountLabel;
@property (nonatomic, strong, readonly) MarqueeLabel *senderScrollLabel;
@property (nonatomic, strong, readonly) MarqueeLabel *roomNameScrollLabel;
@end
// YMHighValueGiftBannerViewModel.h
@interface YMHighValueGiftBannerViewModel : YMBaseBannerViewModel
@property (nonatomic, copy) NSString *giftName;
@property (nonatomic, assign) NSInteger giftCount;
@property (nonatomic, copy) NSString *giftImageUrl;
@property (nonatomic, assign) NSInteger bgLevel;
@property (nonatomic, copy) NSString *roomTitle;
@end
```
### 2. CP礼物Banner
```objc
// YMCPGiftBannerView.h
#import "YMBaseBannerView.h"
@interface YMCPGiftBannerView : YMBaseBannerView
@property (nonatomic, strong, readonly) UIStackView *cpStackView;
@property (nonatomic, strong, readonly) UILabel *relationLabel;
@end
// YMCPGiftBannerViewModel.h
@interface YMCPGiftBannerViewModel : YMBaseBannerViewModel
@property (nonatomic, copy) NSString *giftImageUrl;
@property (nonatomic, copy) NSString *relationText;
@end
```
### 3. 通用游戏Banner
```objc
// YMGameUniversalBannerView.h
#import "YMBaseBannerView.h"
@interface YMGameUniversalBannerView : YMBaseBannerView
@property (nonatomic, strong, readonly) NetImageView *gameIconView;
@property (nonatomic, assign) NSInteger gameID;
@end
// YMGameUniversalBannerViewModel.h
@interface YMGameUniversalBannerViewModel : YMBaseBannerViewModel
@property (nonatomic, copy) NSString *gameIconUrl;
@property (nonatomic, assign) NSInteger gameID;
@property (nonatomic, copy) NSString *gameTitle;
@end
```
## 用户反馈机制设计
### 1. 反馈管理器
```objc
// YMBannerFeedbackManager.h
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSUInteger, YMBannerFeedbackType) {
YMBannerFeedbackTypeDisplay, // 展示
YMBannerFeedbackTypeClick, // 点击
YMBannerFeedbackTypeAction, // 操作
YMBannerFeedbackTypeDismiss, // 消失
YMBannerFeedbackTypeError // 错误
};
@interface YMBannerFeedbackManager : NSObject
+ (instancetype)shared;
#pragma mark - 事件上报
- (void)reportBannerEvent:(YMBannerFeedbackType)type
banner:(YMBaseBannerView *)banner
data:(NSDictionary *)data;
#pragma mark - 性能监控
- (void)startPerformanceMonitoring:(YMBaseBannerView *)banner;
- (void)endPerformanceMonitoring:(YMBaseBannerView *)banner;
#pragma mark - 错误收集
- (void)reportError:(NSError *)error
banner:(YMBaseBannerView *)banner
context:(NSDictionary *)context;
@end
NS_ASSUME_NONNULL_END
```
### 2. 埋点事件定义
```objc
// YMBannerTrackingEvents.h
extern NSString * const kYMBannerEventDisplay; // banner_display
extern NSString * const kYMBannerEventClick; // banner_click
extern NSString * const kYMBannerEventAction; // banner_action
extern NSString * const kYMBannerEventDismiss; // banner_dismiss
extern NSString * const kYMBannerEventLoadStart; // banner_load_start
extern NSString * const kYMBannerEventLoadEnd; // banner_load_end
extern NSString * const kYMBannerEventError; // banner_error
// 埋点参数Key
extern NSString * const kYMBannerTrackingKeyType; // banner_type
extern NSString * const kYMBannerTrackingKeyRoomUid; // room_uid
extern NSString * const kYMBannerTrackingKeyDuration; // duration
extern NSString * const kYMBannerTrackingKeyAction; // action
extern NSString * const kYMBannerTrackingKeyReason; // reason
```
## 上下文调整说明
### 1. RoomAnimationView.m 调整
#### 1.1 替换现有Banner创建逻辑
```objc
// 原代码
- (void)playRoomGiftBanner:(AttachmentModel *)obj {
[RoomHighValueGiftBannerAnimation display:self.bannerContainer
with:obj
complete:^{
self.isRoomBannerV2Displaying = NO;
[self processNextRoomEffectAttachment];
}];
}
// 新代码
- (void)playRoomGiftBanner:(AttachmentModel *)obj {
YMHighValueGiftBannerView *banner = [YMHighValueGiftBannerView bannerWithAttachment:obj];
banner.delegate = self;
banner.onDisplayComplete = ^{
self.isRoomBannerV2Displaying = NO;
[self processNextRoomEffectAttachment];
};
[banner displayInView:self.bannerContainer];
}
```
#### 1.2 添加代理实现
```objc
#pragma mark - YMBannerDelegate
- (void)banner:(YMBaseBannerView *)banner didReportEvent:(NSString *)event data:(NSDictionary *)data {
[[YMBannerFeedbackManager shared] reportBannerEvent:YMBannerFeedbackTypeDisplay
banner:banner
data:data];
}
- (void)banner:(YMBaseBannerView *)banner willNavigateToRoom:(NSInteger)roomUid {
// 处理房间跳转逻辑
RoomInfoModel *currentRoom = self.hostDelegate.getRoomInfo;
if (currentRoom.uid != roomUid) {
// 执行跨房间跳转
}
}
```
### 2. 项目依赖调整
#### 2.1 新增文件结构
```YuMi/Modules/YMRoom/View/Banner/
├── Base/
│ ├── YMBaseBannerView.h/.m
│ ├── YMBaseBannerViewModel.h/.m
│ └── YMBannerDelegate.h
├── Subclasses/
│ ├── YMHighValueGiftBannerView.h/.m
│ ├── YMCPGiftBannerView.h/.m
│ ├── YMBravoGiftBannerView.h/.m
│ ├── YMGameUniversalBannerView.h/.m
│ └── YMLuckyPackageBannerView.h/.m
├── Manager/
│ └── YMBannerFeedbackManager.h/.m
└── Constants/
└── YMBannerTrackingEvents.h/.m
```
#### 2.2 Podfile依赖更新
```ruby
# 确保动画库版本兼容
pod 'pop', '~> 1.0'
pod 'SVGAPlayer', '~> 2.3'
# 新增性能监控
pod 'YMPerformanceMonitor' # 如果有自定义性能监控库
```
### 3. 配置文件调整
#### 3.1 添加Banner配置
```objc
// YMBannerConfig.h
@interface YMBannerConfig : NSObject
@property (nonatomic, assign) BOOL enablePerformanceMonitoring;
@property (nonatomic, assign) BOOL enableErrorReporting;
@property (nonatomic, assign) CGFloat defaultShowDuration;
@property (nonatomic, assign) CGFloat defaultStayDuration;
@property (nonatomic, assign) CGFloat defaultHideDuration;
+ (instancetype)shared;
@end
```
### 4. 迁移策略
#### 4.1 Phase 1: 基础架构
- 创建基类和协议
- 实现反馈管理器
- 设置基础配置
#### 4.2 Phase 2: 渐进迁移
- 优先迁移使用频率最高的Banner
- 保持向后兼容性
- 添加单元测试
#### 4.3 Phase 3: 优化完善
- 移除旧代码
- 性能优化
- 文档完善
## 总结
这套新的Banner组件架构具备以下优势
1. **统一性**: 提供一致的API和行为模式
2. **扩展性**: 易于添加新的Banner类型
3. **可维护性**: 集中管理动画、埋点和反馈
4. **性能优化**: 统一的资源管理和内存优化
5. **用户体验**: 标准化的交互和反馈机制
通过这套架构可以显著提升Banner组件的开发效率和用户体验质量。

View File

@@ -0,0 +1,80 @@
# 飘屏组件分析文档
## 概述
本文档详细分析了项目中在 `RoomAnimationView.m``bannerContainer` 中展示的所有飘屏类型及其触发逻辑。
## 飘屏展示机制
- **展示容器**: `bannerContainer` (XPRoomAnimationHitView)
- **位置**: 视图层级最顶层,距离顶部导航栏高度
- **尺寸**: 屏幕宽度 × 180px 高度
- **管理机制**: 统一队列管理,按优先级顺序播放
## 飘屏类型详细表格
| 序号 | 飘屏名称 | 类名 | 触发消息类型 | 处理方法 | 业务场景 | 功能描述 |
|-----|---------|------|-------------|---------|----------|---------|
| 1 | 高价值礼物飘屏 | RoomHighValueGiftBannerAnimation | Custom_Message_Sub_Gift_ChannelNotify | playRoomGiftBanner: | 礼物系统 | 展示高价值礼物的全服广播 |
| 2 | CP礼物飘屏 | CPGiftBanner | Custom_Message_Sub_CP_Gift | playCPGiftBanner: | CP系统 | 展示CP相关礼物特效 |
| 3 | Bravo超级礼物飘屏 | BravoGiftBannerView | Custom_Message_Sub_Super_Gift_Banner | playBroveBanner: | 超级礼物 | 展示Bravo超级礼物效果 |
| 4 | 幸运红包飘屏 | LuckyPackageBannerView | Custom_Message_Sub_LuckyPackage | playLuckyPackageBanner: | 红包系统 | 展示房间红包,支持跨房间跳转 |
| 5 | 幸运礼物中奖飘屏 | LuckyGiftWinningBannerView | Custom_Message_Sub_Super_Gift_Winning_Coins_ALL_Room | playLuckyWinningBanner: | 中奖系统 | 展示全服中奖信息 |
| 6 | 通用游戏飘屏 | GameUniversalBannerView | Custom_Message_Sub_General_Floating_Screen_One_Room<br/>Custom_Message_Sub_General_Floating_Screen_All_Room | playGameBanner: | 游戏系统 | 展示游戏相关飘屏,支持跳转 |
| 7 | 塔罗飘屏 | XPRoomTarrowBannerView | Custom_Message_Sub_Tarot_Advanced<br/>Custom_Message_Sub_Tarot_Intermediate | createTarotBannerAnimation: | 塔罗活动 | 展示塔罗相关活动信息 |
| 8 | 星厨房飘屏 | XPRoomStarKitchenBannerView | Custom_Message_Sub_Star_Kitchen_FullScreen | createStarKitchenBannerAnimation: | 厨房活动 | 展示星厨房活动 |
| 9 | 夺宝精灵飘屏 | - | Custom_Message_Sub_Treasure_Fairy_Draw_Gift_L4<br/>Custom_Message_Sub_Treasure_Fairy_Draw_Gift_L5<br/>Custom_Message_Sub_Treasure_Fairy_Convert_L1/L2/L3 | createTreasureFairyBannerAnimation: | 夺宝活动 | 展示夺宝精灵高等级奖励 |
| 10 | 主播小时榜飘屏 | XPRoomAnchorRankBannerView | Custom_Message_Sub_Anchor_Hour_Rank | 创建主播排行榜飘屏 | 排行榜 | 展示主播小时榜信息 |
| 11 | 通用H5飘屏 | XPRoomTarrowBannerView | Custom_Message_Sub_Common_H5_Novice<br/>Custom_Message_Sub_Common_H5_Advanced | createCommonH5BannerAnimation: | H5活动 | 展示通用H5活动飘屏 |
| 12 | 通用飘屏 | PIUniversalBannerView | 多种消息类型 | createGeneralFloatingScreenAnimation: | 通用展示 | 提供通用飘屏展示能力 |
## 队列管理机制
### 核心属性
- **队列数组**: `roomBannertModelsQueueV2` (NSMutableArray)
- **状态标记**: `isRoomBannerV2Displaying` (BOOL)
### 处理流程
1. **消息接收**: 调用 `inserBannerModelToQueue:` 将消息加入队列
2. **优先级排序**: 调用 `sortBannerQueue` 按消息类型的second值排序数值越小优先级越高
3. **顺序播放**: 调用 `processNextRoomEffectAttachment` 逐个播放
4. **播放完成**: 每个飘屏播放完成后,设置 `isRoomBannerV2Displaying = NO` 并处理下一个
### 优先级规则
飘屏按 `AttachmentModel.second` 值进行排序,确保重要消息优先展示。
## 消息类型分类
### 礼物相关
- Custom_Message_Sub_Gift_ChannelNotify (32)
- Custom_Message_Sub_CP_Gift
- Custom_Message_Sub_Super_Gift_Banner (1066)
### 红包/福袋相关
- Custom_Message_Sub_LuckyPackage (607)
- Custom_Message_Sub_Super_Gift_Winning_Coins_ALL_Room (1063)
### 游戏相关
- Custom_Message_Sub_General_Floating_Screen_One_Room (1071)
- Custom_Message_Sub_General_Floating_Screen_All_Room (1072)
### 活动相关
- Custom_Message_Sub_Tarot_Advanced (714)
- Custom_Message_Sub_Tarot_Intermediate (713)
- Custom_Message_Sub_Star_Kitchen_FullScreen (1042)
- Custom_Message_Sub_Treasure_Fairy_* (9700系列)
### 排行榜相关
- Custom_Message_Sub_Anchor_Hour_Rank (891)
### 通用相关
- Custom_Message_Sub_Common_H5_* (1100系列)

View File

@@ -0,0 +1,203 @@
# 飘屏组件抽象分析
## 分析概述
基于对项目中12种飘屏组件的深入分析发现这些组件存在高度相似的设计模式和实现结构具备抽象出统一父类的条件。
## 现状分析
### 共同特征
经过代码分析,发现所有飘屏组件都具有以下共同特征:
#### 1. 统一的类方法签名模式
大部分Banner类都采用了相似的类方法签名
``` objc
+ (void)display:(UIView *)superView
with:(AttachmentModel *)attachment
complete:(void(^)(void))complete;
// 或者带房间信息的版本
+ (void)display:(UIView *)superView
inRoomUid:(NSInteger)roomUid
with:(AttachmentModel *)attachment
complete:(void(^)(void))complete
exitCurrentRoom:(void(^)(void))exit;
```
#### 2. 共同的内部属性结构
```objc
@property (nonatomic, strong) SomeViewModel *model; // 数据模型
@property (nonatomic, strong) UIImageView *backgroundImageView; // 背景图片
@property (nonatomic, copy) void(^completeDisplay)(void); // 完成回调
@property (nonatomic, copy) void(^exitCurrentRoom)(void); // 退房回调
@property (nonatomic, assign) NSInteger currentRoomUid; // 当前房间ID
```
#### 3. 相似的动画流程
- 从屏幕右侧滑入 (x = KScreenWidth)
- 短暂停留展示
- 滑出屏幕或淡出
- 执行完成回调
#### 4. 统一的数据处理模式
- 都依赖 `AttachmentModel` 作为数据源
- 都创建对应的ViewModel进行数据解析
- 都继承自 `PIBaseModel`
#### 5. 相似的UI组件
- 背景图片视图
- 用户头像
- 文本标签
- 可选的SVGA动画视图
- 可选的交互按钮
## 抽象方案设计
### 建议的基类结构: `BaseRoomBannerView`
```objc
@interface BaseRoomBannerView : UIView
#pragma mark - 核心属性
@property (nonatomic, strong) AttachmentModel *attachment;
@property (nonatomic, strong) PIBaseModel *viewModel;
@property (nonatomic, assign) NSInteger currentRoomUid;
@property (nonatomic, assign) NSInteger targetRoomUid;
#pragma mark - UI组件
@property (nonatomic, strong) UIView *containerView;
@property (nonatomic, strong) UIImageView *backgroundImageView;
@property (nonatomic, strong) NetImageView *avatarImageView;
@property (nonatomic, strong) UILabel *titleLabel;
@property (nonatomic, strong) UILabel *subTitleLabel;
@property (nonatomic, strong) UIButton *actionButton;
@property (nonatomic, strong) SVGAImageView *svgaView;
#pragma mark - 动画配置
@property (nonatomic, assign) CGFloat showDuration;
@property (nonatomic, assign) CGFloat stayDuration;
@property (nonatomic, assign) CGFloat hideDuration;
@property (nonatomic, assign) BOOL useSlideAnimation;
@property (nonatomic, assign) BOOL useFadeAnimation;
#pragma mark - 回调
@property (nonatomic, copy) void(^completeDisplay)(void);
@property (nonatomic, copy) void(^exitCurrentRoom)(void);
@property (nonatomic, copy) void(^didTapBanner)(NSInteger roomID);
#pragma mark - 类方法
+ (instancetype)createWithAttachment:(AttachmentModel *)attachment
inRoomUid:(NSInteger)roomUid
complete:(void(^)(void))complete
exitCurrentRoom:(void(^)(void))exit;
+ (void)display:(UIView *)superView
with:(AttachmentModel *)attachment
complete:(void(^)(void))complete;
+ (void)display:(UIView *)superView
inRoomUid:(NSInteger)roomUid
with:(AttachmentModel *)attachment
complete:(void(^)(void))complete
exitCurrentRoom:(void(^)(void))exit;
#pragma mark - 实例方法
- (void)setupWithAttachment:(AttachmentModel *)attachment;
- (void)showInSuperView:(UIView *)superView;
- (void)performShowAnimation;
- (void)performHideAnimation;
#pragma mark - 子类重写方法
- (Class)viewModelClass; // 返回对应的ViewModel类
- (void)setupUI; // 设置UI布局
- (void)configureWithModel:(PIBaseModel *)model; // 配置数据
- (void)customizeAnimation; // 自定义动画
- (void)handleTapAction; // 处理点击事件
@end
```
### 抽象优势分析
#### 1. 代码复用率提升
- 消除重复的动画逻辑
- 统一的数据处理流程
- 共享的UI组件管理
#### 2. 维护成本降低
- 集中管理动画参数
- 统一的回调处理机制
- 标准化的生命周期管理
#### 3. 扩展性增强
- 新增飘屏类型只需继承基类
- 便于添加通用功能(如埋点、性能监控)
- 支持主题切换等全局功能
#### 4. 一致性保证
- 统一的动画效果和时长
- 标准化的交互行为
- 一致的视觉表现
### 实现策略
#### 阶段一:创建基类
1. 提取共同属性和方法
2. 实现通用动画逻辑
3. 定义子类接口规范
#### 阶段二:重构现有类
1. 逐步迁移现有Banner类继承基类
2. 移除重复代码
3. 保持向后兼容
#### 阶段三:优化和扩展
1. 添加性能监控
2. 实现主题支持
3. 统一埋点逻辑
### 潜在挑战
#### 1. 兼容性问题
- 现有代码的重构风险
- 不同Banner的特殊需求差异
- 第三方依赖的适配
#### 2. 性能考虑
- 基类功能过于复杂可能影响性能
- 内存占用的优化
- 动画性能的平衡
#### 3. 维护复杂度
- 基类变更可能影响所有子类
- 需要详细的文档和测试
- 团队学习成本
## 结论
**建议进行抽象**:项目中的飘屏组件具有高度的相似性,抽象出基类能够显著提升代码质量和开发效率。建议采用渐进式重构策略,先创建基类和接口规范,再逐步迁移现有实现,确保系统稳定性的同时实现架构优化。
## 优先级建议
1. **高优先级**:创建 `BaseRoomBannerView` 基类
2. **中优先级**重构使用频率最高的Banner类
3. **低优先级**:添加扩展功能和优化
通过这种抽象设计,能够在保持现有功能完整性的同时,为未来的功能扩展和维护奠定良好的架构基础。

14
Podfile
View File

@@ -6,12 +6,9 @@ target 'YuMi' do
#pag动画
pod 'libpag'
pod 'Bugly'
pod 'Adjust'
pod 'Firebase/Analytics'
pod 'FBSDKLoginKit'
pod 'FBSDKCoreKit'
pod 'FBSDKShareKit'
pod 'LineSDKSwift'
# 滑动标签栏
pod 'JXCategoryView'
pod 'JXPagingView/Pager'
@@ -19,6 +16,7 @@ target 'YuMi' do
pod 'MJExtension'
#图片加载
pod 'SDWebImage'
# pod 'SDWebImageWebPCoder' 用于加载 webP
pod 'FLAnimatedImage'
pod 'SDWebImageFLPlugin' # 对FLAnimatedImage和SDWebImage的桥接
pod 'AFNetworking'
@@ -46,30 +44,28 @@ target 'YuMi' do
#上传音乐
pod 'CocoaAsyncSocket',:modular_headers => true
#声网
pod 'AgoraRtcEngine_iOS'
pod 'SSKeychain'
pod 'Base64'
#pop动画
pod 'pop'
#云信
pod 'NIMSDK_LITE'
pod 'NIMSDK_LITE', '~> 10.9.40'
pod 'GKCycleScrollView'
pod 'SVGAPlayer'
pod 'GoogleSignIn'
pod 'mob_linksdk_pro'
pod 'mob_sharesdk'
pod 'mob_sharesdk/ShareSDKPlatforms/Apple'
#pod 'mob_sharesdk/ShareSDKPlatforms/Line'
pod 'mob_sharesdk/ShareSDKExtension'
pod 'UMCommon'
pod 'UMDevice'
pod 'lottie-ios'
pod 'ZLCollectionViewFlowLayout'
pod 'WMZDropDownMenu'
pod 'TABAnimated'
pod 'YuMi',:path=>'yum'
pod 'QCloudCOSXML'
pod 'TYCyclePagerView'
end
post_install do |installer|
@@ -77,6 +73,8 @@ post_install do |installer|
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
config.build_settings['DEBUG_INFORMATION_FORMAT'] = 'dwarf-with-dsym'
config.build_settings['ENABLE_BITCODE'] = 'NO'
xcconfig_path = config.base_configuration_reference.real_path
xcconfig = File.read(xcconfig_path)
xcconfig_mod = xcconfig.gsub(/DT_TOOLCHAIN_DIR/, "TOOLCHAIN_DIR")

File diff suppressed because it is too large Load Diff

View File

@@ -50,6 +50,13 @@
ReferencedContainer = "container:YuMi.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<EnvironmentVariables>
<EnvironmentVariable
key = "OS_ACTIVITY_MODE"
value = "disable"
isEnabled = "NO">
</EnvironmentVariable>
</EnvironmentVariables>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"

View File

@@ -24,10 +24,10 @@
#import "XPRoomViewController.h"
#import "XCCurrentVCStackManager.h"
#import "ClientConfig.h"
#import <Adjust/Adjust.h>
#import <UserNotifications/UserNotifications.h>
#import <Bugly/Bugly.h>
#import <UIKit/UIDevice.h>
#import "YuMi-swift.h"
@@ -41,7 +41,6 @@ UIKIT_EXTERN NSString * adImageName;
[self setLanguage];
[self configShareSDK];
[self configNIMSDK];
[self configAdjust];
[self configBugly];
[self registerNot];
[self initEmojiData];
@@ -77,32 +76,34 @@ UIKIT_EXTERN NSString * adImageName;
/**
Bugly
*/
- (void) configBugly {
BuglyConfig *config = [[BuglyConfig alloc] init];
config.blockMonitorTimeout = 5;
config.unexpectedTerminatingDetectionEnable = YES; // 退
#ifdef DEBUG
config.debugMode = YES; // debug
config.debugMode = NO;//YES; // debug
config.channel = [YYUtility getAppSource];
config.blockMonitorEnable = YES; //
config.reportLogLevel = BuglyLogLevelVerbose; //
config.reportLogLevel = BuglyLogLevelWarn;// BuglyLogLevelSilent; // BuglyLogLevelVerbose; //
[Bugly startWithAppId:@"c937fd00f7" config:config];
#else
config.unexpectedTerminatingDetectionEnable = YES; // 退
config.debugMode = NO; // release
config.channel = [YYUtility getAppSource];;
config.blockMonitorEnable = NO; //
config.blockMonitorEnable = YES; //
config.reportLogLevel = BuglyLogLevelWarn; //
NSString *buylyKey = @"8627948559"; // isEnterprise == NO ? @"5334684d86" : @"d65df59a68";
NSString *buylyKey = @"8627948559";
[Bugly startWithAppId:buylyKey config:config];
#endif
}
- (void)configNIMSDK {
// NIMSDK
NSString *appKey = KeyWithType(KeyType_NetEase);
NSString *appKey = [[ClientConfig shareConfig].configInfo nimKey];
if ([NSString isEmpty:appKey]) {
appKey = KeyWithType(KeyType_NetEase);
}
NIMSDKOption *option = [NIMSDKOption optionWithAppKey:appKey];
#ifdef DEBUG
option.apnsCername = @"pikoDevelopPush";
@@ -114,38 +115,28 @@ UIKIT_EXTERN NSString * adImageName;
// NIM SDK
[NIMCustomObject registerCustomDecoder:[[CustomAttachmentDecoder alloc] init]];
[[NIMSDKConfig sharedConfig] setShouldSyncStickTopSessionInfos:YES];
[NIMSDKConfig sharedConfig].shouldConsiderRevokedMessageUnreadCount = YES;
///
[[NIMSDKConfig sharedConfig] setShouldSyncStickTopSessionInfos:YES];
// cdn
[NIMSDKConfig sharedConfig].cdnTrackInterval = 0;
//
[NIMSDKConfig sharedConfig].chatroomMessageReceiveMinInterval = 50;
#ifdef DEBUG
[NIMSDKConfig sharedConfig].enabledHttpsForInfo = NO;
[NIMSDKConfig sharedConfig].enabledHttpsForMessage = NO;
#else
// HTTPS
[NIMSDKConfig sharedConfig].enabledHttpsForInfo = YES;
[NIMSDKConfig sharedConfig].enabledHttpsForMessage = YES;
#endif
}
-(void)configAdjust{
NSString *appToken = @"p5sndfu9udq8";
NSString *environment;
#ifdef DEBUG
environment = ADJEnvironmentSandbox;
#else
environment = ADJEnvironmentProduction;
#endif
ADJConfig*adjustConfig = [ADJConfig configWithAppToken:appToken
environment:environment];
#ifdef DEBUG
[adjustConfig setLogLevel:ADJLogLevelVerbose];
#else
#endif
[Adjust appDidLaunch:adjustConfig];
}
- (void)configShareSDK {
[PILineLoginManager registerLine];
// [PILineLoginManager registerLine];
[ShareSDK registPlatforms:^(SSDKRegister *platformsRegister) {
///faceBook
@@ -169,12 +160,18 @@ UIKIT_EXTERN NSString * adImageName;
NSArray * emojiArray = dic[@"data"];
NSMutableArray * array = [NSMutableArray array];
for (int i = 0; i < emojiArray.count; i++) {
NSDictionary * dic = [emojiArray objectAtIndex:i];
UIImage * image = [UIImage imageNamed:dic[@"file"]];
QEmotion * info = [[QEmotion alloc] init];
info.identifier = dic[@"id"];
NSDictionary * dic = [emojiArray xpSafeObjectAtIndex:i];
if (dic) {
info.displayName = dic[@"tag"];
info.identifier = dic[@"id"];
}
info.image = image;
info.displayName = dic[@"tag"];
[array addObject:info];
}
//
@@ -195,18 +192,13 @@ UIKIT_EXTERN NSString * adImageName;
NSString *filePath = [XPAdImageTool.shareImageTool getFilePathWithImageName:adName];
BOOL isExist = [XPAdImageTool.shareImageTool isFileExistWithFilePath:filePath];
if ([kUserDefaults integerForKey:@"adShow"]) {
[kUserDefaults setInteger:[kUserDefaults integerForKey:@"adShow"]+1
forKey:@"adShow"];
} else {
[kUserDefaults setInteger:1 forKey:@"adShow"];
}
if (isExist) {//
if ([kUserDefaults integerForKey:@"adShow"] > 4) {
// if ([kUserDefaults integerForKey:@"adShow"] > 4) {
@kWeakify(self);
AdvertiseModel *info = [XPAdImageTool.shareImageTool getAdInfoFromCacheInMainWith:adName];
XPAdvertiseView *advertiseView = [[XPAdvertiseView alloc] initWithFrame:self.window.bounds];
advertiseView.type = info.type;
advertiseView.fileModel = info.fillVo;
advertiseView.filePath = filePath;
advertiseView.dismissHandler = ^(BOOL shouldJump) {
@kStrongify(self)
@@ -218,7 +210,7 @@ UIKIT_EXTERN NSString * adImageName;
});
};
[advertiseView show];
}
// }
}
}
@@ -241,10 +233,13 @@ UIKIT_EXTERN NSString * adImageName;
}
}
break;
case SplashInfoSkipTypeWeb: {
case SplashInfoSkipTypeWeb:
case SplashInfoSkipTypeWeb_CP:
case SplashInfoSkipTypeWeb_Custom:
case SplashInfoSkipTypeWeb_WeekStar: {
// H5
if (info.link.length > 0) {
XPWebViewController *webView = [[XPWebViewController alloc]init];
XPWebViewController *webView = [[XPWebViewController alloc] initWithRoomUID:nil];
webView.url = info.link;
[[[XCCurrentVCStackManager shareManager]currentNavigationController] pushViewController:webView animated:YES];
}

View File

@@ -10,7 +10,6 @@
#import <UMCommon/UMCommon.h>
#import <MobLinkPro/MobLink.h>
#import <MobLinkPro/MLSDKScene.h>
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import "TabbarViewController.h"
#import "BaseNavigationController.h"
#import "AppDelegate+ThirdConfig.h"
@@ -18,14 +17,15 @@
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import "ClientConfig.h"
#import <GoogleSignIn/GoogleSignIn.h>
#import "GULAppDelegateSwizzler.h"
#import <GoogleSignIn/GoogleSignIn.h>
#import "XPLoginViewController.h"
#import "LoginViewController.h"
#import "AccountModel.h"
#import "YuMi-swift.h"
#import "SessionViewController.h"
#import "LoginFullInfoViewController.h"
@import Firebase;
#import "UIView+VAP.h"
#import "SocialShareManager.h"
UIKIT_EXTERN NSString * const kOpenRoomNotification;
@interface AppDelegate ()<IMLSDKRestoreDelegate>
@@ -34,18 +34,54 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification;
@implementation AppDelegate
//
void qg_VAP_Logger_handler(VAPLogLevel level, const char* file, int line, const char* func, NSString *module, NSString *format, ...) {
// MP4 log
return;
// if (format.UTF8String == nil) {
// NSLog(@"log包含非utf-8字符");
// return;
// }
// if (level > VAPLogLevelDebug) {
// va_list argList;
// va_start(argList, format);
// NSString* message = [[NSString alloc] initWithFormat:format arguments:argList];
// file = [NSString stringWithUTF8String:file].lastPathComponent.UTF8String;
// NSLog(@"<%@> %s(%@):%s [%@] - %@",@(level), file, @(line), func, module, message);
// va_end(argList);
// }
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
/// sdk
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIStoryboard *launchStoryboard = [UIStoryboard storyboardWithName:@"Launch Screen" bundle:nil];
UIViewController *launchScreenVC = [launchStoryboard instantiateInitialViewController];
self.window.rootViewController = launchScreenVC;
[self.window makeKeyAndVisible];
[VAPView registerHWDLog:qg_VAP_Logger_handler];
/// sdk
[self initThirdConfig];
[self initUM:application launchOptions:launchOptions];
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
[self.window makeKeyAndVisible];
[self loadMainPage];
[self setupLaunchADView];
@kWeakify(self);
[[ClientConfig shareConfig] clientConfig:^{
@kStrongify(self);
dispatch_async(dispatch_get_main_queue(), ^{
[self loadMainPage];
[self setupLaunchADView];
});
}];
if (@available(iOS 15, *)) {
[[UITableView appearance] setSectionHeaderTopPadding:0];
}
return YES;
}
@@ -57,8 +93,6 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification;
[UMConfigure initWithAppkey:@"6434c6dfd64e686139618269"
channel:@"appstore"];
}
[[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
[FIRApp configure];
[MobLink setDelegate:self];
}
@@ -71,10 +105,12 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification;
}else{
[self toHomeTabbarPage];
}
[[ClientConfig shareConfig] clientInit];
}
- (void)toLoginPage {
XPLoginViewController *lvc = [[XPLoginViewController alloc] init];
LoginViewController *lvc = [[LoginViewController alloc] init];
BaseNavigationController * navigationController = [[BaseNavigationController alloc] initWithRootViewController:lvc];
navigationController.modalPresentationStyle = UIModalPresentationFullScreen;
self.window.rootViewController = navigationController;
@@ -112,16 +148,16 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification;
ATTrackingManagerAuthorizationStatus status = ATTrackingManager.trackingAuthorizationStatus;
switch (status) {
case ATTrackingManagerAuthorizationStatusDenied:
NSLog(@"用户拒绝IDFA");
// NSLog(@"用户拒绝IDFA");
break;
case ATTrackingManagerAuthorizationStatusAuthorized:
NSLog(@"用户允许IDFA");
// NSLog(@"用户允许IDFA");
break;
case ATTrackingManagerAuthorizationStatusNotDetermined: {
NSLog(@"用户未做选择或未弹窗IDFA");
// NSLog(@"用户未做选择或未弹窗IDFA");
//1app
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
NSLog(@"app追踪IDFA权限%lu",(unsigned long)status);
// NSLog(@"app追踪IDFA权限%lu",(unsigned long)status);
}];
}
break;
@@ -166,57 +202,47 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification;
///URL Scheme
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
NSString *bundleID = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"];
if ([url.scheme isEqualToString:[NSString stringWithFormat:@"line3rdp.%@",bundleID]]) {
return [PILineLoginManager applicationOpenurl:app open:url];
}
[[SocialShareManager sharedManager] handleURL:url];
NSString *text = [url query];
if(text.length){
NSMutableDictionary *paramsDict = [NSMutableDictionary dictionary];
NSArray *paramArray = [text componentsSeparatedByString:@"&"];
for (NSString *param in paramArray) {
if (param && param.length) {
NSArray *parArr = [param componentsSeparatedByString:@"="];
if (parArr.count == 2) {
[paramsDict setObject:parArr[1] forKey:parArr[0]];
}
}
}
if(paramsDict[@"type"] != nil){
NSInteger type = [paramsDict[@"type"] integerValue];
if (type == 2) {
NSString *uid = [NSString stringWithFormat:@"%@",paramsDict[@"uid"]];
[[NSNotificationCenter defaultCenter]postNotificationName:kOpenRoomNotification object:nil userInfo:@{@"uid":uid}];
ClientConfig *config = [ClientConfig shareConfig];
config.roomId = uid;
}else if(type == 7){
NSString *uid = [NSString stringWithFormat:@"%@",paramsDict[@"uid"]];
[[NSNotificationCenter defaultCenter]postNotificationName:kOpenRoomNotification object:nil userInfo:@{@"type":@"kOpenChat",@"uid":uid}];
ClientConfig *config = [ClientConfig shareConfig];
config.chatId = uid;
}else if (type == 8){
NSString *inviteCode = paramsDict[@"inviteCode"];
if (inviteCode != nil && [[AccountInfoStorage instance]getUid].length == 0){
ClientConfig *config = [ClientConfig shareConfig];
config.inviteCode = inviteCode;
}
}
return YES;
}
}
if([url.absoluteString containsString:@"fb1266232494209868"]){
return [[FBSDKApplicationDelegate sharedInstance] application:app
openURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}
return [GIDSignIn.sharedInstance handleURL:url];
}
//- (void)__oldApplicationOpenURLMethod:(NSURL *)url {
// NSString *text = [url query];
// if(text.length){
// NSMutableDictionary *paramsDict = [NSMutableDictionary dictionary];
// NSArray *paramArray = [text componentsSeparatedByString:@"&"];
// for (NSString *param in paramArray) {
// if (param && param.length) {
// NSArray *parArr = [param componentsSeparatedByString:@"="];
// if (parArr.count == 2) {
// [paramsDict setObject:parArr[1] forKey:parArr[0]];
// }
// }
// }
// if(paramsDict[@"type"] != nil){
// NSInteger type = [paramsDict[@"type"] integerValue];
// if (type == 2) {
// NSString *uid = [NSString stringWithFormat:@"%@",paramsDict[@"uid"]];
// [[NSNotificationCenter defaultCenter]postNotificationName:kOpenRoomNotification object:nil userInfo:@{@"uid":uid}];
// ClientConfig *config = [ClientConfig shareConfig];
// config.roomId = uid;
// }else if(type == 7){
// NSString *uid = [NSString stringWithFormat:@"%@",paramsDict[@"uid"]];
// [[NSNotificationCenter defaultCenter]postNotificationName:kOpenRoomNotification object:nil userInfo:@{@"type":@"kOpenChat",@"uid":uid}];
// ClientConfig *config = [ClientConfig shareConfig];
// config.chatId = uid;
// }else if (type == 8){
// NSString *inviteCode = paramsDict[@"inviteCode"];
// if (inviteCode != nil && [[AccountInfoStorage instance]getUid].length == 0){
// ClientConfig *config = [ClientConfig shareConfig];
// config.inviteCode = inviteCode;
// }
// }
//// return YES;
// }
// }
//}
#pragma mark - Core Data stack
@synthesize managedObjectContext = _managedObjectContext;
@@ -258,7 +284,7 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification;
error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict];
// Replace this with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
// NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
@@ -290,7 +316,7 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification;
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
// NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}

View File

@@ -1,16 +0,0 @@
//
// FBSDKSettings+PISDKSettings.h
// YuMi
//
// Created by duoban on 2023/9/22.
//
#import <FBSDKCoreKit/FBSDKCoreKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface FBSDKSettings (PISDKSettings)
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,19 +0,0 @@
//
// FBSDKSettings+PISDKSettings.m
// YuMi
//
// Created by duoban on 2023/9/22.
//
#import "FBSDKSettings+PISDKSettings.h"
#import "GULAppDelegateSwizzler.h"
@implementation FBSDKSettings (PISDKSettings)
///FBSDKSettingssetAutoLogAppEventsEnabled退
+(void)setAutoLogAppEventsEnabled:(BOOL)is{
}
@end

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "1@3x (1).png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "椭圆 6@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "组 4.jpg@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "组 4.jpg@3x-2.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "moli_money_icon@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "组 7122@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "1@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_flag_lv_1@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_flag_lv_2@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_flag_lv_3@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_flag_lv_4@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_flag_lv_5@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_flag_lv_6@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_head_lv_2@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_head_lv_3@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_head_lv_4@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_head_lv_5@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_head_lv_6@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_heart@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "容器 8171@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 519 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "框@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "切图 32@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "头像@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "爱心@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "返回 1@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "3@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "3@3x-2.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "3@3x-3.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "3@3x-4.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "3@3x-5.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "切图 32@3x-2.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "切图 31@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_relationship_bg@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_relationship_lv_0@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_relationship_lv_1@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_relationship_lv_2@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_relationship_lv_3@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_relationship_lv_4@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Some files were not shown because too many files have changed in this diff Show More