feat: 添加 E-Parti 启动画面及情绪颜色引导功能

主要变更:
1. 新增 ep_splash.png 作为应用启动时的展示图像。
2. 更新 Info.plist 中的应用名称和相关描述,替换为 "E-Parti"。
3. 引入 EPSignatureColorGuideView 和 EPEmotionColorStorage,支持用户选择和保存专属情绪颜色。
4. 在 AppDelegate 中集成情绪颜色引导逻辑,确保用户首次登录时能够选择专属颜色。

此更新旨在提升用户体验,增强应用的品牌识别度,并提供个性化的情绪表达功能。
This commit is contained in:
edwinQQQ
2025-10-15 15:56:32 +08:00
parent 3a12a18687
commit 2d0063396c
44 changed files with 1052 additions and 286 deletions

View File

@@ -462,6 +462,9 @@
4C75CF002D633C27009147A5 /* CP进场.svga in Resources */ = {isa = PBXBuildFile; fileRef = 4C75CEFF2D633C27009147A5 /* CP进场.svga */; };
4C7989EF2D195277006AE07B /* RoomModeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7989EE2D195277006AE07B /* RoomModeViewController.m */; };
4C7989F32D1952DA006AE07B /* RoomModePresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7989F22D1952DA006AE07B /* RoomModePresenter.m */; };
4C7B8F632E9F6E1300A5E236 /* EPSignatureColorGuideView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7B8F622E9F6E1300A5E236 /* EPSignatureColorGuideView.m */; };
4C7B90982E9F70FC00A5E236 /* ep_splash.png in Resources */ = {isa = PBXBuildFile; fileRef = 4C7B90972E9F70FC00A5E236 /* ep_splash.png */; };
4C7B909B2E9F822900A5E236 /* EPEmotionColorWheelView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7B909A2E9F822900A5E236 /* EPEmotionColorWheelView.m */; };
4C7F2A672E0BE0AB002F5058 /* FirstRechargeModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7F2A662E0BE0AB002F5058 /* FirstRechargeModel.m */; };
4C7F2A6B2E0BE7E7002F5058 /* FirstRechargeManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7F2A6A2E0BE7E7002F5058 /* FirstRechargeManager.m */; };
4C815A172CFEB758002A46A6 /* SuperBlockViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C815A162CFEB758002A46A6 /* SuperBlockViewController.m */; };
@@ -2560,6 +2563,11 @@
4C7989EE2D195277006AE07B /* RoomModeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RoomModeViewController.m; sourceTree = "<group>"; };
4C7989F12D1952DA006AE07B /* RoomModePresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RoomModePresenter.h; sourceTree = "<group>"; };
4C7989F22D1952DA006AE07B /* RoomModePresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RoomModePresenter.m; sourceTree = "<group>"; };
4C7B8F612E9F6E1300A5E236 /* EPSignatureColorGuideView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EPSignatureColorGuideView.h; sourceTree = "<group>"; };
4C7B8F622E9F6E1300A5E236 /* EPSignatureColorGuideView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EPSignatureColorGuideView.m; sourceTree = "<group>"; };
4C7B90972E9F70FC00A5E236 /* ep_splash.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ep_splash.png; sourceTree = "<group>"; };
4C7B90992E9F822900A5E236 /* EPEmotionColorWheelView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EPEmotionColorWheelView.h; sourceTree = "<group>"; };
4C7B909A2E9F822900A5E236 /* EPEmotionColorWheelView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EPEmotionColorWheelView.m; sourceTree = "<group>"; };
4C7F2A652E0BE0AB002F5058 /* FirstRechargeModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FirstRechargeModel.h; sourceTree = "<group>"; };
4C7F2A662E0BE0AB002F5058 /* FirstRechargeModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FirstRechargeModel.m; sourceTree = "<group>"; };
4C7F2A692E0BE7E7002F5058 /* FirstRechargeManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FirstRechargeManager.h; sourceTree = "<group>"; };
@@ -5081,6 +5089,7 @@
2368ECD52BC38FDA00EDF4C9 /* Launch Screen.storyboard */,
237700CE2BC697D400D661F1 /* pi_login_new_logo.png */,
237FD35C2C0F187B00B5335C /* pi_app_logo_new_bg.png */,
4C7B90972E9F70FC00A5E236 /* ep_splash.png */,
2396FCE32B22BE5D0014021D /* pi_area_info.json */,
189DD53D26DE255600AB55B1 /* Info.plist */,
2368ECD72BC38FED00EDF4C9 /* PrivacyInfo.xcprivacy */,
@@ -6421,6 +6430,10 @@
4C06427B2E97BD6D00BAF413 /* Views */ = {
isa = PBXGroup;
children = (
4C7B90992E9F822900A5E236 /* EPEmotionColorWheelView.h */,
4C7B909A2E9F822900A5E236 /* EPEmotionColorWheelView.m */,
4C7B8F612E9F6E1300A5E236 /* EPSignatureColorGuideView.h */,
4C7B8F622E9F6E1300A5E236 /* EPSignatureColorGuideView.m */,
4CDF7F402E9E581900113F54 /* EPEmotionColorPicker.h */,
4CDF7F412E9E581900113F54 /* EPEmotionColorPicker.m */,
4C0642972E98F77900BAF413 /* EPMomentListView.h */,
@@ -11688,6 +11701,7 @@
23CEFC582AFB8FC100576D89 /* pay_on@3x.png in Resources */,
23FF25622ABAE6310064E904 /* pi_room_game_fine_love.svga in Resources */,
23FF42672AA5CFBB0055733C /* home_sound_wave.gif in Resources */,
4C7B90982E9F70FC00A5E236 /* ep_splash.png in Resources */,
4C1392A12D71675900A6DFB5 /* coincoin.mp4 in Resources */,
E80E09A92A40B70100CD2BE7 /* Localizable.strings in Resources */,
4CACCCE42D9A695000CCB135 /* brove_gift.svga in Resources */,
@@ -12741,6 +12755,7 @@
4CD47BC92E61A78D00BCDA46 /* XPRoomSettingAction.m in Sources */,
E82D5C7A276B25D100858D6D /* SpriteSheetImageManager.m in Sources */,
E85E7BB02A4EC99300B6D00A /* Api+GiveDiamond.m in Sources */,
4C7B909B2E9F822900A5E236 /* EPEmotionColorWheelView.m in Sources */,
E874B88B27215EAF003954B9 /* MicroQueueModel.m in Sources */,
9B1B72B828003772003FACE9 /* XPAnchorPKPresenter.m in Sources */,
E8EE827D272B9A2300A17217 /* XPRoomSendTextView.m in Sources */,
@@ -12789,6 +12804,7 @@
E8D48250278D68BA003C1D08 /* XPAcrossRoomPKPanelView.m in Sources */,
18F404C3276098F100A6C548 /* Api+Message.m in Sources */,
9B85B6D7279FDABA00A0A1AC /* XPUserCardSkillCardView.m in Sources */,
4C7B8F632E9F6E1300A5E236 /* EPSignatureColorGuideView.m in Sources */,
9B33E3CB27D85379003B0E62 /* UploadFile.m in Sources */,
E8AEAEF327141C7C0017FCE0 /* XPRoomMessageContainerView.m in Sources */,
9B1B729D28002264003FACE9 /* XPMineAnchorFansTeamModel.m in Sources */,
@@ -13544,7 +13560,7 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 7DB00EC07F1D0ADFF900B38D /* Pods-YuMi.debug.xcconfig */;
buildSettings = {
APP_DISPLAY_NAME = "Moli DEBUG";
APP_DISPLAY_NAME = "E-Parti DEBUG";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = YuMi/YuMi.entitlements;
@@ -13553,7 +13569,7 @@
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 48UCG35Q9W;
DEVELOPMENT_TEAM = Z7UCRF23F3;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
@@ -13787,7 +13803,7 @@
"-weak_framework",
"\"AuthenticationServices\"",
);
PRODUCT_BUNDLE_IDENTIFIER = com.peko.enterprise.ios;
PRODUCT_BUNDLE_IDENTIFIER = com.junpeiqi.eparty;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
@@ -13805,7 +13821,7 @@
isa = XCBuildConfiguration;
baseConfigurationReference = B66633E061B1B34177CD011C /* Pods-YuMi.release.xcconfig */;
buildSettings = {
APP_DISPLAY_NAME = MoliStar;
APP_DISPLAY_NAME = "E-Parti";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = YuMi/YuMiRelease.entitlements;

View File

@@ -177,6 +177,8 @@ UIKIT_EXTERN NSString * adImageName;
广
*/
- (void)setupLaunchADView {
return;
NSUserDefaults * kUserDefaults = NSUserDefaults.standardUserDefaults;
// 广
NSString *adName = [kUserDefaults stringForKey:adImageName];

View File

@@ -25,6 +25,8 @@
#import "LoginFullInfoViewController.h"
#import "UIView+VAP.h"
#import "SocialShareManager.h"
#import "EPSignatureColorGuideView.h"
#import "EPEmotionColorStorage.h"
UIKIT_EXTERN NSString * const kOpenRoomNotification;
@@ -130,11 +132,58 @@ void qg_VAP_Logger_handler(VAPLogLevel level, const char* file, int line, const
[self toLoginPage];
}else{
[self toHomeTabbarPage];
// window
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.8 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self checkAndShowSignatureColorGuide];
});
}
[[ClientConfig shareConfig] clientInit];
}
///
- (void)checkAndShowSignatureColorGuide {
UIWindow *keyWindow = [self getKeyWindow];
if (!keyWindow) return;
BOOL hasSignatureColor = [EPEmotionColorStorage hasUserSignatureColor];
#if DEBUG
// Debug
NSLog(@"[AppDelegate] Debug 模式:显示专属颜色引导页(已有颜色: %@", hasSignatureColor ? @"YES" : @"NO");
EPSignatureColorGuideView *guideView = [[EPSignatureColorGuideView alloc] init];
//
guideView.onColorConfirmed = ^(NSString *hexColor) {
[EPEmotionColorStorage saveUserSignatureColor:hexColor];
NSLog(@"[AppDelegate] 用户选择专属颜色: %@", hexColor);
};
// Skip
if (hasSignatureColor) {
guideView.onSkipTapped = ^{
NSLog(@"[AppDelegate] 用户跳过专属颜色选择");
};
}
// Skip
[guideView showInWindow:keyWindow showSkipButton:hasSignatureColor];
#else
// Release
if (!hasSignatureColor) {
EPSignatureColorGuideView *guideView = [[EPSignatureColorGuideView alloc] init];
guideView.onColorConfirmed = ^(NSString *hexColor) {
[EPEmotionColorStorage saveUserSignatureColor:hexColor];
NSLog(@"[AppDelegate] 用户选择专属颜色: %@", hexColor);
};
[guideView showInWindow:keyWindow];
}
#endif
}
- (void)toLoginPage {
// 使 Swift
EPLoginViewController *lvc = [[EPLoginViewController alloc] init];

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="24128" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina5_9" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="24063"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
@@ -16,46 +16,26 @@
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="pi_app_logo_new_bg.png" translatesAutoresizingMaskIntoConstraints="NO" id="sON-N7-5Wv">
<rect key="frame" x="0.0" y="0.0" width="375" height="355"/>
<constraints>
<constraint firstAttribute="height" constant="355" id="BrK-cy-oiN"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Meet your exclusive voice~" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="o5T-sv-tDU">
<rect key="frame" x="79.333333333333329" y="312" width="216.66666666666669" height="22"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<color key="textColor" red="0.023529411760000001" green="0.043137254899999998" blue="0.090196078430000007" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="pi_login_new_logo.png" translatesAutoresizingMaskIntoConstraints="NO" id="v2t-MR-31f">
<rect key="frame" x="122.66666666666669" y="140" width="130" height="148"/>
<constraints>
<constraint firstAttribute="width" constant="130" id="mQh-M0-hFI"/>
<constraint firstAttribute="height" constant="148" id="tX3-Va-dub"/>
</constraints>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ep_splash.png" translatesAutoresizingMaskIntoConstraints="NO" id="sON-N7-5Wv">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
</imageView>
</subviews>
<viewLayoutGuide key="safeArea" id="r4O-Vu-IrR"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="sON-N7-5Wv" firstAttribute="leading" secondItem="r4O-Vu-IrR" secondAttribute="leading" id="CEl-rE-BeK"/>
<constraint firstItem="o5T-sv-tDU" firstAttribute="top" secondItem="v2t-MR-31f" secondAttribute="bottom" constant="24" id="GEv-XM-qev"/>
<constraint firstItem="sON-N7-5Wv" firstAttribute="trailing" secondItem="r4O-Vu-IrR" secondAttribute="trailing" id="MsB-m5-LHI"/>
<constraint firstItem="sON-N7-5Wv" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="SM6-2S-etM"/>
<constraint firstItem="v2t-MR-31f" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" constant="140" id="YA3-7E-mLb"/>
<constraint firstItem="o5T-sv-tDU" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="Yej-IY-emP"/>
<constraint firstItem="v2t-MR-31f" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="x8C-D7-WvQ"/>
<constraint firstAttribute="bottom" secondItem="sON-N7-5Wv" secondAttribute="bottom" id="0zO-vt-zzT"/>
<constraint firstItem="sON-N7-5Wv" firstAttribute="trailing" secondItem="r4O-Vu-IrR" secondAttribute="trailing" id="MAy-os-QAw"/>
<constraint firstItem="sON-N7-5Wv" firstAttribute="leading" secondItem="r4O-Vu-IrR" secondAttribute="leading" id="Onc-xX-tha"/>
<constraint firstItem="sON-N7-5Wv" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="vhU-0c-IHX"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="52.671755725190835" y="374.64788732394368"/>
<point key="canvasLocation" x="52" y="374.6305418719212"/>
</scene>
</scenes>
<resources>
<image name="pi_app_logo_new_bg.png" width="1125" height="273"/>
<image name="pi_login_new_logo.png" width="486" height="96"/>
<image name="ep_splash.png" width="1125" height="2436"/>
</resources>
</document>

View File

@@ -134,10 +134,16 @@ import UIKit
agreeCheckbox.addTarget(self, action: #selector(togglePolicyCheckbox), for: .touchUpInside)
policyLabel.onUserAgreementTapped = { [weak self] in
self?.openPolicy(url: "https://example.com/user-agreement")
print("[EPLogin] User agreement tapped callback triggered")
let url = self?.getUserAgreementURL() ?? ""
print("[EPLogin] User agreement URL: \(url)")
self?.openPolicyInExternalBrowser(url)
}
policyLabel.onPrivacyPolicyTapped = { [weak self] in
self?.openPolicy(url: "https://example.com/privacy-policy")
print("[EPLogin] Privacy policy tapped callback triggered")
let url = self?.getPrivacyPolicyURL() ?? ""
print("[EPLogin] Privacy policy URL: \(url)")
self?.openPolicyInExternalBrowser(url)
}
agreeCheckbox.snp.makeConstraints { make in
@@ -209,10 +215,35 @@ import UIKit
}
#endif
private func openPolicy(url: String) {
let webVC = XPWebViewController(roomUID: nil)
webVC.url = url
navigationController?.pushViewController(webVC, animated: true)
private func openPolicyInExternalBrowser(_ urlString: String) {
print("[EPLogin] Original URL: \(urlString)")
// URL XPWebViewController.m 697-698
var fullUrl = urlString
if !urlString.hasPrefix("http") && !urlString.hasPrefix("https") {
let hostUrl = HttpRequestHelper.getHostUrl()
fullUrl = "\(hostUrl)/\(urlString)"
print("[EPLogin] Added host URL, full URL: \(fullUrl)")
}
print("[EPLogin] Opening URL in external browser: \(fullUrl)")
guard let url = URL(string: fullUrl) else {
print("[EPLogin] ❌ Invalid URL: \(fullUrl)")
return
}
print("[EPLogin] URL object created: \(url)")
//
if UIApplication.shared.canOpenURL(url) {
print("[EPLogin] ✅ Can open URL, attempting to open...")
UIApplication.shared.open(url, options: [:]) { success in
print("[EPLogin] Open external browser: \(success ? "✅ Success" : "❌ Failed")")
}
} else {
print("[EPLogin] ❌ Cannot open URL: \(fullUrl)")
}
}
// MARK: - Helpers
@@ -227,6 +258,22 @@ import UIKit
}
}
/// URL
private func getUserAgreementURL() -> String {
// kUserProtocalURL 4
let url = URLWithType(URLType(rawValue: 4)!) as String
print("[EPLogin] User agreement URL from URLWithType: \(url)")
return url
}
/// URL
private func getPrivacyPolicyURL() -> String {
// kPrivacyURL 0
let url = URLWithType(URLType(rawValue: 0)!) as String
print("[EPLogin] Privacy policy URL from URLWithType: \(url)")
return url
}
private func checkPolicyAgreed() -> Bool {
if !agreeCheckbox.isSelected {
// Phase 2:

View File

@@ -45,6 +45,11 @@ import UIKit
if let window = getKeyWindow() {
window.rootViewController = epTabBar
window.makeKeyAndVisible()
//
DispatchQueue.main.asyncAfter(deadline: .now() + 0.8) {
Self.checkAndShowSignatureColorGuide(in: window)
}
}
print("[EPLoginManager] 登录成功,已切换到 EPTabBarController")
@@ -61,6 +66,11 @@ import UIKit
if let window = getKeyWindow() {
window.rootViewController = epTabBar
window.makeKeyAndVisible()
//
DispatchQueue.main.asyncAfter(deadline: .now() + 0.8) {
Self.checkAndShowSignatureColorGuide(in: window)
}
}
print("[EPLoginManager] Ticket 请求失败,仍跳转到首页")
@@ -98,5 +108,44 @@ import UIKit
}
return nil
}
///
private static func checkAndShowSignatureColorGuide(in window: UIWindow) {
let hasSignatureColor = EPEmotionColorStorage.hasUserSignatureColor()
#if DEBUG
// Debug
print("[EPLoginManager] Debug 模式:显示专属颜色引导页(已有颜色: \(hasSignatureColor)")
let guideView = EPSignatureColorGuideView()
//
guideView.onColorConfirmed = { (hexColor: String) in
EPEmotionColorStorage.saveUserSignatureColor(hexColor)
print("[EPLoginManager] 用户选择专属颜色: \(hexColor)")
}
// Skip
if hasSignatureColor {
guideView.onSkipTapped = {
print("[EPLoginManager] 用户跳过专属颜色选择")
}
}
// Skip
guideView.show(in: window, showSkipButton: hasSignatureColor)
#else
// Release
if !hasSignatureColor {
let guideView = EPSignatureColorGuideView()
guideView.onColorConfirmed = { (hexColor: String) in
EPEmotionColorStorage.saveUserSignatureColor(hexColor)
print("[EPLoginManager] 用户选择专属颜色: \(hexColor)")
}
guideView.show(in: window)
}
#endif
}
}

View File

@@ -45,17 +45,17 @@ class EPPolicyLabel: UILabel {
value: UIFont.systemFont(ofSize: 12),
range: NSRange(location: 0, length: fullText.count))
//
//
if let userRange = fullText.range(of: userAgreementText) {
let nsRange = NSRange(userRange, in: fullText)
attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.black, range: nsRange)
attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.systemBlue, range: nsRange)
attributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: nsRange)
}
//
//
if let privacyRange = fullText.range(of: privacyPolicyText) {
let nsRange = NSRange(privacyRange, in: fullText)
attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.black, range: nsRange)
attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.systemBlue, range: nsRange)
attributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: nsRange)
}
@@ -69,14 +69,20 @@ class EPPolicyLabel: UILabel {
// MARK: - Actions
@objc private func handleTap(_ gesture: UITapGestureRecognizer) {
guard let text = self.text else { return }
guard let attributedText = self.attributedText else {
print("[EPPolicyLabel] No attributed text")
return
}
let text = attributedText.string
let userAgreementText = YMLocalizedString("XPLoginViewController7")
let privacyPolicyText = YMLocalizedString("XPLoginViewController9")
print("[EPPolicyLabel] Tap detected, text: \(text)")
let layoutManager = NSLayoutManager()
let textContainer = NSTextContainer(size: bounds.size)
let textStorage = NSTextStorage(attributedString: attributedText ?? NSAttributedString())
let textStorage = NSTextStorage(attributedString: attributedText)
layoutManager.addTextContainer(textContainer)
textStorage.addLayoutManager(layoutManager)
@@ -94,10 +100,14 @@ class EPPolicyLabel: UILabel {
in: textContainer,
fractionOfDistanceBetweenInsertionPoints: nil)
print("[EPPolicyLabel] Character index: \(indexOfCharacter)")
//
if let userRange = text.range(of: userAgreementText) {
let nsRange = NSRange(userRange, in: text)
print("[EPPolicyLabel] User agreement range: \(nsRange)")
if NSLocationInRange(indexOfCharacter, nsRange) {
print("[EPPolicyLabel] User agreement tapped!")
onUserAgreementTapped?()
return
}
@@ -105,11 +115,15 @@ class EPPolicyLabel: UILabel {
if let privacyRange = text.range(of: privacyPolicyText) {
let nsRange = NSRange(privacyRange, in: text)
print("[EPPolicyLabel] Privacy policy range: \(nsRange)")
if NSLocationInRange(indexOfCharacter, nsRange) {
print("[EPPolicyLabel] Privacy policy tapped!")
onPrivacyPolicyTapped?()
return
}
}
print("[EPPolicyLabel] No link tapped")
}
}

View File

@@ -9,6 +9,7 @@
#import "EPMineHeaderView.h"
#import <Masonry/Masonry.h>
#import <SDWebImage/SDWebImage.h>
#import "EPEmotionColorStorage.h"
@interface EPMineHeaderView ()
@@ -39,11 +40,15 @@
//
self.avatarImageView = [[UIImageView alloc] init];
self.avatarImageView.layer.cornerRadius = 60;
self.avatarImageView.layer.masksToBounds = YES;
self.avatarImageView.layer.masksToBounds = NO; // NO
self.avatarImageView.layer.borderWidth = 3;
self.avatarImageView.layer.borderColor = [UIColor whiteColor].CGColor;
self.avatarImageView.backgroundColor = [UIColor whiteColor];
self.avatarImageView.contentMode = UIViewContentModeScaleAspectFill;
// clipsToBounds
self.avatarImageView.clipsToBounds = YES;
[self addSubview:self.avatarImageView];
[self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) {
@@ -111,6 +116,53 @@
// 使
self.avatarImageView.image = [UIImage imageNamed:@"default_avatar"];
}
//
[self applyUserSignatureColor];
}
///
- (void)applyUserSignatureColor {
NSString *signatureColor = [EPEmotionColorStorage userSignatureColor];
if (signatureColor) {
// 使
UIColor *color = [self colorFromHex:signatureColor];
//
self.avatarImageView.layer.borderColor = color.CGColor;
self.avatarImageView.layer.borderWidth = 4; //
// 使
self.avatarImageView.layer.shadowColor = color.CGColor;
self.avatarImageView.layer.shadowOffset = CGSizeMake(0, 4);
self.avatarImageView.layer.shadowOpacity = 0.6;
self.avatarImageView.layer.shadowRadius = 12;
NSLog(@"[EPMineHeaderView] 应用专属颜色: %@", signatureColor);
} else {
// 使
self.avatarImageView.layer.borderColor = [UIColor whiteColor].CGColor;
self.avatarImageView.layer.borderWidth = 3;
//
self.avatarImageView.layer.shadowColor = [UIColor blackColor].CGColor;
self.avatarImageView.layer.shadowOffset = CGSizeMake(0, 2);
self.avatarImageView.layer.shadowOpacity = 0.2;
self.avatarImageView.layer.shadowRadius = 8;
}
}
/// Hex UIColor
- (UIColor *)colorFromHex:(NSString *)hexString {
unsigned rgbValue = 0;
NSScanner *scanner = [NSScanner scannerWithString:hexString];
[scanner setScanLocation:1]; // #
[scanner scanHexInt:&rgbValue];
return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0
green:((rgbValue & 0xFF00) >> 8)/255.0
blue:(rgbValue & 0xFF)/255.0
alpha:1.0];
}
- (void)settingsButtonTapped {

View File

@@ -47,6 +47,19 @@ NSString *const EPMomentPublishSuccessNotification = @"EPMomentPublishSuccessNot
[super viewDidLoad];
self.view.backgroundColor = [UIColor colorWithRed:0x0C/255.0 green:0x05/255.0 blue:0x27/255.0 alpha:1.0];
[self setupUI];
//
[self loadUserSignatureColor];
}
///
- (void)loadUserSignatureColor {
NSString *signatureColor = [EPEmotionColorStorage userSignatureColor];
if (signatureColor) {
self.selectedEmotionColor = signatureColor;
[self updateEmotionButtonAppearance];
NSLog(@"[Publish] 自动选中专属颜色: %@", signatureColor);
}
}
- (void)setupUI {
@@ -131,6 +144,10 @@ NSString *const EPMomentPublishSuccessNotification = @"EPMomentPublishSuccessNot
- (void)onEmotionButtonTapped {
EPEmotionColorPicker *picker = [[EPEmotionColorPicker alloc] init];
//
picker.preselectedColor = self.selectedEmotionColor;
__weak typeof(self) weakSelf = self;
picker.onColorSelected = ^(NSString *hexColor) {
__strong typeof(weakSelf) self = weakSelf;
@@ -316,7 +333,15 @@ NSString *const EPMomentPublishSuccessNotification = @"EPMomentPublishSuccessNot
- (UIView *)navView { if (!_navView) { _navView = [UIView new]; _navView.backgroundColor = [UIColor clearColor]; } return _navView; }
- (UIButton *)backButton { if (!_backButton) { _backButton = [UIButton buttonWithType:UIButtonTypeCustom]; [_backButton setImage:[UIImage imageNamed:@"common_nav_back"] forState:UIControlStateNormal]; [_backButton addTarget:self action:@selector(onBack) forControlEvents:UIControlEventTouchUpInside]; } return _backButton; }
- (UILabel *)titleLabel { if (!_titleLabel) { _titleLabel = [UILabel new]; _titleLabel.text = @"图文发布"; _titleLabel.textColor = [DJDKMIMOMColor mainTextColor]; _titleLabel.font = [UIFont systemFontOfSize:17]; } return _titleLabel; }
- (UILabel *)titleLabel {
if (!_titleLabel) {
_titleLabel = [UILabel new];
_titleLabel.text = @"图文发布";
_titleLabel.textColor = [UIColor whiteColor]; //
_titleLabel.font = [UIFont systemFontOfSize:17];
}
return _titleLabel;
}
- (UIButton *)publishButton {
if (!_publishButton) {
_publishButton = [UIButton buttonWithType:UIButtonTypeCustom];
@@ -338,18 +363,39 @@ NSString *const EPMomentPublishSuccessNotification = @"EPMomentPublishSuccessNot
return _publishButton;
}
- (UIView *)contentView { if (!_contentView) { _contentView = [UIView new]; _contentView.backgroundColor = [UIColor clearColor]; } return _contentView; }
- (SZTextView *)textView { if (!_textView) { _textView = [SZTextView new]; _textView.placeholder = @"Enter Content"; _textView.textColor = [DJDKMIMOMColor mainTextColor]; _textView.placeholderTextColor = [DJDKMIMOMColor secondTextColor]; _textView.font = [UIFont systemFontOfSize:15]; _textView.delegate = self; } return _textView; }
- (UILabel *)limitLabel { if (!_limitLabel) { _limitLabel = [UILabel new]; _limitLabel.text = @"0/500"; _limitLabel.textColor = [DJDKMIMOMColor mainTextColor]; _limitLabel.font = [UIFont systemFontOfSize:12]; } return _limitLabel; }
- (SZTextView *)textView {
if (!_textView) {
_textView = [SZTextView new];
_textView.placeholder = @"Enter Content";
_textView.textColor = [UIColor whiteColor]; //
_textView.placeholderTextColor = [[UIColor whiteColor] colorWithAlphaComponent:0.4]; //
_textView.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.08]; //
_textView.layer.cornerRadius = 12;
_textView.layer.masksToBounds = YES;
_textView.font = [UIFont systemFontOfSize:15];
_textView.delegate = self;
}
return _textView;
}
- (UILabel *)limitLabel {
if (!_limitLabel) {
_limitLabel = [UILabel new];
_limitLabel.text = @"0/500";
_limitLabel.textColor = [[UIColor whiteColor] colorWithAlphaComponent:0.6]; //
_limitLabel.font = [UIFont systemFontOfSize:12];
}
return _limitLabel;
}
- (UIView *)lineView { if (!_lineView) { _lineView = [UIView new]; _lineView.backgroundColor = [DJDKMIMOMColor dividerColor]; } return _lineView; }
- (UIButton *)emotionButton {
if (!_emotionButton) {
_emotionButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_emotionButton setTitle:@"🎨 Add Emotion" forState:UIControlStateNormal];
[_emotionButton setTitleColor:[DJDKMIMOMColor mainTextColor] forState:UIControlStateNormal];
[_emotionButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; //
_emotionButton.titleLabel.font = [UIFont systemFontOfSize:15];
_emotionButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
_emotionButton.contentEdgeInsets = UIEdgeInsetsMake(0, 15, 0, 0);
_emotionButton.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.06];
_emotionButton.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.08]; //
_emotionButton.layer.cornerRadius = 8;
_emotionButton.layer.masksToBounds = YES;
[_emotionButton addTarget:self action:@selector(onEmotionButtonTapped) forControlEvents:UIControlEventTouchUpInside];

View File

@@ -33,7 +33,12 @@
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"动态";
self.title = @"Enjoy your Life Time";
// title
[self.navigationController.navigationBar setTitleTextAttributes:@{
NSForegroundColorAttributeName: [UIColor whiteColor]
}];
[self setupUI];
[self.listView reloadFirstPage];
@@ -77,7 +82,12 @@
}];
//
UIBarButtonItem *publishItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(onPublishButtonTapped)];
UIImage *addIcon = [UIImage imageNamed:@"icon_moment_add"];
UIButton *publishButton = [UIButton buttonWithType:UIButtonTypeCustom];
[publishButton setImage:addIcon forState:UIControlStateNormal];
publishButton.frame = CGRectMake(0, 0, 40, 50);
[publishButton addTarget:self action:@selector(onPublishButtonTapped) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *publishItem = [[UIBarButtonItem alloc] initWithCustomView:publishButton];
self.navigationItem.rightBarButtonItem = publishItem;
NSLog(@"[EPMomentViewController] UI 设置完成");

View File

@@ -33,6 +33,20 @@ NS_ASSUME_NONNULL_BEGIN
/// 获取随机情绪颜色(不持久化)
+ (NSString *)randomEmotionColor;
#pragma mark - User Signature Color
/// 保存用户专属颜色
+ (void)saveUserSignatureColor:(NSString *)hexColor;
/// 获取用户专属颜色
+ (nullable NSString *)userSignatureColor;
/// 是否已设置专属颜色
+ (BOOL)hasUserSignatureColor;
/// 清除专属颜色(调试用)
+ (void)clearUserSignatureColor;
@end
NS_ASSUME_NONNULL_END

View File

@@ -8,6 +8,8 @@
#import "EPEmotionColorStorage.h"
static NSString *const kEmotionColorStorageKey = @"EP_Emotion_Colors";
static NSString *const kUserSignatureColorKey = @"EP_User_Signature_Color";
static NSString *const kUserSignatureTimestampKey = @"EP_User_Signature_Timestamp";
@implementation EPEmotionColorStorage
@@ -66,5 +68,34 @@ static NSString *const kEmotionColorStorageKey = @"EP_Emotion_Colors";
return dict ?: @{};
}
#pragma mark - User Signature Color
+ (void)saveUserSignatureColor:(NSString *)hexColor {
if (!hexColor) return;
[[NSUserDefaults standardUserDefaults] setObject:hexColor forKey:kUserSignatureColorKey];
[[NSUserDefaults standardUserDefaults] setObject:@([[NSDate date] timeIntervalSince1970])
forKey:kUserSignatureTimestampKey];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"[EPEmotionColorStorage] 保存用户专属颜色: %@", hexColor);
}
+ (NSString *)userSignatureColor {
return [[NSUserDefaults standardUserDefaults] stringForKey:kUserSignatureColorKey];
}
+ (BOOL)hasUserSignatureColor {
return [self userSignatureColor] != nil;
}
+ (void)clearUserSignatureColor {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kUserSignatureColorKey];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kUserSignatureTimestampKey];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"[EPEmotionColorStorage] 清除用户专属颜色");
}
@end

View File

@@ -15,6 +15,9 @@ NS_ASSUME_NONNULL_BEGIN
/// 颜色选择回调
@property (nonatomic, copy) void(^onColorSelected)(NSString *hexColor);
/// 预选中的颜色(用于标记默认选中状态)
@property (nonatomic, copy) NSString *preselectedColor;
/// 在指定视图中显示选择器
/// @param parentView 父视图(通常是 ViewController 的 view
- (void)showInView:(UIView *)parentView;

View File

@@ -6,7 +6,7 @@
//
#import "EPEmotionColorPicker.h"
#import "EPEmotionColorStorage.h"
#import "EPEmotionColorWheelView.h"
#import <Masonry/Masonry.h>
@interface EPEmotionColorPicker ()
@@ -14,8 +14,7 @@
@property (nonatomic, strong) UIView *backgroundMask;
@property (nonatomic, strong) UIView *containerView;
@property (nonatomic, strong) UILabel *titleLabel;
@property (nonatomic, strong) UIView *colorWheelContainer;
@property (nonatomic, strong) NSMutableArray<UIButton *> *colorButtons;
@property (nonatomic, strong) EPEmotionColorWheelView *colorWheelView;
@end
@@ -53,91 +52,17 @@
make.centerX.equalTo(self.containerView);
}];
//
[self.containerView addSubview:self.colorWheelContainer];
[self.colorWheelContainer mas_makeConstraints:^(MASConstraintMaker *make) {
// 使
[self.containerView addSubview:self.colorWheelView];
[self.colorWheelView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.containerView);
make.top.equalTo(self.titleLabel.mas_bottom).offset(30);
make.size.mas_equalTo(CGSizeMake(240, 240));
}];
//
[self createColorButtons];
}
- (void)createColorButtons {
NSArray<NSString *> *colors = [EPEmotionColorStorage allEmotionColors];
NSArray<NSString *> *emotions = @[@"Joy", @"Sadness", @"Anger", @"Fear", @"Surprise", @"Disgust", @"Trust", @"Anticipation"];
CGFloat radius = 80.0; //
CGFloat buttonSize = 50.0; //
CGFloat angleStep = M_PI * 2.0 / colors.count;
CGFloat centerX = 120.0; // X
CGFloat centerY = 120.0; // Y
for (NSInteger i = 0; i < colors.count; i++) {
//
CGFloat angle = angleStep * i - M_PI_2;
CGFloat x = centerX + radius * cos(angle) - buttonSize / 2.0;
CGFloat y = centerY + radius * sin(angle) - buttonSize / 2.0;
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(x, y, buttonSize, buttonSize);
button.backgroundColor = [self colorFromHex:colors[i]];
button.layer.cornerRadius = buttonSize / 2.0;
button.layer.masksToBounds = YES;
button.layer.borderWidth = 3.0;
button.layer.borderColor = [UIColor whiteColor].CGColor;
button.tag = i;
[button addTarget:self action:@selector(onColorButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
//
button.layer.shadowColor = [self colorFromHex:colors[i]].CGColor;
button.layer.shadowOffset = CGSizeMake(0, 2);
button.layer.shadowOpacity = 0.6;
button.layer.shadowRadius = 8;
button.layer.masksToBounds = NO;
//
UILabel *emotionLabel = [[UILabel alloc] init];
emotionLabel.text = emotions[i];
emotionLabel.textColor = [UIColor whiteColor];
emotionLabel.font = [UIFont systemFontOfSize:10 weight:UIFontWeightMedium];
emotionLabel.textAlignment = NSTextAlignmentCenter;
emotionLabel.frame = CGRectMake(0, buttonSize - 2, buttonSize, 12);
emotionLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
emotionLabel.layer.cornerRadius = 6;
emotionLabel.layer.masksToBounds = YES;
[button addSubview:emotionLabel];
[self.colorWheelContainer addSubview:button];
[self.colorButtons addObject:button];
}
}
#pragma mark - Actions
- (void)onColorButtonTapped:(UIButton *)sender {
NSInteger index = sender.tag;
NSArray<NSString *> *colors = [EPEmotionColorStorage allEmotionColors];
NSString *selectedColor = colors[index];
//
[UIView animateWithDuration:0.1 animations:^{
sender.transform = CGAffineTransformMakeScale(0.9, 0.9);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.1 animations:^{
sender.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
//
if (self.onColorSelected) {
self.onColorSelected(selectedColor);
}
[self dismiss];
}];
}];
}
- (void)onBackgroundTapped {
[self dismiss];
}
@@ -170,19 +95,6 @@
}];
}
#pragma mark - Utilities
- (UIColor *)colorFromHex:(NSString *)hexString {
unsigned rgbValue = 0;
NSScanner *scanner = [NSScanner scannerWithString:hexString];
[scanner setScanLocation:1]; // #
[scanner scanHexInt:&rgbValue];
return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0
green:((rgbValue & 0xFF00) >> 8)/255.0
blue:(rgbValue & 0xFF)/255.0
alpha:1.0];
}
#pragma mark - Lazy Loading
- (UIView *)backgroundMask {
@@ -217,19 +129,27 @@
return _titleLabel;
}
- (UIView *)colorWheelContainer {
if (!_colorWheelContainer) {
_colorWheelContainer = [[UIView alloc] init];
_colorWheelContainer.backgroundColor = [UIColor clearColor];
- (EPEmotionColorWheelView *)colorWheelView {
if (!_colorWheelView) {
_colorWheelView = [[EPEmotionColorWheelView alloc] init];
_colorWheelView.radius = 80.0;
_colorWheelView.buttonSize = 50.0;
_colorWheelView.preselectedColor = self.preselectedColor;
__weak typeof(self) weakSelf = self;
_colorWheelView.onColorTapped = ^(NSString *hexColor, NSInteger index) {
__strong typeof(weakSelf) self = weakSelf;
//
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if (self.onColorSelected) {
self.onColorSelected(hexColor);
}
[self dismiss];
});
};
}
return _colorWheelContainer;
}
- (NSMutableArray<UIButton *> *)colorButtons {
if (!_colorButtons) {
_colorButtons = [NSMutableArray array];
}
return _colorButtons;
return _colorWheelView;
}
@end

View File

@@ -0,0 +1,42 @@
//
// EPEmotionColorWheelView.h
// YuMi
//
// Created by AI on 2025-10-15.
// 共享情绪色轮组件 - 纯渲染逻辑,不包含容器和外部交互
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface EPEmotionColorWheelView : UIView
#pragma mark - Configuration
/// 圆周半径(默认 80pt
@property (nonatomic, assign) CGFloat radius;
/// 按钮直径(默认 50pt
@property (nonatomic, assign) CGFloat buttonSize;
/// 预选中的颜色Hex 格式,如 #FFD700
@property (nonatomic, copy, nullable) NSString *preselectedColor;
#pragma mark - Callbacks
/// 颜色点击回调
/// @param hexColor 选中的颜色值
/// @param index 颜色索引 (0-7)
@property (nonatomic, copy) void(^onColorTapped)(NSString *hexColor, NSInteger index);
#pragma mark - Methods
/// 刷新色轮(支持动态更新预选中颜色)
/// @param color 新的预选中颜色
- (void)reloadWithPreselectedColor:(nullable NSString *)color;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,148 @@
//
// EPEmotionColorWheelView.m
// YuMi
//
// Created by AI on 2025-10-15.
//
#import "EPEmotionColorWheelView.h"
#import "EPEmotionColorStorage.h"
@interface EPEmotionColorWheelView ()
@property (nonatomic, strong) NSMutableArray<UIButton *> *colorButtons;
@end
@implementation EPEmotionColorWheelView
#pragma mark - Lifecycle
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
//
_radius = 80.0;
_buttonSize = 50.0;
_colorButtons = [NSMutableArray array];
self.backgroundColor = [UIColor clearColor];
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
//
if (self.colorButtons.count == 0) {
[self createColorButtons];
}
}
#pragma mark - Public Methods
- (void)reloadWithPreselectedColor:(NSString *)color {
self.preselectedColor = color;
//
for (UIButton *btn in self.colorButtons) {
[btn removeFromSuperview];
}
[self.colorButtons removeAllObjects];
//
[self createColorButtons];
}
#pragma mark - Private Methods
- (void)createColorButtons {
NSArray<NSString *> *colors = [EPEmotionColorStorage allEmotionColors];
NSArray<NSString *> *emotions = @[@"Joy", @"Sadness", @"Anger", @"Fear", @"Surprise", @"Disgust", @"Trust", @"Anticipation"];
CGFloat angleStep = M_PI * 2.0 / colors.count;
CGFloat centerX = CGRectGetWidth(self.bounds) / 2.0;
CGFloat centerY = CGRectGetHeight(self.bounds) / 2.0;
for (NSInteger i = 0; i < colors.count; i++) {
//
CGFloat angle = angleStep * i - M_PI_2;
CGFloat x = centerX + self.radius * cos(angle) - self.buttonSize / 2.0;
CGFloat y = centerY + self.radius * sin(angle) - self.buttonSize / 2.0;
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(x, y, self.buttonSize, self.buttonSize);
button.backgroundColor = [self colorFromHex:colors[i]];
button.layer.cornerRadius = self.buttonSize / 2.0;
button.layer.masksToBounds = YES;
button.layer.borderWidth = 3.0;
button.layer.borderColor = [UIColor whiteColor].CGColor;
button.tag = i;
[button addTarget:self action:@selector(onButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
//
if (self.preselectedColor && [colors[i] isEqualToString:self.preselectedColor]) {
button.layer.borderWidth = 5.0; //
button.transform = CGAffineTransformMakeScale(1.1, 1.1); //
}
//
button.layer.shadowColor = [self colorFromHex:colors[i]].CGColor;
button.layer.shadowOffset = CGSizeMake(0, 2);
button.layer.shadowOpacity = 0.6;
button.layer.shadowRadius = 8;
button.layer.masksToBounds = NO;
[self addSubview:button];
[self.colorButtons addObject:button];
//
UILabel *emotionLabel = [[UILabel alloc] init];
emotionLabel.text = emotions[i];
emotionLabel.textColor = [UIColor whiteColor];
emotionLabel.font = [UIFont systemFontOfSize:9 weight:UIFontWeightMedium];
emotionLabel.textAlignment = NSTextAlignmentCenter;
emotionLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.7];
emotionLabel.layer.cornerRadius = 8;
emotionLabel.layer.masksToBounds = YES;
//
CGSize textSize = [emotions[i] sizeWithAttributes:@{NSFontAttributeName: emotionLabel.font}];
CGFloat labelWidth = MAX(textSize.width + 12, 50); // 50pt 6pt
CGFloat labelHeight = 18;
// 8pt
CGFloat labelX = x + (self.buttonSize - labelWidth) / 2.0;
CGFloat labelY = y + self.buttonSize + 8;
emotionLabel.frame = CGRectMake(labelX, labelY, labelWidth, labelHeight);
[self addSubview:emotionLabel];
}
}
- (void)onButtonTapped:(UIButton *)sender {
NSInteger index = sender.tag;
NSArray<NSString *> *colors = [EPEmotionColorStorage allEmotionColors];
NSString *selectedColor = colors[index];
//
if (self.onColorTapped) {
self.onColorTapped(selectedColor, index);
}
}
#pragma mark - Utilities
- (UIColor *)colorFromHex:(NSString *)hexString {
unsigned rgbValue = 0;
NSScanner *scanner = [NSScanner scannerWithString:hexString];
[scanner setScanLocation:1]; // #
[scanner scanHexInt:&rgbValue];
return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0
green:((rgbValue & 0xFF00) >> 8)/255.0
blue:(rgbValue & 0xFF)/255.0
alpha:1.0];
}
@end

View File

@@ -21,6 +21,9 @@
///
@property (nonatomic, strong) UIView *cardView;
///
@property (nonatomic, strong) UIVisualEffectView *blurEffectView;
///
@property (nonatomic, strong) NetImageView *avatarImageView;
@@ -80,8 +83,14 @@
make.bottom.equalTo(self.contentView).offset(-8);
}];
//
[self.cardView addSubview:self.avatarImageView];
//
[self.cardView addSubview:self.blurEffectView];
[self.blurEffectView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.cardView);
}];
// - blurEffectView.contentView
[self.blurEffectView.contentView addSubview:self.avatarImageView];
[self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(self.cardView).offset(15);
make.top.equalTo(self.cardView).offset(15);
@@ -89,7 +98,7 @@
}];
//
[self.cardView addSubview:self.nameLabel];
[self.blurEffectView.contentView addSubview:self.nameLabel];
[self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(self.avatarImageView.mas_trailing).offset(10);
make.top.equalTo(self.avatarImageView);
@@ -97,7 +106,7 @@
}];
//
[self.cardView addSubview:self.timeLabel];
[self.blurEffectView.contentView addSubview:self.timeLabel];
[self.timeLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(self.nameLabel);
make.bottom.equalTo(self.avatarImageView);
@@ -105,14 +114,14 @@
}];
//
[self.cardView addSubview:self.contentLabel];
[self.blurEffectView.contentView addSubview:self.contentLabel];
[self.contentLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.equalTo(self.cardView).inset(15);
make.top.equalTo(self.avatarImageView.mas_bottom).offset(12);
}];
//
[self.cardView addSubview:self.imagesContainer];
[self.blurEffectView.contentView addSubview:self.imagesContainer];
[self.imagesContainer mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.equalTo(self.cardView).inset(15);
make.top.equalTo(self.contentLabel.mas_bottom).offset(12);
@@ -120,7 +129,7 @@
}];
//
[self.cardView addSubview:self.actionBar];
[self.blurEffectView.contentView addSubview:self.actionBar];
[self.actionBar mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.equalTo(self.cardView);
make.top.equalTo(self.imagesContainer.mas_bottom).offset(12);
@@ -132,7 +141,7 @@
//
[self.actionBar addSubview:self.likeButton];
[self.likeButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(self.actionBar).offset(15);
make.leading.equalTo(self.actionBar);
make.centerY.equalTo(self.actionBar);
make.width.mas_greaterThanOrEqualTo(80);
}];
@@ -146,8 +155,8 @@
//
self.nameLabel.text = model.nick ?: @"匿名用户";
//
self.timeLabel.text = model.publishTime;
// MM/dd
self.timeLabel.text = [self formatTimestampToDate:model.publishTime];
//
self.contentLabel.text = model.content ?: @"";
@@ -264,6 +273,26 @@
}];
}
/// MM/dd
- (NSString *)formatTimestampToDate:(NSString *)timestampString {
if (!timestampString || timestampString.length == 0) {
return @"";
}
//
NSTimeInterval timestamp = [timestampString doubleValue] / 1000.0;
if (timestamp <= 0) {
return @"";
}
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"MM/dd";
return [formatter stringFromDate:date];
}
///
- (NSString *)formatTimeInterval:(NSInteger)timestamp {
if (timestamp <= 0) return @"刚刚";
@@ -315,11 +344,13 @@
long worldId = self.currentModel.worldId;
// 使 Swift API Helper
@kWeakify(self);
[self.apiHelper likeMomentWithDynamicId:dynamicId
isLike:isLike
likedUid:likedUid
worldId:worldId
completion:^{
@kStrongify(self);
//
self.currentModel.isLike = isLike;
NSInteger likeCount = [self.currentModel.likeCount integerValue];
@@ -384,7 +415,7 @@
- (UIView *)cardView {
if (!_cardView) {
_cardView = [[UIView alloc] init];
_cardView.backgroundColor = [UIColor whiteColor];
_cardView.backgroundColor = [UIColor clearColor]; // blurEffectView
_cardView.layer.cornerRadius = 12; //
// Shadow Border applyEmotionColorEffect
_cardView.layer.masksToBounds = NO;
@@ -392,6 +423,16 @@
return _cardView;
}
- (UIVisualEffectView *)blurEffectView {
if (!_blurEffectView) {
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
_blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
_blurEffectView.layer.cornerRadius = 12;
_blurEffectView.layer.masksToBounds = YES;
}
return _blurEffectView;
}
- (UIImageView *)avatarImageView {
if (!_avatarImageView) {
NetImageConfig *config = [[NetImageConfig alloc] init];
@@ -410,7 +451,7 @@
if (!_nameLabel) {
_nameLabel = [[UILabel alloc] init];
_nameLabel.font = [UIFont systemFontOfSize:15 weight:UIFontWeightMedium];
_nameLabel.textColor = [UIColor colorWithWhite:0.2 alpha:1.0];
_nameLabel.textColor = [UIColor whiteColor];
}
return _nameLabel;
}
@@ -428,7 +469,7 @@
if (!_contentLabel) {
_contentLabel = [[UILabel alloc] init];
_contentLabel.font = [UIFont systemFontOfSize:15];
_contentLabel.textColor = [UIColor colorWithWhite:0.3 alpha:1.0];
_contentLabel.textColor = [UIColor whiteColor];
_contentLabel.numberOfLines = 0;
_contentLabel.lineBreakMode = NSLineBreakByWordWrapping;
}
@@ -438,7 +479,7 @@
- (UIView *)actionBar {
if (!_actionBar) {
_actionBar = [[UIView alloc] init];
_actionBar.backgroundColor = [UIColor colorWithWhite:0.98 alpha:1.0];
_actionBar.backgroundColor = [UIColor clearColor]; //
}
return _actionBar;
}
@@ -450,8 +491,8 @@
[_likeButton setImage:[UIImage imageNamed:@"monents_info_like_count_select"] forState:UIControlStateSelected];
[_likeButton setTitle:@" 0" forState:UIControlStateNormal];
_likeButton.titleLabel.font = [UIFont systemFontOfSize:13];
[_likeButton setTitleColor:[UIColor colorWithWhite:0.5 alpha:1.0] forState:UIControlStateNormal];
[_likeButton setTitleColor:[UIColor colorWithWhite:0.5 alpha:1.0] forState:UIControlStateSelected];
[_likeButton setTitleColor:[UIColor colorWithWhite:0.6 alpha:1.0] forState:UIControlStateNormal];
[_likeButton setTitleColor:[UIColor colorWithWhite:0.6 alpha:1.0] forState:UIControlStateSelected];
[_likeButton addTarget:self action:@selector(onLikeButtonTapped) forControlEvents:UIControlEventTouchUpInside];
}
return _likeButton;

View File

@@ -0,0 +1,36 @@
//
// EPSignatureColorGuideView.h
// YuMi
//
// Created by AI on 2025-10-15.
// 用户专属情绪颜色首次引导页
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface EPSignatureColorGuideView : UIView
/// 颜色确认回调
@property (nonatomic, copy) void(^onColorConfirmed)(NSString *hexColor);
/// Skip 按钮点击回调(仅 debug 模式且已有颜色时显示)
@property (nonatomic, copy) void(^onSkipTapped)(void);
/// 在 window 中显示引导页(全屏模态)
/// @param window 应用主 window
- (void)showInWindow:(UIWindow *)window;
/// 在 window 中显示引导页(带 Skip 按钮)
/// @param window 应用主 window
/// @param showSkip 是否显示 Skip 按钮(用于 debug 模式)
- (void)showInWindow:(UIWindow *)window showSkipButton:(BOOL)showSkip;
/// 关闭引导页
- (void)dismiss;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,260 @@
//
// EPSignatureColorGuideView.m
// YuMi
//
// Created by AI on 2025-10-15.
//
#import "EPSignatureColorGuideView.h"
#import "EPEmotionColorWheelView.h"
#import <Masonry/Masonry.h>
@interface EPSignatureColorGuideView ()
@property (nonatomic, strong) CAGradientLayer *gradientLayer;
@property (nonatomic, strong) UIView *contentContainer;
@property (nonatomic, strong) UILabel *titleLabel;
@property (nonatomic, strong) UILabel *subtitleLabel;
@property (nonatomic, strong) EPEmotionColorWheelView *colorWheelView;
@property (nonatomic, strong) UIButton *confirmButton;
@property (nonatomic, strong) UIButton *skipButton;
@property (nonatomic, copy) NSString *selectedColor; //
@end
@implementation EPSignatureColorGuideView
#pragma mark - Lifecycle
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
[self setupUI];
}
return self;
}
- (void)setupUI {
//
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.colors = @[
(id)[UIColor colorWithRed:0x1a/255.0 green:0x09/255.0 blue:0x33/255.0 alpha:1.0].CGColor,
(id)[UIColor colorWithRed:0x0d/255.0 green:0x1b/255.0 blue:0x2a/255.0 alpha:1.0].CGColor
];
gradientLayer.startPoint = CGPointMake(0.5, 0);
gradientLayer.endPoint = CGPointMake(0.5, 1);
[self.layer insertSublayer:gradientLayer atIndex:0];
self.gradientLayer = gradientLayer;
//
[self addSubview:self.contentContainer];
[self.contentContainer mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self);
make.leading.trailing.equalTo(self).inset(30);
}];
//
[self.contentContainer addSubview:self.titleLabel];
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.contentContainer);
make.centerX.equalTo(self.contentContainer);
}];
//
[self.contentContainer addSubview:self.subtitleLabel];
[self.subtitleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.titleLabel.mas_bottom).offset(12);
make.centerX.equalTo(self.contentContainer);
make.leading.trailing.equalTo(self.contentContainer).inset(20);
}];
// 使
[self.contentContainer addSubview:self.colorWheelView];
[self.colorWheelView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.subtitleLabel.mas_bottom).offset(50);
make.centerX.equalTo(self.contentContainer);
make.size.mas_equalTo(CGSizeMake(280, 280));
}];
//
[self.contentContainer addSubview:self.confirmButton];
[self.confirmButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.colorWheelView.mas_bottom).offset(50);
make.leading.trailing.equalTo(self.contentContainer).inset(20);
make.height.mas_equalTo(56);
make.bottom.equalTo(self.contentContainer);
}];
// Skip
[self addSubview:self.skipButton];
[self.skipButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self).offset(60);
make.trailing.equalTo(self).offset(-20);
make.size.mas_equalTo(CGSizeMake(60, 36));
}];
}
- (void)layoutSubviews {
[super layoutSubviews];
// frame
self.gradientLayer.frame = self.bounds;
}
#pragma mark - Actions
- (void)onConfirmButtonTapped {
if (!self.selectedColor) return;
//
if (self.onColorConfirmed) {
self.onColorConfirmed(self.selectedColor);
}
//
[self dismiss];
}
- (void)onSkipButtonTapped {
// skip
if (self.onSkipTapped) {
self.onSkipTapped();
}
//
[self dismiss];
}
#pragma mark - Public Methods
- (void)showInWindow:(UIWindow *)window {
[self showInWindow:window showSkipButton:NO];
}
- (void)showInWindow:(UIWindow *)window showSkipButton:(BOOL)showSkip {
[window addSubview:self];
[self mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(window);
}];
// Skip
self.skipButton.hidden = !showSkip;
//
self.alpha = 0;
self.contentContainer.transform = CGAffineTransformMakeScale(0.8, 0.8);
//
[UIView animateWithDuration:0.4 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
self.alpha = 1.0;
self.contentContainer.transform = CGAffineTransformIdentity;
} completion:nil];
}
- (void)dismiss {
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
self.alpha = 0;
self.contentContainer.transform = CGAffineTransformMakeScale(0.95, 0.95);
} completion:^(BOOL finished) {
[self removeFromSuperview];
}];
}
#pragma mark - Lazy Loading
- (UIView *)contentContainer {
if (!_contentContainer) {
_contentContainer = [[UIView alloc] init];
_contentContainer.backgroundColor = [UIColor clearColor];
}
return _contentContainer;
}
- (UILabel *)titleLabel {
if (!_titleLabel) {
_titleLabel = [[UILabel alloc] init];
_titleLabel.text = @"Choose your signature emotion";
_titleLabel.textColor = [UIColor whiteColor];
_titleLabel.font = [UIFont systemFontOfSize:24 weight:UIFontWeightBold];
_titleLabel.textAlignment = NSTextAlignmentCenter;
}
return _titleLabel;
}
- (UILabel *)subtitleLabel {
if (!_subtitleLabel) {
_subtitleLabel = [[UILabel alloc] init];
_subtitleLabel.text = @"This color represents your emotional identity";
_subtitleLabel.textColor = [[UIColor whiteColor] colorWithAlphaComponent:0.7];
_subtitleLabel.font = [UIFont systemFontOfSize:14];
_subtitleLabel.textAlignment = NSTextAlignmentCenter;
_subtitleLabel.numberOfLines = 0;
}
return _subtitleLabel;
}
- (EPEmotionColorWheelView *)colorWheelView {
if (!_colorWheelView) {
_colorWheelView = [[EPEmotionColorWheelView alloc] init];
_colorWheelView.radius = 100.0;
_colorWheelView.buttonSize = 54.0;
__weak typeof(self) weakSelf = self;
_colorWheelView.onColorTapped = ^(NSString *hexColor, NSInteger index) {
__strong typeof(weakSelf) self = weakSelf;
//
self.selectedColor = hexColor;
//
self.confirmButton.enabled = YES;
self.confirmButton.alpha = 1.0;
};
}
return _colorWheelView;
}
- (UIButton *)confirmButton {
if (!_confirmButton) {
_confirmButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_confirmButton setTitle:@"Confirm & Continue" forState:UIControlStateNormal];
[_confirmButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
_confirmButton.titleLabel.font = [UIFont systemFontOfSize:18 weight:UIFontWeightSemibold];
_confirmButton.layer.cornerRadius = 28;
_confirmButton.layer.masksToBounds = YES;
//
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.colors = @[
(id)[UIColor colorWithRed:0x9B/255.0 green:0x59/255.0 blue:0xB6/255.0 alpha:1.0].CGColor,
(id)[UIColor colorWithRed:0x6C/255.0 green:0x34/255.0 blue:0x83/255.0 alpha:1.0].CGColor
];
gradient.startPoint = CGPointMake(0, 0);
gradient.endPoint = CGPointMake(1, 0);
gradient.frame = CGRectMake(0, 0, 1000, 56); //
[_confirmButton.layer insertSublayer:gradient atIndex:0];
[_confirmButton addTarget:self action:@selector(onConfirmButtonTapped) forControlEvents:UIControlEventTouchUpInside];
//
_confirmButton.enabled = NO;
_confirmButton.alpha = 0.5;
}
return _confirmButton;
}
- (UIButton *)skipButton {
if (!_skipButton) {
_skipButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_skipButton setTitle:@"Skip" forState:UIControlStateNormal];
[_skipButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
_skipButton.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium];
_skipButton.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.2];
_skipButton.layer.cornerRadius = 18;
_skipButton.layer.masksToBounds = YES;
[_skipButton addTarget:self action:@selector(onSkipButtonTapped) forControlEvents:UIControlEventTouchUpInside];
_skipButton.hidden = YES; //
}
return _skipButton;
}
@end

View File

@@ -12,7 +12,7 @@
@implementation YUMIHtmlUrl
NSString * const URLWithType(URLType type) {
NSString * prefix = @"molistar";
NSString * prefix = @"eparty";
NSDictionary *newDic = @{
@(kTreasureTicketBuyURL) : @"modules/act-treasureSnatching/index.html",///
@(kTreasureRankListURL) : @"modules/act-treasureSnatching/list.html",///

View File

@@ -57,7 +57,7 @@
<key>FacebookClientToken</key>
<string>189d1a90712cc61cedded4cf1372cb21</string>
<key>FacebookDisplayName</key>
<string>MoliStar</string>
<string>E-Parti</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSApplicationQueriesSchemes</key>
@@ -96,17 +96,17 @@
<true/>
</dict>
<key>NSCameraUsageDescription</key>
<string>“MoliStar”需要您的同意,才可以访问进行拍照并上传您的图片,然后展示在您的个人主页上,便于他人查看</string>
<string>"E-Parti"需要您的同意,才可以访问进行拍照并上传您的图片,然后展示在您的个人主页上,便于他人查看</string>
<key>NSLocalNetworkUsageDescription</key>
<string>此App将可发现和连接到您所用网络上的设备。</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>“MoliStar”需要您的同意,才可以进行定位服务,推荐附近好友</string>
<string>"E-Parti"需要您的同意,才可以进行定位服务,推荐附近好友</string>
<key>NSMicrophoneUsageDescription</key>
<string>“MoliStar”需要您的同意,才可以进行语音聊天</string>
<string>"E-Parti"需要您的同意,才可以进行语音聊天</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>“MoliStar”需要您的同意,才可以存储相片到相册</string>
<string>"E-Parti"需要您的同意,才可以存储相片到相册</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>“MoliStar”需要您的同意,才可以访问相册并选择您需要上传的图片,然后展示在您的个人主页上,便于他人查看</string>
<string>"E-Parti"需要您的同意,才可以访问相册并选择您需要上传的图片,然后展示在您的个人主页上,便于他人查看</string>
<key>NSUserTrackingUsageDescription</key>
<string>請允許我們獲取您的IDFA權限可以為您提供個性化活動和服務。未經您的允許您的信息將不作其他用途。</string>
<key>UIApplicationSupportsIndirectInputEvents</key>

View File

@@ -274,7 +274,7 @@
- (UILabel *)titleLabel {
if (!_titleLabel) {
_titleLabel = [[UILabel alloc] init];
_titleLabel.text = @"Welcome to MoliStar";
_titleLabel.text = @"Welcome to E-Parti";
_titleLabel.font = kFontBold(28);
_titleLabel.textColor = UIColorFromRGB(0x1F1B4F);
}

View File

@@ -934,8 +934,8 @@ NSString * const kJSShowShareCallBack = @"showShareAction";
[_webview evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) {
NSString *userAgent = result;
if (![userAgent containsString:@"molistarAppIos erbanAppIos"]){
NSString *newUserAgent = [userAgent stringByAppendingString:@" molistarAppIos erbanAppIos"];
if (![userAgent containsString:@"epartiAppIos erbanAppIos"]){
NSString *newUserAgent = [userAgent stringByAppendingString:@" epartiAppIos erbanAppIos"];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
[[NSUserDefaults standardUserDefaults] synchronize];

View File

@@ -108,7 +108,7 @@ static __weak UIViewController *_presentingVC = nil;
NSMutableArray *shareItems = [NSMutableArray array];
// 1.
NSString *plainText = [NSString stringWithFormat:@"🎵 发现精彩内容\n\n%@\n\n🔗 %@\n\n—— 来自 MoliStars ——",
NSString *plainText = [NSString stringWithFormat:@"🎵 发现精彩内容\n\n%@\n\n🔗 %@\n\n—— 来自 E-Parti ——",
subtitle, url.absoluteString ?: @""];
[shareItems addObject:plainText];
@@ -219,8 +219,8 @@ static __weak UIViewController *_presentingVC = nil;
// 1.
NSString *title = @"🎵 Apple Music 专辑推荐Imagine Dragons";
NSString *subtitle = @"来自MoliStars的精彩推荐";
NSString *appName = @"MoliStars";
NSString *subtitle = @"来自E-Parti的精彩推荐";
NSString *appName = @"E-Parti";
NSURL *albumURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", API_HOST_URL, urlString]];
UIImage *albumImage = image;

View File

@@ -21,7 +21,7 @@
if (self) {
_title = title ?: @"";
_subtitle = subtitle ?: @"";
_appName = appName ?: @"MoliStar";
_appName = appName ?: @"E-Parti";
_url = url;
_image = image;
_appIcon = appIcon;

View File

@@ -39,7 +39,7 @@
if([isProduction isEqualToString:@"YES"]){
return @"youmi";
}
return @"molistar";
return @"eparti";
#else
return @"youmi";
@@ -122,7 +122,7 @@ static NSString *_from = nil;
+ (NSString *)getAppSource{
if (_from == nil) {
if (isEnterprise == NO) {
_from = ISTestFlight ? PI_Test_Flight : @"molistar_enterprise"; //
_from = ISTestFlight ? PI_Test_Flight : @"eparti_enterprise"; //
}else {
_from = [ClientConfig shareConfig].isTF == YES ? PI_Test_Flight : PI_App_Source; // Test_Flightappstore App Store
}

View File

@@ -23,6 +23,10 @@
#import "EPMomentCell.h"
#import "EPMineHeaderView.h"
// MARK: - Emotion Color System
#import "EPEmotionColorStorage.h"
#import "EPSignatureColorGuideView.h"
// MARK: - QCloud SDK
#import <QCloudCOSXML/QCloudCOSXML.h>
@@ -63,6 +67,7 @@
#import "YUMIHtmlUrl.h" // URLWithType
#import "YUMIConstant.h" // KeyWithType, KeyType_PasswordEncode
#import "DESEncrypt.h" // DES加密工具
#import "HttpRequestHelper.h" // getHostUrl
// MARK: - Login - Models (Phase 2 使用,先添加)
#import "AccountInfoStorage.h"

View File

@@ -689,7 +689,7 @@
"XPLoginPwdViewController4" = "تسجيل الدخول برقم الهاتف";
"XPLoginPwdViewController5" = "نسيت كلمة المرور";
"XPLoginPwdViewController6" = "الرجاء إدخال حساب MoliStar";
"XPLoginPwdViewController6" = "الرجاء إدخال حساب E-Parti";
"XPLoginBindPhoneResultViewController0" = "ربط الهاتف";
"XPLoginBindPhoneResultViewController1" = "رقم الهاتف المرتبط حاليًا هو";
@@ -727,7 +727,7 @@
"XPShareView5" = "فشلت عملية المشاركة";
"XPShareView6" = "إلغاء المشاركة";
"XPShareView7" = "إلغاء";
"XPShareView8" = "تعال إلى MoliStar واكتشف صوتك الخاص";
"XPShareView8" = "تعال إلى E-Parti واكتشف صوتك الخاص";
"XPShareView9" = "التطبيق غير مثبت، فشلت عملية المشاركة";
///XPFirstRechargeViewController.m
@@ -1904,7 +1904,7 @@ ineHeadView12" = "الحمل";
"RoomHeaderView2" = "متصل: %ld ID: %ld";
"RoomHeaderView3" = "نسخ الرابط";
"RoomHeaderView4" = "تعال إلى MoliStar، ولنلعب ونتعارف ونلعب ألعابًا";
"RoomHeaderView4" = "تعال إلى E-Parti، ولنلعب ونتعارف ونلعب ألعابًا";
"RoomHeaderView5" = "شخص جميل وصوت حلو يحقق الانتصارات، هيا لنلعب معًا~";
"RoomHeaderView6" = "تمت الإضافة للمفضلة بنجاح";
"RoomHeaderView7" = "تمت المشاركة بنجاح";
@@ -2883,7 +2883,7 @@ ineHeadView12" = "الحمل";
"XPLoginPwdViewController3" = "من فضلك إدخل الرقم السري";
"XPLoginPwdViewController4" = "تسجيل الدخول باستخدام رقم الهاتف";
"XPLoginPwdViewController5" = "نسيت كلمة المرور";
"XPLoginPwdViewController6" = "الرجاء إدخال حساب MoliStar الخاص بك";
"XPLoginPwdViewController6" = "الرجاء إدخال حساب E-Parti الخاص بك";
"XPLoginBindPhoneResultViewController0" = "ربط الهاتف";
"XPLoginBindPhoneResultViewController1" = "رقم الهاتف المرتبط بك حاليًا هو";
@@ -3623,7 +3623,7 @@ ineHeadView12" = "الحمل";
"PIMessageContentServiceReplyView0"="كيفية الشحن:";
"PIMessageContentServiceReplyView1"="نسخ";
"PIMessageContentServiceReplyView2"="1. للصوت - 【الشحن بالعملات】 للقيام بشحن الرصيد MoliStar اذهب إلى قسم 【الخاص بي】 داخل تطبيق";
"PIMessageContentServiceReplyView2"="1. للصوت - 【الشحن بالعملات】 للقيام بشحن الرصيد E-Parti اذهب إلى قسم 【الخاص بي】 داخل تطبيق";
"PIMessageContentServiceReplyView3"="2. ٢. اتصل بخدمة العملاء";
"PIMessageContentServiceReplyView4"="WeChat لخدمة العملاء: %@ ";
"PIMessageContentServiceReplyView5"="Line لخدمة العملاء: %@ ";
@@ -4120,7 +4120,7 @@ ineHeadView12" = "الحمل";
"1.0.37_text_52" = "لا يمكنك استخدام هذه الميزة.";
"20.20.51_text_1" = "تسجيل الدخول بالبريد الإلكتروني";
"20.20.51_text_2" = "Welcome to MoliStar";
"20.20.51_text_2" = "Welcome to E-Parti";
"20.20.51_text_3" = "الرجاء إدخال المعرف";
"20.20.51_text_4" = "يرجى إدخال البريد الإلكتروني";
"20.20.51_text_7" = "يرجى إدخال رمز التحقق";

View File

@@ -1,9 +1,9 @@
NSCameraUsageDescription ="\"MoliStar\" needs your consent before you can visit, take photos and upload your pictures, and then display them on your personal homepage for others to view";
NSCameraUsageDescription ="\"E-Parti\" needs your consent before you can visit, take photos and upload your pictures, and then display them on your personal homepage for others to view";
NSLocalNetworkUsageDescription ="The app will discover and connect to devices on your network";
NSLocationWhenInUseUsageDescription = "Your consent is required before you can use location services and recommend nearby friends";
NSMicrophoneUsageDescription = "\"MoliStar\" needs your consent before it can conduct voice chat";
NSPhotoLibraryAddUsageDescription = "\"MoliStar\" needs your consent before it can store photos in the album";
NSPhotoLibraryUsageDescription = "\"MoliStar\" needs your consent before you can access the album and select the pictures you need to upload, and then display them on your personal homepage for others to view";
NSMicrophoneUsageDescription = "\"E-Parti\" needs your consent before it can conduct voice chat";
NSPhotoLibraryAddUsageDescription = "\"E-Parti\" needs your consent before it can store photos in the album";
NSPhotoLibraryUsageDescription = "\"E-Parti\" needs your consent before you can access the album and select the pictures you need to upload, and then display them on your personal homepage for others to view";
NSUserTrackingUsageDescription = "Please allow us to obtain your idfa permission to provide you with personalized activities and services. your information will not be used for other purposes without your permission";

View File

@@ -393,7 +393,7 @@
"XPLoginPwdViewController4" = "Phone number login";
"XPLoginPwdViewController5" = "Forgot password";
"XPLoginPwdViewController6" = "Please enter a MoliStar account";
"XPLoginPwdViewController6" = "Please enter a E-Parti account";
"XPLoginBindPhoneResultViewController0" = "Bind phone";
"XPLoginBindPhoneResultViewController1" = "Your current bound phone number is";
@@ -455,7 +455,7 @@
"XPShareView5" = "Share failed";
"XPShareView6" = "Cancel sharing";
"XPShareView7" = "Cancel";
"XPShareView8" = "Come to MoliStar and meet your exclusive voice";
"XPShareView8" = "Come to E-Parti and meet your exclusive voice";
"XPShareView9" = "Failed to share due to the absence of related apps";
"XPFirstRechargeViewController0" = "1. Each person can only receive the first recharge benefit once\n2. Each ID and device can only participate once.";
"XPFirstRechargeViewController1" = "Recharge now";
@@ -511,12 +511,12 @@
"HttpRequestHelper1" = "Please check network connection";
"HttpRequestHelper2" = "Please check network connection";
"HttpRequestHelper3" = "Login session has expired";
"HttpRequestHelper4" = "MoliStar is taking a break Please try again later";
"HttpRequestHelper4" = "E-Parti is taking a break Please try again later";
"HttpRequestHelper5" = "Unknown error from server";
"HttpRequestHelper6" = "Please check network connection";
"HttpRequestHelper7" = "Login session has expired.";
"AppDelegate_ThirdConfig0" = "MoliStar";
"AppDelegate_ThirdConfig0" = "E-Parti";
"XPMineNotificaPresenter0" = "System Notifications";
"XPMineNotificaPresenter1" = "When turned off, system messages and official assistants will no longer prompt";
@@ -932,7 +932,7 @@
"XPIAPRechargeViewController2" = "Confirm Recharge";
"XPIAPRechargeViewController3" = "《User Recharge Agreement》";
"XPIAPRechargeViewController4" = "I have read and agree";
"XPIAPRechargeViewController5" = "For any questions, please contact customer service, MoliStar ID";
"XPIAPRechargeViewController5" = "For any questions, please contact customer service, E-Parti ID";
"XPIAPRechargeViewController6" = "My Account";
"XPIAPRechargeViewController7" = "Reminder";
"XPIAPRechargeViewController8" = "Recharge failed. Please contact customer service for assistance.";
@@ -1640,7 +1640,7 @@
"RoomHeaderView1" = "Online: %ld   ID: %ld";
"RoomHeaderView2" = "Online: %ld   ID: %ld";
"RoomHeaderView3" = "Copy Link";
"RoomHeaderView4" = "Come to MoliStar, play games and make friends";
"RoomHeaderView4" = "Come to E-Parti, play games and make friends";
"RoomHeaderView5" = "Beautiful people with sweet voices win points, let's play together~";
"RoomHeaderView6" = "Bookmark Successful";
"RoomHeaderView7" = "Share Successful";
@@ -2315,7 +2315,7 @@
"XPLoginPwdViewController3" = "Please enter password";
"XPLoginPwdViewController4" = "Phone Number Login";
"XPLoginPwdViewController5" = "Forget Password";
"XPLoginPwdViewController6" = "Please enter your MoliStar account";
"XPLoginPwdViewController6" = "Please enter your E-Parti account";
"XPLoginBindPhoneResultViewController0" = "Bind Phone";
"XPLoginBindPhoneResultViewController1" = "The current bound phone number is";
@@ -3418,7 +3418,7 @@
"PIMessageContentServiceReplyView0"="How to Top-Up:";
"PIMessageContentServiceReplyView1"="Copy";
"PIMessageContentServiceReplyView2"="1. Go to 【My】-- 【Top-Up Coins】 inside MoliStar Voice App to top-up";
"PIMessageContentServiceReplyView2"="1. Go to 【My】-- 【Top-Up Coins】 inside E-Parti Voice App to top-up";
"PIMessageContentServiceReplyView3"="2. Contact customer service";
"PIMessageContentServiceReplyView4"="Customer Service WeChat: %@ ";
"PIMessageContentServiceReplyView5"="Customer Service Line: %@ ";
@@ -3908,7 +3908,7 @@
"1.0.37_text_52" = "Your cannot use this feature.";
"20.20.51_text_1" = "Email Login";
"20.20.51_text_2" = "Welcome to MoliStar";
"20.20.51_text_2" = "Welcome to E-Parti";
"20.20.51_text_3" = "Please enter ID";
"20.20.51_text_4" = "Please enter email";
"20.20.51_text_7" = "Please enter verification code";

BIN
YuMi/ep_splash.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@@ -1,7 +1,7 @@
NSCameraUsageDescription = "\"MoliStar\" necesita su consentimiento para que pueda visitar, tomar fotos y cargar sus imágenes, y luego mostrarlas en su página de inicio personal para que otras personas las vean";
NSCameraUsageDescription = "\"E-Parti\" necesita su consentimiento para que pueda visitar, tomar fotos y cargar sus imágenes, y luego mostrarlas en su página de inicio personal para que otras personas las vean";
NSLocalNetworkUsageDescription = "La aplicación descubrirá y se conectará a dispositivos en su red";
NSLocationWhenInUseUsageDescription = "Se requiere su consentimiento antes de que pueda usar los servicios de ubicación y recomendar amigos cercanos";
NSMicrophoneUsageDescription = "\"MoliStar\" necesita su consentimiento antes de poder realizar una conversación de voz";
NSPhotoLibraryAddUsageDescription = "\"MoliStar\" necesita su consentimiento antes de poder almacenar fotos en el álbum";
NSPhotoLibraryUsageDescription = "\"MoliStar\" necesita su consentimiento para que pueda acceder al álbum y seleccionar las imágenes que necesita cargar, y luego mostrarlas en su página de inicio personal para que otras personas las vean";
NSMicrophoneUsageDescription = "\"E-Parti\" necesita su consentimiento antes de poder realizar una conversación de voz";
NSPhotoLibraryAddUsageDescription = "\"E-Parti\" necesita su consentimiento antes de poder almacenar fotos en el álbum";
NSPhotoLibraryUsageDescription = "\"E-Parti\" necesita su consentimiento para que pueda acceder al álbum y seleccionar las imágenes que necesita cargar, y luego mostrarlas en su página de inicio personal para que otras personas las vean";
NSUserTrackingUsageDescription = "Permítanos obtener su permiso de idfa para proporcionarle actividades y servicios personalizados. Su información no se utilizará para otros fines sin su permiso";

View File

@@ -391,7 +391,7 @@
"XPLoginPwdViewController4" = "Inicio de sesión con número de teléfono";
"XPLoginPwdViewController5" = "Olvidé la contraseña";
"XPLoginPwdViewController6" = "Por favor ingresa una cuenta MoliStar";
"XPLoginPwdViewController6" = "Por favor ingresa una cuenta E-Parti";
"XPLoginBindPhoneResultViewController0" = "Vincular teléfono";
"XPLoginBindPhoneResultViewController1" = "Tu número de teléfono vinculado actual es";
@@ -453,7 +453,7 @@
"XPShareView5" = "Compartir fallido";
"XPShareView6" = "Cancelar compartir";
"XPShareView7" = "Cancelar";
"XPShareView8" = "Ven a MoliStar y conoce tu voz exclusiva";
"XPShareView8" = "Ven a E-Parti y conoce tu voz exclusiva";
"XPShareView9" = "Error al compartir debido a la ausencia de aplicaciones relacionadas";
"XPFirstRechargeViewController0" = "1. Cada persona solo puede recibir el beneficio de la primera recarga una vez\n2. Cada ID y dispositivo solo puede participar una vez.";
"XPFirstRechargeViewController1" = "Recargar ahora";
@@ -509,12 +509,12 @@
"HttpRequestHelper1" = "Por favor comprueba la conexión a internet";
"HttpRequestHelper2" = "Por favor comprueba la conexión a internet";
"HttpRequestHelper3" = "La sesión de inicio de sesión ha expirado";
"HttpRequestHelper4" = "MoliStar está descansando Por favor intenta más tarde";
"HttpRequestHelper4" = "E-Parti está descansando Por favor intenta más tarde";
"HttpRequestHelper5" = "Error desconocido del servidor";
"HttpRequestHelper6" = "Por favor comprueba la conexión a internet";
"HttpRequestHelper7" = "La sesión de inicio de sesión ha expirado.";
"AppDelegate_ThirdConfig0" = "MoliStar";
"AppDelegate_ThirdConfig0" = "E-Parti";
"XPMineNotificaPresenter0" = "Notificaciones del sistema";
"XPMineNotificaPresenter1" = "Cuando está apagado, los mensajes del sistema y los asistentes oficiales ya no se mostrarán";
@@ -930,7 +930,7 @@
"XPIAPRechargeViewController2" = "Confirmar Recarga";
"XPIAPRechargeViewController3" = "《Acuerdo de Recarga de Usuario》";
"XPIAPRechargeViewController4" = "He leído y acepto";
"XPIAPRechargeViewController5" = "Para cualquier pregunta, por favor contacte al servicio al cliente, ID MoliStar";
"XPIAPRechargeViewController5" = "Para cualquier pregunta, por favor contacte al servicio al cliente, ID E-Parti";
"XPIAPRechargeViewController6" = "Mi Cuenta";
"XPIAPRechargeViewController7" = "Recordatorio";
"XPIAPRechargeViewController8" = "Recarga fallida. Por favor contacte al servicio al cliente para obtener ayuda.";
@@ -1638,7 +1638,7 @@
"RoomHeaderView1" = "En línea: %ld ID: %ld";
"RoomHeaderView2" = "En línea: %ld ID: %ld";
"RoomHeaderView3" = "Copiar Enlace";
"RoomHeaderView4" = "Ven a MoliStar, juega y haz amigos";
"RoomHeaderView4" = "Ven a E-Parti, juega y haz amigos";
"RoomHeaderView5" = "Gente hermosa con voces dulces gana puntos, ¡juguemos juntos~";
"RoomHeaderView6" = "Marcador Guardado";
"RoomHeaderView7" = "Compartido con Éxito";
@@ -2313,7 +2313,7 @@
"XPLoginPwdViewController3" = "Please enter password";
"XPLoginPwdViewController4" = "Phone Number Login";
"XPLoginPwdViewController5" = "Forget Password";
"XPLoginPwdViewController6" = "Please enter your MoliStar account";
"XPLoginPwdViewController6" = "Please enter your E-Parti account";
"XPLoginBindPhoneResultViewController0" = "Bind Phone";
"XPLoginBindPhoneResultViewController1" = "The current bound phone number is";
@@ -3416,7 +3416,7 @@
"PIMessageContentServiceReplyView0"="How to Top-Up:";
"PIMessageContentServiceReplyView1"="Copy";
"PIMessageContentServiceReplyView2"="1. Go to 【My】-- 【Top-Up Coins】 inside MoliStar Voice App to top-up";
"PIMessageContentServiceReplyView2"="1. Go to 【My】-- 【Top-Up Coins】 inside E-Parti Voice App to top-up";
"PIMessageContentServiceReplyView3"="2. Contact customer service";
"PIMessageContentServiceReplyView4"="Customer Service WeChat: %@ ";
"PIMessageContentServiceReplyView5"="Customer Service Line: %@ ";
@@ -3930,7 +3930,7 @@
"1.0.37_text_52" = "No puedes usar esta función.";
"20.20.51_text_1" = "Inicio de sesión por correo electrónico";
"20.20.51_text_2" = "Bienvenido a MoliStar";
"20.20.51_text_2" = "Bienvenido a E-Parti";
"20.20.51_text_3" = "Por favor ingresa ID";
"20.20.51_text_4" = "Por favor ingresa correo electrónico";
"20.20.51_text_7" = "Por favor ingresa el código de verificación";

View File

@@ -3,6 +3,7 @@
"strings" : {
"o5T-sv-tDU.text" : {
"comment" : "Class = \"UILabel\"; text = \"Meet your exclusive voice~\"; ObjectID = \"o5T-sv-tDU\";",
"extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {

View File

@@ -1,13 +1,13 @@
NSCameraUsageDescription = "O \"MoliStar\" precisa do seu consentimento antes que você possa visitar, tirar fotos e enviar suas imagens, e depois exibi-las em sua página pessoal para que outros possam visualizar";
NSCameraUsageDescription = "O \"E-Parti\" precisa do seu consentimento antes que você possa visitar, tirar fotos e enviar suas imagens, e depois exibi-las em sua página pessoal para que outros possam visualizar";
NSLocalNetworkUsageDescription = "O aplicativo irá descobrir e conectar-se a dispositivos em sua rede";
NSLocationWhenInUseUsageDescription = "O seu consentimento é necessário antes que você possa usar os serviços de localização e recomendar amigos próximos";
NSMicrophoneUsageDescription = "O \"MoliStar\" precisa do seu consentimento antes de poder realizar chat de voz";
NSMicrophoneUsageDescription = "O \"E-Parti\" precisa do seu consentimento antes de poder realizar chat de voz";
NSPhotoLibraryAddUsageDescription = "O \"MoliStar\" precisa do seu consentimento antes de poder armazenar fotos no álbum";
NSPhotoLibraryAddUsageDescription = "O \"E-Parti\" precisa do seu consentimento antes de poder armazenar fotos no álbum";
NSPhotoLibraryUsageDescription = "O \"MoliStar\" precisa do seu consentimento antes que você possa acessar o álbum e selecionar as imagens que deseja enviar, e depois exibi-las em sua página pessoal para que outros possam visualizar";
NSPhotoLibraryUsageDescription = "O \"E-Parti\" precisa do seu consentimento antes que você possa acessar o álbum e selecionar as imagens que deseja enviar, e depois exibi-las em sua página pessoal para que outros possam visualizar";
NSUserTrackingUsageDescription = "Por favor, permita-nos obter sua permissão IDFA para fornecer a você atividades e serviços personalizados. Suas informações não serão usadas para outros fins sem a sua permissão";

View File

@@ -305,7 +305,7 @@
"XPLoginPwdViewController2" = "Por favor insira número de telefone/ID";
"XPLoginPwdViewController4" = "Login com número de telefone";
"XPLoginPwdViewController5" = "Esqueceu a senha";
"XPLoginPwdViewController6" = "Por favor insira uma conta MoliStar";
"XPLoginPwdViewController6" = "Por favor insira uma conta E-Parti";
"XPLoginBindPhoneResultViewController0" = "Vincular telefone";
"XPLoginBindPhoneResultViewController1" = "Seu número de telefone vinculado atual é";
"XPLoginBindPhoneResultViewController2" = "Alterar número de telefone";
@@ -363,7 +363,7 @@
"XPShareView5" = "Compartilhamento falhou";
"XPShareView6" = "Cancelar compartilhamento";
"XPShareView7" = "Cancelar";
"XPShareView8" = "Venha para MoliStar e conheça sua voz exclusiva";
"XPShareView8" = "Venha para E-Parti e conheça sua voz exclusiva";
"XPShareView9" = "Falha ao compartilhar devido à ausência de aplicativos relacionados";
"XPFirstRechargeViewController0" = "1. Cada pessoa só pode receber o benefício da primeira recarga uma vez\n2. Cada ID e dispositivo só pode participar uma vez.";
"XPFirstRechargeViewController1" = "Recarregar agora";
@@ -412,11 +412,11 @@
"HttpRequestHelper1" = "Por favor verifique a conexão de rede";
"HttpRequestHelper2" = "Por favor verifique a conexão de rede";
"HttpRequestHelper3" = "A sessão de login expirou";
"HttpRequestHelper4" = "MoliStar está fazendo uma pausa Por favor tente novamente mais tarde";
"HttpRequestHelper4" = "E-Parti está fazendo uma pausa Por favor tente novamente mais tarde";
"HttpRequestHelper5" = "Erro desconhecido do servidor";
"HttpRequestHelper6" = "Por favor verifique a conexão de rede";
"HttpRequestHelper7" = "A sessão de login expirou.";
"AppDelegate_ThirdConfig0" = "MoliStar";
"AppDelegate_ThirdConfig0" = "E-Parti";
"XPMineNotificaPresenter0" = "Notificações do sistema";
"XPMineNotificaPresenter1" = "Quando desligado, mensagens do sistema e assistentes oficiais não avisarão mais";
"XPMineNotificaPresenter2" = "Notificações ao vivo";
@@ -753,7 +753,7 @@
"XPIAPRechargeViewController2" = "Confirmar Recarga";
"XPIAPRechargeViewController3" = "《Termos de Recarga do Usuário》";
"XPIAPRechargeViewController4" = "Li e concordo";
"XPIAPRechargeViewController5" = "Para dúvidas, entre em contato com o atendimento, ID MoliStar";
"XPIAPRechargeViewController5" = "Para dúvidas, entre em contato com o atendimento, ID E-Parti";
"XPIAPRechargeViewController6" = "Minha Conta";
"XPIAPRechargeViewController7" = "Lembrete";
"XPIAPRechargeViewController8" = "Falha na recarga. Entre em contato com o atendimento para assistência.";
@@ -1351,7 +1351,7 @@
"RoomHeaderView1" = "Online: %ld   ID: %ld";
"RoomHeaderView2" = "Online: %ld   ID: %ld";
"RoomHeaderView3" = "Copiar Link";
"RoomHeaderView4" = "Venha para MoliStar, jogue e faça amigos";
"RoomHeaderView4" = "Venha para E-Parti, jogue e faça amigos";
"RoomHeaderView5" = "Pessoas bonitas com vozes doces ganham pontos, vamos jogar juntos~";
"RoomHeaderView6" = "Favoritado com Sucesso";
"RoomHeaderView7" = "Compartilhado com Sucesso";
@@ -1917,7 +1917,7 @@
"XPLoginPwdViewController3" = "Digite a senha";
"XPLoginPwdViewController4" = "Login com Número de Telefone";
"XPLoginPwdViewController5" = "Esqueci a Senha";
"XPLoginPwdViewController6" = "Digite sua conta MoliStar";
"XPLoginPwdViewController6" = "Digite sua conta E-Parti";
"XPLoginBindPhoneResultViewController0" = "Vincular Telefone";
"XPLoginBindPhoneResultViewController1" = "O número de telefone vinculado atualmente é";
"XPLoginBindPhoneResultViewController2" = "Alterar Número de Telefone";
@@ -2748,7 +2748,7 @@
"XPCandyTreeBuyView0"="Por favor, selecione ou insira o número de martelos para comprar";
"PIMessageContentServiceReplyView0"="Como Recarregar:";
"PIMessageContentServiceReplyView1"="Copiar";
"PIMessageContentServiceReplyView2"="1. Vá para 【Meu】-- 【Recarregar Moedas】 dentro do aplicativo MoliStar Voice para recarregar";
"PIMessageContentServiceReplyView2"="1. Vá para 【Meu】-- 【Recarregar Moedas】 dentro do aplicativo E-Parti Voice para recarregar";
"PIMessageContentServiceReplyView3"="2. Contate o atendimento ao cliente";
"PIMessageContentServiceReplyView4"="WeChat do Atendimento: %@ ";
"PIMessageContentServiceReplyView5"="Linha do Atendimento: %@ ";
@@ -3204,7 +3204,7 @@
"1.0.37_text_51" = "Presentes foram colocados na bolsa!";
"1.0.37_text_52" = "Você não pode usar este recurso.";
"20.20.51_text_1" = "Login por Email";
"20.20.51_text_2" = "Bem-vindo ao MoliStar";
"20.20.51_text_2" = "Bem-vindo ao E-Parti";
"20.20.51_text_3" = "Digite o ID";
"20.20.51_text_4" = "Digite o email";
"20.20.51_text_7" = "Digite o código de verificação";

View File

@@ -1,8 +1,8 @@
NSCameraUsageDescription = "\"MoliStar\" нужен ваш consentimiento перед тем, как вы можете посетить, фотографировать и загружать ваши изображения, а затем отображать их на вашей персональной странице для просмотра другими людьми";
NSCameraUsageDescription = "\"E-Parti\" нужен ваш consentimiento перед тем, как вы можете посетить, фотографировать и загружать ваши изображения, а затем отображать их на вашей персональной странице для просмотра другими людьми";
NSLocalNetworkUsageDescription = "Приложение обнаружит и подключится к устройствам в вашей сети";
NSLocationWhenInUseUsageDescription = "Вам необходимо дать согласие, прежде чем вы сможете использовать службы определения местоположения и рекомендовать близких друзей";
NSMicrophoneUsageDescription = "\"MoliStar\" нужен ваш consentimiento перед тем, как он может проводить голосовый чат";
NSPhotoLibraryAddUsageDescription = "\"MoliStar\" нужен ваш consentimiento перед тем, как он может хранить фотографии в альбоме";
NSPhotoLibraryUsageDescription = "\"MoliStar\" нужен ваш consentimiento перед тем, как вы можете получить доступ к альбому и выбрать изображения, которые вам нужно загрузить, а затем отобразить их на вашей персональной странице для просмотра другими людьми";
NSMicrophoneUsageDescription = "\"E-Parti\" нужен ваш consentimiento перед тем, как он может проводить голосовый чат";
NSPhotoLibraryAddUsageDescription = "\"E-Parti\" нужен ваш consentimiento перед тем, как он может хранить фотографии в альбоме";
NSPhotoLibraryUsageDescription = "\"E-Parti\" нужен ваш consentimiento перед тем, как вы можете получить доступ к альбому и выбрать изображения, которые вам нужно загрузить, а затем отобразить их на вашей персональной странице для просмотра другими людьми";
NSUserTrackingUsageDescription = "Пожалуйста, разрешите нам получить ваше разрешение на idfa, чтобы предоставить вам персонализированные мероприятия и услуги. ваша информация не будет использоваться для других целей без вашего разрешения";

View File

@@ -390,7 +390,7 @@
"XPLoginPwdViewController4" = "Вход по номеру телефона";
"XPLoginPwdViewController5" = "Забыли пароль";
"XPLoginPwdViewController6" = "Пожалуйста, введите аккаунт MoliStar";
"XPLoginPwdViewController6" = "Пожалуйста, введите аккаунт E-Parti";
"XPLoginBindPhoneResultViewController0" = "Привязать телефон";
"XPLoginBindPhoneResultViewController1" = "Ваш текущий привязанный номер телефона";
@@ -452,7 +452,7 @@
"XPShareView5" = "Ошибка при отправке";
"XPShareView6" = "Отменить отправку";
"XPShareView7" = "Отмена";
"XPShareView8" = "Приходите в MoliStar и встречайте свой эксклюзивный голос";
"XPShareView8" = "Приходите в E-Parti и встречайте свой эксклюзивный голос";
"XPShareView9" = "Ошибка при отправке из-за отсутствия связанных приложений";
"XPFirstRechargeViewController0" = "1. Каждый человек может получить преимущество за первый пополнение только один раз\n2. Каждая учетная запись и устройство могут участвовать только один раз.";
"XPFirstRechargeViewController1" = "Пополнить сейчас";
@@ -508,12 +508,12 @@
"HttpRequestHelper1" = "Пожалуйста, проверьте интернет-подключение";
"HttpRequestHelper2" = "Пожалуйста, проверьте интернет-подключение";
"HttpRequestHelper3" = "Сессия входа истекла";
"HttpRequestHelper4" = "MoliStar отдыхает Пожалуйста, попробуйте позже";
"HttpRequestHelper4" = "E-Parti отдыхает Пожалуйста, попробуйте позже";
"HttpRequestHelper5" = "Неизвестная ошибка сервера";
"HttpRequestHelper6" = "Пожалуйста, проверьте интернет-подключение";
"HttpRequestHelper7" = "Сессия входа истекла.";
"AppDelegate_ThirdConfig0" = "MoliStar";
"AppDelegate_ThirdConfig0" = "E-Parti";
"XPMineNotificaPresenter0" = "Системные уведомления";
"XPMineNotificaPresenter1" = "При отключении системные сообщения и официальные помощники больше не будут появляться";
@@ -929,7 +929,7 @@
"XPIAPRechargeViewController2" = "Подтвердить пополнение";
"XPIAPRechargeViewController3" = "《Соглашение о пополнении баланса пользователя》";
"XPIAPRechargeViewController4" = "Я прочел(а) и согласен(а)";
"XPIAPRechargeViewController5" = "По всем вопросам обращайтесь в службу поддержки, MoliStar ID";
"XPIAPRechargeViewController5" = "По всем вопросам обращайтесь в службу поддержки, E-Parti ID";
"XPIAPRechargeViewController6" = "Мой аккаунт";
"XPIAPRechargeViewController7" = "Напоминание";
"XPIAPRechargeViewController8" = "Пополнение не удалось. Пожалуйста, обратитесь в службу поддержки за помощью.";
@@ -1637,7 +1637,7 @@
"RoomHeaderView1" = "Онлайн: %ld   ID: %ld";
"RoomHeaderView2" = "Онлайн: %ld   ID: %ld";
"RoomHeaderView3" = "Копировать ссылку";
"RoomHeaderView4" = "Приходите на MoliStar, играйте в игры и заводите друзей";
"RoomHeaderView4" = "Приходите на E-Parti, играйте в игры и заводите друзей";
"RoomHeaderView5" = "Красивые люди с сладкими голосами зарабатывают очки, давайте играть вместе~";
"RoomHeaderView6" = "Закладка успешно создана";
"RoomHeaderView7" = "Поделка успешно выполнена";
@@ -2312,7 +2312,7 @@
"XPLoginPwdViewController3" = "Введите пароль";
"XPLoginPwdViewController4" = "Вход по номеру телефона";
"XPLoginPwdViewController5" = "Забыли пароль";
"XPLoginPwdViewController6" = "Введите ваш аккаунт MoliStar";
"XPLoginPwdViewController6" = "Введите ваш аккаунт E-Parti";
"XPLoginBindPhoneResultViewController0" = "Привязать телефон";
"XPLoginBindPhoneResultViewController1" = "Текущий привязанный номер телефона";
@@ -3415,7 +3415,7 @@
"PIMessageContentServiceReplyView0"="Как пополнить баланс:";
"PIMessageContentServiceReplyView1"="Скопировать";
"PIMessageContentServiceReplyView2"="1. Перейдите в 【Мой】-- 【Пополнить монеты】 внутри приложения MoliStar Voice для пополнения баланса";
"PIMessageContentServiceReplyView2"="1. Перейдите в 【Мой】-- 【Пополнить монеты】 внутри приложения E-Parti Voice для пополнения баланса";
"PIMessageContentServiceReplyView3"="2. Свяжитесь с поддержкой";
"PIMessageContentServiceReplyView4"="WeChat поддержки: %@ ";
"PIMessageContentServiceReplyView5"="Телефон поддержки: %@ ";
@@ -3925,7 +3925,7 @@
"1.0.37_text_52" = "Вы не можете использовать эту функцию.";
"20.20.51_text_1" = "Вход по электронной почте";
"20.20.51_text_2" = "Добро пожаловать в MoliStar";
"20.20.51_text_2" = "Добро пожаловать в E-Parti";
"20.20.51_text_3" = "Пожалуйста, введите ID";
"20.20.51_text_4" = "Пожалуйста, введите электронную почту";
"20.20.51_text_7" = "Пожалуйста, введите код подтверждения";

View File

@@ -1,7 +1,7 @@
NSCameraUsageDescription = "\"MoliStar\"'ın ziyaret etmeden önce, fotoğraf çekip yüklemeden önce onayınıza ihtiyacı var, ardından bunlar kişisel ana sayfanızda başkalarının görmesi için görüntülenecektir";
NSCameraUsageDescription = "\"E-Parti\"'ın ziyaret etmeden önce, fotoğraf çekip yüklemeden önce onayınıza ihtiyacı var, ardından bunlar kişisel ana sayfanızda başkalarının görmesi için görüntülenecektir";
NSLocalNetworkUsageDescription = "Uygulama, ağınızdaki cihazları keşfedecek ve bağlanacaktır";
NSLocationWhenInUseUsageDescription = "Konum hizmetlerini kullanabilmeniz ve yakındaki arkadaşları önerebilmemiz için onayınız gereklidir";
NSMicrophoneUsageDescription = "\"MoliStar\"'ın sesli sohbet gerçekleştirebilmesi için onayınıza ihtiyacı var";
NSPhotoLibraryAddUsageDescription = "\"MoliStar\"'ın albüme fotoğraf kaydedebilmesi için onayınıza ihtiyacı var";
NSPhotoLibraryUsageDescription = "\"MoliStar\"'ın albüme erişebilmesi, yüklemek için gerekli fotoğrafları seçebilmeniz ve ardından bunları kişisel ana sayfanızda başkalarının görmesi için görüntüleyebilmeniz için onayınıza ihtiyacı var";
NSMicrophoneUsageDescription = "\"E-Parti\"'ın sesli sohbet gerçekleştirebilmesi için onayınıza ihtiyacı var";
NSPhotoLibraryAddUsageDescription = "\"E-Parti\"'ın albüme fotoğraf kaydedebilmesi için onayınıza ihtiyacı var";
NSPhotoLibraryUsageDescription = "\"E-Parti\"'ın albüme erişebilmesi, yüklemek için gerekli fotoğrafları seçebilmeniz ve ardından bunları kişisel ana sayfanızda başkalarının görmesi için görüntüleyebilmeniz için onayınıza ihtiyacı var";
NSUserTrackingUsageDescription = "Size kişiselleştirilmiş etkinlikler ve hizmetler sunabilmemiz için lütfen IDFA izninizi vermemize izin verin. İzniniz olmadan bilgileriniz başka amaçlar için kullanılmayacaktır";

View File

@@ -50,7 +50,7 @@
"XPShareView5" = "Paylaşım başarısız oldu";
"XPShareView6" = "Paylaşımı iptal et";
"XPShareView7" = "İptal";
"XPShareView8" = "MoliStar'a gel, özel sesinle tanış";
"XPShareView8" = "E-Parti'a gel, özel sesinle tanış";
"XPShareView9" = "İlgili uygulama yüklü değil, paylaşım başarısız oldu";
///XPFirstRechargeViewController.m
"XPFirstRechargeViewController0" = "1. Herkes sadece bir kez ilk yükleme avantajı alabilir\n2. Her ID ve cihaz sadece bir kez katılabilir.";
@@ -119,12 +119,12 @@
"HttpRequestHelper1" = "Lütfen internet bağlantınızı kontrol edin";
"HttpRequestHelper2" = "Lütfen internet bağlantınızı kontrol edin";
"HttpRequestHelper3" = "Giriş süresi aşıldı";
"HttpRequestHelper4" = "MoliStar hata veriyor, lütfen daha sonra tekrar deneyin";
"HttpRequestHelper4" = "E-Parti hata veriyor, lütfen daha sonra tekrar deneyin";
"HttpRequestHelper5" = "API hatası, bilinmeyen bilgiler";
"HttpRequestHelper6" = "Lütfen internet bağlantınızı kontrol edin";
"HttpRequestHelper7" = "Giriş süresi aşıldı";
"AppDelegate_ThirdConfig0" = "MoliStar";
"AppDelegate_ThirdConfig0" = "E-Parti";
"XPMineNotificaPresenter0" = "Sistem bildirimleri";
"XPMineNotificaPresenter1" = "Kapatıldığında, sistem mesajları ve resmi asistan artık size bildirim göstermeyecek";
@@ -531,7 +531,7 @@
"XPIAPRechargeViewController2" = "Şarj Et";
"XPIAPRechargeViewController3" = "Kullanıcı yükleme sözleşmesi";
"XPIAPRechargeViewController4" = "Okudum ve kabul ediyorum";
"XPIAPRechargeViewController5" = "Herhangi bir sorunuz varsa lütfen müşteri hizmetleri ile iletişime geçin, MoliStar numarası";
"XPIAPRechargeViewController5" = "Herhangi bir sorunuz varsa lütfen müşteri hizmetleri ile iletişime geçin, E-Parti numarası";
"XPIAPRechargeViewController6" = "Hesabım";
"XPIAPRechargeViewController7" = "Uyarı";
"XPIAPRechargeViewController8" = "Şarj başarısız, lütfen müşteri hizmetleri ile iletişime geçin~";
@@ -1237,7 +1237,7 @@
"RoomHeaderView1" = "Çevrimiçi:%ld ID:%ld";
"RoomHeaderView2" = "Çevrimiçi:%ld ID:%ld";
"RoomHeaderView3" = "Bağlantıyı Kopyala";
"RoomHeaderView4" = "MoliStar'a gel, oyun oyna ve arkadaş edin";
"RoomHeaderView4" = "E-Parti'a gel, oyun oyna ve arkadaş edin";
"RoomHeaderView5" = "Güzel ve tatlı sesli, beraber oynayalım~";
"RoomHeaderView6" = "Favorilere Eklendi";
"RoomHeaderView7" = "Paylaşım Başarılı";
@@ -2159,7 +2159,7 @@
"XPLoginPwdViewController3" = "Şifre girin";
"XPLoginPwdViewController4" = "Telefon ile Giriş";
"XPLoginPwdViewController5" = "Şifremi Unuttum";
"XPLoginPwdViewController6" = "MoliStar hesabınızı girin";
"XPLoginPwdViewController6" = "E-Parti hesabınızı girin";
"XPLoginBindPhoneResultViewController0" = "Telefon Bağlama Başarılı";
"XPLoginBindPhoneResultViewController1" = "Şu anda bağlı olduğunuz telefon numarası";
@@ -2884,7 +2884,7 @@
"PIMessageContentServiceReplyView0"="Nasıl yüklenir:";
"PIMessageContentServiceReplyView1"="Kopyala";
"PIMessageContentServiceReplyView2"="1. MoliStar Ses Uygulaması içinde 【Benim】 - 【Parayı Yükle】'ye gidin ve yükleme yapın";
"PIMessageContentServiceReplyView2"="1. E-Parti Ses Uygulaması içinde 【Benim】 - 【Parayı Yükle】'ye gidin ve yükleme yapın";
"PIMessageContentServiceReplyView3"="2. Müşteri hizmetleri ile iletişime geçin ve yükleme bağlantısını alın";
"PIMessageContentServiceReplyView4"="Müşteri Hizmetleri WeChat: %@ ";
"PIMessageContentServiceReplyView5"="Müşteri Hizmetleri Line: %@ ";
@@ -3702,7 +3702,7 @@
"1.0.37_text_52" = "Bu özelliği kullanamazsınız.";
"20.20.51_text_1" = "E-posta Girişi";
"20.20.51_text_2" = "Welcome to MoliStar";
"20.20.51_text_2" = "Welcome to E-Parti";
"20.20.51_text_3" = "Lütfen kimlik girin";
"20.20.51_text_4" = "Lütfen e-posta girin";
"20.20.51_text_7" = "Lütfen doğrulama kodunu girin";

View File

@@ -1,7 +1,7 @@
NSCameraUsageDescription = "\"MoliStar\" sizning rozilingizni talab qiladi, siz tashrif buyurish, fotosurat olish va rasmlaringizni yuklashdan oldin, keyin ularni shaxsiy asosiy sahifangizda boshqalar ko'rishi uchun ko'rsatish";
NSCameraUsageDescription = "\"E-Parti\" sizning rozilingizni talab qiladi, siz tashrif buyurish, fotosurat olish va rasmlaringizni yuklashdan oldin, keyin ularni shaxsiy asosiy sahifangizda boshqalar ko'rishi uchun ko'rsatish";
NSLocalNetworkUsageDescription = "Ilova tarmog'ingizdagi qurilmalarni topadi va ulanadi";
NSLocationWhenInUseUsageDescription = "Siz joylashuv xizmatlaridan foydalanishingiz va yaqin do'stlarni tavsiya qilishingizdan oldin rozilingiz kerak";
NSMicrophoneUsageDescription = "\"MoliStar\" ovozli suhbat olib borishdan oldin sizning rozilingizni talab qiladi";
NSPhotoLibraryAddUsageDescription = "\"MoliStar\" fotosuratlarni albomda saqlashdan oldin sizning rozilingizni talab qiladi";
NSPhotoLibraryUsageDescription = "\"MoliStar\" albomga kirish va yuklash kerak bo'lgan rasmlarni tanlashdan oldin sizning rozilingizni talab qiladi, keyin ularni shaxsiy asosiy sahifangizda boshqalar ko'rishi uchun ko'rsatish";
NSMicrophoneUsageDescription = "\"E-Parti\" ovozli suhbat olib borishdan oldin sizning rozilingizni talab qiladi";
NSPhotoLibraryAddUsageDescription = "\"E-Parti\" fotosuratlarni albomda saqlashdan oldin sizning rozilingizni talab qiladi";
NSPhotoLibraryUsageDescription = "\"E-Parti\" albomga kirish va yuklash kerak bo'lgan rasmlarni tanlashdan oldin sizning rozilingizni talab qiladi, keyin ularni shaxsiy asosiy sahifangizda boshqalar ko'rishi uchun ko'rsatish";
NSUserTrackingUsageDescription = "Iltimos, sizga shaxsiy aktivlar va xizmatlarni taqdim etish uchun idfa ruxsatini olishimizga ruxsat bering. Sizning ma'lumotlaringiz sizning ruxsatingizsiz boshqa maqsadlar uchun ishlatilmaydi";

View File

@@ -393,7 +393,7 @@
"XPLoginPwdViewController4" = "Telefon raqami orqali tizimga kirish";
"XPLoginPwdViewController5" = "Parolni unutdingiz";
"XPLoginPwdViewController6" = "Iltimos MoliStar hisobini kiriting";
"XPLoginPwdViewController6" = "Iltimos E-Parti hisobini kiriting";
"XPLoginBindPhoneResultViewController0" = "Telefonni bog'lash";
"XPLoginBindPhoneResultViewController1" = "Sizning hozirgi bog'langan telefon raqamingiz";
@@ -455,7 +455,7 @@
"XPShareView5" = "Ulashish muvaffaqiyatsiz";
"XPShareView6" = "Ulashishni bekor qilish";
"XPShareView7" = "Bekor qilish";
"XPShareView8" = "MoliStar ga kelib, o'z eksklyuziv ovozingizni toping";
"XPShareView8" = "E-Parti ga kelib, o'z eksklyuziv ovozingizni toping";
"XPShareView9" = "Tegishli ilovalar yo'qligi sababli ulashish muvaffaqiyatsiz bo'ldi";
"XPFirstRechargeViewController0" = "1. Har bir kishi faqat birinchi to'ldirish afzalligini bir marta olishi mumkin\n2. Har bir ID va qurilma faqat bir marta ishtirok etishi mumkin.";
"XPFirstRechargeViewController1" = "Hozir to'ldirish";
@@ -511,12 +511,12 @@
"HttpRequestHelper1" = "Iltimos tarmoq ulanishini tekshiring";
"HttpRequestHelper2" = "Iltimos tarmoq ulanishini tekshiring";
"HttpRequestHelper3" = "Tizimga kirish sessiyasi muddati tugagan";
"HttpRequestHelper4" = "MoliStar dam olmoqda, iltimos keyinroq urunib ko'ring";
"HttpRequestHelper4" = "E-Parti dam olmoqda, iltimos keyinroq urunib ko'ring";
"HttpRequestHelper5" = "Serverdan noma'lum xato";
"HttpRequestHelper6" = "Iltimos tarmoq ulanishini tekshiring";
"HttpRequestHelper7" = "Tizimga kirish sessiyasi muddati tugagan.";
"AppDelegate_ThirdConfig0" = "MoliStar";
"AppDelegate_ThirdConfig0" = "E-Parti";
"XPMineNotificaPresenter0" = "Tizim bildirishnomalari";
"XPMineNotificaPresenter1" = "O'chirilganda, tizim xabarlar va rasmiy yordamchilar endi ogohlantirmaydi";
@@ -911,7 +911,7 @@
"XPIAPRechargeViewController2" = "To'ldirishni tasdiqlash";
"XPIAPRechargeViewController3" = "《Foydalanuvchi To'ldirish Shartnomasi》";
"XPIAPRechargeViewController4" = "Men o'qidim va qabul qildim";
"XPIAPRechargeViewController5" = "Savollar bo'lsa, iltimos mijozlar xizmatiga murojaat qiling, MoliStar ID";
"XPIAPRechargeViewController5" = "Savollar bo'lsa, iltimos mijozlar xizmatiga murojaat qiling, E-Parti ID";
"XPIAPRechargeViewController6" = "Mening hisobim";
"XPIAPRechargeViewController7" = "Eslatma";
"XPIAPRechargeViewController8" = "To'ldirish muvaffaqiyatsiz. Iltimos yordam uchun mijozlar xizmatiga murojaat qiling.";
@@ -1608,7 +1608,7 @@
"RoomHeaderView1" = "Onlayn: %ld ID: %ld";
"RoomHeaderView2" = "Onlayn: %ld ID: %ld";
"RoomHeaderView3" = "Havolani nusxalash";
"RoomHeaderView4" = "MoliStar-ga keling, o'yinlar o'ynang va do'stlar orttiring";
"RoomHeaderView4" = "E-Parti-ga keling, o'yinlar o'ynang va do'stlar orttiring";
"RoomHeaderView5" = "Go'zal ovozli chiroyli odamlar ball yutishadi, birga o'ynaylik~";
"RoomHeaderView6" = "Xatcho'p muvaffaqiyatli yaratildi";
"RoomHeaderView7" = "Ulashish muvaffaqiyatli amalga oshirildi";
@@ -2283,7 +2283,7 @@ Tasdiqlangandan so'ng, sekretar sizga uni chop etishda yordam beradi va sizni xa
"XPLoginPwdViewController3" = "Iltimos, parolni kiriting";
"XPLoginPwdViewController4" = "Telefon raqami orqali tizimga kirish";
"XPLoginPwdViewController5" = "Parolni unutdingiz";
"XPLoginPwdViewController6" = "Iltimos, MoliStar akkauntingizni kiriting";
"XPLoginPwdViewController6" = "Iltimos, E-Parti akkauntingizni kiriting";
"XPLoginBindPhoneResultViewController0" = "Telefonni bog'lash";
"XPLoginBindPhoneResultViewController1" = "Joriy bog'langan telefon raqami";
@@ -3386,7 +3386,7 @@ Tasdiqlangandan so'ng, sekretar sizga uni chop etishda yordam beradi va sizni xa
"PIMessageContentServiceReplyView0"="Qanday to'ldirish kerak:";
"PIMessageContentServiceReplyView1"="Nusxalash";
"PIMessageContentServiceReplyView2"="1. MoliStar Voice ilovasidagi 【Mening】-- 【Tanga to'ldirish】 bo'limiga o'ting va to'ldiring";
"PIMessageContentServiceReplyView2"="1. E-Parti Voice ilovasidagi 【Mening】-- 【Tanga to'ldirish】 bo'limiga o'ting va to'ldiring";
"PIMessageContentServiceReplyView3"="2. Xizmat ko'rsatuvchi bilan bog'laning";
"PIMessageContentServiceReplyView4"="Xizmat ko'rsatuvchi WeChat: %@ ";
"PIMessageContentServiceReplyView5"="Xizmat ko'rsatuvchi telefon: %@ ";
@@ -3896,7 +3896,7 @@ Tasdiqlangandan so'ng, sekretar sizga uni chop etishda yordam beradi va sizni xa
"1.0.37_text_52" = "Siz bu funksiyadan foydalan olmaysiz.";
"20.20.51_text_1" = "Email Login";
"20.20.51_text_2" = "MoliStar ga xush kelibsiz";
"20.20.51_text_2" = "E-Parti ga xush kelibsiz";
"20.20.51_text_3" = "Iltimos ID kiriting";
"20.20.51_text_4" = "Iltimos email kiriting";
"20.20.51_text_7" = "Iltimos tasdiqlash kodi kiriting";

View File

@@ -1,8 +1,8 @@
NSCameraUsageDescription = "「MoliStar」需要您的同意,才可以訪問進行拍照並上傳您的圖片,然後展示在您的個人主頁上,便於他人查看";
NSCameraUsageDescription = "「E-Parti」需要您的同意,才可以訪問進行拍照並上傳您的圖片,然後展示在您的個人主頁上,便於他人查看";
NSLocalNetworkUsageDescription = "此App將可發現和連接到您所用網絡上的設備";
NSLocationWhenInUseUsageDescription = "需要您的同意,才可以進行定位服務,推薦附近好友";
NSMicrophoneUsageDescription = "「MoliStar」需要您的同意,才可以進行語音聊天";
NSPhotoLibraryAddUsageDescription = "「MoliStar」需要您的同意,才可以存儲相片到相冊";
NSPhotoLibraryUsageDescription = "「MoliStar」需要您的同意,才可以訪問相冊並選擇您需要上傳的圖片,然後展示在您的個人主頁上,便於他人查看";
NSMicrophoneUsageDescription = "「E-Parti」需要您的同意,才可以進行語音聊天";
NSPhotoLibraryAddUsageDescription = "「E-Parti」需要您的同意,才可以存儲相片到相冊";
NSPhotoLibraryUsageDescription = "「E-Parti」需要您的同意,才可以訪問相冊並選擇您需要上傳的圖片,然後展示在您的個人主頁上,便於他人查看";
NSUserTrackingUsageDescription = "請允許我們獲取您的IDFA權限可以為您提供個性化活動和服務。未經您的允許您的信息將不作其他用途。";

View File

@@ -60,7 +60,7 @@
"XPShareView5" = "分享失敗";
"XPShareView6" = "取消分享";
"XPShareView7" = "取消";
"XPShareView8" = "來MoliStar,邂逅你的專屬聲音";
"XPShareView8" = "來E-Parti,邂逅你的專屬聲音";
"XPShareView9" = "未安装相关App分享失败";
///XPFirstRechargeViewController.m
"XPFirstRechargeViewController0" = "1.每人僅可獲得1次首充福利\n2.每個ID、設備僅能參加一次。";
@@ -128,13 +128,13 @@
"HttpRequestHelper1" = "請檢查網絡連接";
"HttpRequestHelper2" = "請檢查網絡連接";
"HttpRequestHelper3" = "登錄已過期";
"HttpRequestHelper4" = "MoliStar開小差中~請稍後再試";
"HttpRequestHelper4" = "E-Parti開小差中~請稍後再試";
"HttpRequestHelper5" = "接口報錯信息未知";
"HttpRequestHelper6" = "請檢查網絡連接";
"HttpRequestHelper7" = "登錄已過期。";
"AppDelegate_ThirdConfig0" = "MoliStar";
"AppDelegate_ThirdConfig0" = "E-Parti";
"XPMineNotificaPresenter0" = "系統通知";
"XPMineNotificaPresenter1" = "關閉後,系統消息和官方小秘書不再提示";
@@ -545,7 +545,7 @@
"XPIAPRechargeViewController2" = "確定充值";
"XPIAPRechargeViewController3" = "《用戶充值協議》";
"XPIAPRechargeViewController4" = "已閱讀並同意";
"XPIAPRechargeViewController5" = "如有任何問題請咨詢客服,MoliStar號";
"XPIAPRechargeViewController5" = "如有任何問題請咨詢客服,E-Parti號";
"XPIAPRechargeViewController6" = "我的賬戶";
"XPIAPRechargeViewController7" = "提示";
"XPIAPRechargeViewController8" = "儲值失敗,請聯系客服處理~";
@@ -1263,7 +1263,7 @@
"RoomHeaderView1" = "在線:%ld ID:%ld";
"RoomHeaderView2" = "在線:%ld ID:%ld";
"RoomHeaderView3" = "複製鏈接";
"RoomHeaderView4" = "來MoliStar,開黑交友玩遊戲";
"RoomHeaderView4" = "來E-Parti,開黑交友玩遊戲";
"RoomHeaderView5" = "人美聲甜帶上分,一起來玩吧~";
"RoomHeaderView6" = "收藏成功";
"RoomHeaderView7" = "分享成功";
@@ -2204,7 +2204,7 @@
"XPLoginPwdViewController3" = "請輸入密碼";
"XPLoginPwdViewController4" = "手機號登錄";
"XPLoginPwdViewController5" = "忘記密碼";
"XPLoginPwdViewController6" = "請輸入MoliStar賬號";
"XPLoginPwdViewController6" = "請輸入E-Parti賬號";
"XPLoginBindPhoneResultViewController0" = "綁定手機";
"XPLoginBindPhoneResultViewController1" = "您當前綁定的手機號為";
@@ -3075,7 +3075,7 @@
"PIMessageContentServiceReplyView0"="如何儲值:";
"PIMessageContentServiceReplyView1"="復製";
"PIMessageContentServiceReplyView2"="1.在MoliStar語音App內前往【我的】-- 【儲值金幣】進行儲值";
"PIMessageContentServiceReplyView2"="1.在E-Parti語音App內前往【我的】-- 【儲值金幣】進行儲值";
"PIMessageContentServiceReplyView3"="2.聯系客服獲取儲值鏈接";
"PIMessageContentServiceReplyView4"="客服WeChat: %@ ";
"PIMessageContentServiceReplyView5"="客服Line%@ ";
@@ -3572,7 +3572,7 @@
"20.20.51_text_1" = "Email 登入";
"20.20.51_text_2" = "Welcome to MoliStar";
"20.20.51_text_2" = "Welcome to E-Parti";
"20.20.51_text_3" = "請輸入ID";
"20.20.51_text_4" = "請輸入信​​箱";
"20.20.51_text_7" = "請輸入驗證碼";