From 54b5f08e23df5fcc754181674e138b49475a2f90 Mon Sep 17 00:00:00 2001 From: zjx Date: Tue, 20 May 2025 10:34:39 +0800 Subject: [PATCH] =?UTF-8?q?tabbar=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Podfile | 12 ++- Podfile.lock | 10 ++- Veloria.xcodeproj/project.pbxproj | 4 +- Veloria/AppDelegate/AppDelegate.swift | 2 +- Veloria/AppDelegate/SceneDelegate.swift | 2 +- .../Controller/VPNavigationController.swift | 2 +- .../Base/Controller/VPTabBarController.swift | 50 ++++++++++-- .../Base/Controller/VPViewController.swift | 2 +- Veloria/Base/Define/VPDefine.swift | 2 +- Veloria/Base/Extension/UIColor+VPAdd.swift | 2 +- Veloria/Base/Extension/UIDevice+VPAdd.swift | 2 +- Veloria/Base/Extension/UIFont+VPAdd.swift | 2 +- Veloria/Base/Extension/UIScreen+VPAdd.swift | 2 +- Veloria/Base/Extension/UIView+VPAdd.swift | 2 +- Veloria/Base/Model/VPModel.swift | 2 +- .../Networking/Base/VPCryptorService.swift | 2 +- Veloria/Base/View/TabBar/VPTabBar.swift | 2 +- Veloria/Base/View/TabBar/VPTabBarItem.swift | 19 ++++- .../View/TabBar/VPTabBarItemContainer.swift | 4 +- .../View/TabBar/VPTabBarItemContentView.swift | 76 ++++++++++++------ .../View/TabBar/VPTabBarItemNormalVew.swift | 2 +- .../TabBar/VPTabBarItemSelectedView.swift | 56 ++++++++++++- Veloria/Base/View/VPGradientView.swift | 2 +- .../Controller/VPHomePageViewController.swift | 2 +- Veloria/Libs/AppTool/VPAppTool.swift | 2 +- .../LocalizedManager/VPLocalizedManager.swift | 2 +- .../Source/Assets.xcassets/icon/Contents.json | 6 ++ .../Assets.xcassets/tabbar/Contents.json | 6 ++ .../tabbar_icon_01.imageset/Contents.json | 22 +++++ .../tabbar_icon_01.imageset/Frame@2x.png | Bin 0 -> 915 bytes .../tabbar_icon_01.imageset/Frame@3x.png | Bin 0 -> 1234 bytes .../Contents.json | 22 +++++ .../Frame@2x.png | Bin 0 -> 487 bytes .../Frame@3x.png | Bin 0 -> 651 bytes .../tabbar_icon_02.imageset/Contents.json | 22 +++++ .../tabbar_icon_02.imageset/Frame@2x.png | Bin 0 -> 800 bytes .../tabbar_icon_02.imageset/Frame@3x.png | Bin 0 -> 1152 bytes .../Contents.json | 22 +++++ .../Frame@2x.png | Bin 0 -> 449 bytes .../Frame@3x.png | Bin 0 -> 654 bytes .../tabbar_icon_03.imageset/Contents.json | 22 +++++ .../tabbar_icon_03.imageset/Frame@2x.png | Bin 0 -> 691 bytes .../tabbar_icon_03.imageset/Frame@3x.png | Bin 0 -> 945 bytes .../Contents.json | 22 +++++ .../Frame@2x.png | Bin 0 -> 382 bytes .../Frame@3x.png | Bin 0 -> 476 bytes .../tabbar_icon_04.imageset/Contents.json | 22 +++++ .../tabbar_icon_04.imageset/Frame@2x.png | Bin 0 -> 1016 bytes .../tabbar_icon_04.imageset/Frame@3x.png | Bin 0 -> 1466 bytes .../Contents.json | 22 +++++ .../Frame@2x.png | Bin 0 -> 516 bytes .../Frame@3x.png | Bin 0 -> 714 bytes Veloria/Source/en.lproj/Localizable.strings | 2 +- 53 files changed, 394 insertions(+), 63 deletions(-) create mode 100644 Veloria/Source/Assets.xcassets/icon/Contents.json create mode 100644 Veloria/Source/Assets.xcassets/tabbar/Contents.json create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01.imageset/Contents.json create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01.imageset/Frame@2x.png create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01.imageset/Frame@3x.png create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01_selected.imageset/Contents.json create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01_selected.imageset/Frame@2x.png create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01_selected.imageset/Frame@3x.png create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_02.imageset/Contents.json create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_02.imageset/Frame@2x.png create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_02.imageset/Frame@3x.png create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_02_selected.imageset/Contents.json create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_02_selected.imageset/Frame@2x.png create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_02_selected.imageset/Frame@3x.png create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03.imageset/Contents.json create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03.imageset/Frame@2x.png create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03.imageset/Frame@3x.png create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03_selected.imageset/Contents.json create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03_selected.imageset/Frame@2x.png create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03_selected.imageset/Frame@3x.png create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_04.imageset/Contents.json create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_04.imageset/Frame@2x.png create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_04.imageset/Frame@3x.png create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_04_selected.imageset/Contents.json create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_04_selected.imageset/Frame@2x.png create mode 100644 Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_04_selected.imageset/Frame@3x.png diff --git a/Podfile b/Podfile index 985ab05..2b1935a 100644 --- a/Podfile +++ b/Podfile @@ -1,7 +1,17 @@ # Uncomment the next line to define a global platform for your project -source 'https://github.com/CocoaPods/Specs.git' +#source 'https://github.com/CocoaPods/Specs.git' platform :ios, '15.6' +post_install do |installer| + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['ENABLE_BITCODE'] = 'NO' + config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" + config.build_settings['EXCLUDED_ARCHITECTURES'] = 'i386' + end + end +end + target 'Veloria' do use_frameworks! diff --git a/Podfile.lock b/Podfile.lock index adc154f..988c46a 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -11,7 +11,9 @@ PODS: - Moya/Core (= 15.0.0) - Moya/Core (15.0.0): - Alamofire (~> 5.0) - - SmartCodable (4.3.9) + - SmartCodable (5.0.9): + - SmartCodable/Core (= 5.0.9) + - SmartCodable/Core (5.0.9) - SnapKit (5.7.1) - Toast (4.1.1) - YYKit (1.0.9): @@ -35,7 +37,7 @@ DEPENDENCIES: - ZFPlayer/AVPlayer SPEC REPOS: - https://github.com/CocoaPods/Specs.git: + trunk: - Alamofire - CocoaAsyncSocket - ESTabBarController-swift @@ -59,12 +61,12 @@ SPEC CHECKSUMS: KTVHTTPCache: 5711692cdf9a5ecfe829b1e16577deb3ffe3dc86 MJRefresh: ff9e531227924c84ce459338414550a05d2aea78 Moya: 138f0573e53411fb3dc17016add0b748dfbd78ee - SmartCodable: efc682e18fb5eac77f4c0497e37c79590710c192 + SmartCodable: 68b3598438181a938eed8ee5623e58ef3e3ea443 SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e YYKit: 7cda43304a8dc3696c449041e2cb3107b4e236e7 ZFPlayer: 5cf39e8d9f0c2394a014b0db4767b5b5a6bffe13 -PODFILE CHECKSUM: d4ff89d9ef2517ec087add019c6f39f8e9ee69d0 +PODFILE CHECKSUM: 41b6b69056545708f3956ded0b47fda298f175b8 COCOAPODS: 1.16.2 diff --git a/Veloria.xcodeproj/project.pbxproj b/Veloria.xcodeproj/project.pbxproj index 4f33ab1..f6bd9d8 100644 --- a/Veloria.xcodeproj/project.pbxproj +++ b/Veloria.xcodeproj/project.pbxproj @@ -492,7 +492,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = TWDZ3MP9DV; + DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Veloria/Source/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; @@ -527,7 +527,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = TWDZ3MP9DV; + DEVELOPMENT_TEAM = ""; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Veloria/Source/Info.plist; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; diff --git a/Veloria/AppDelegate/AppDelegate.swift b/Veloria/AppDelegate/AppDelegate.swift index 5739495..2b7ecae 100644 --- a/Veloria/AppDelegate/AppDelegate.swift +++ b/Veloria/AppDelegate/AppDelegate.swift @@ -2,7 +2,7 @@ // AppDelegate.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/AppDelegate/SceneDelegate.swift b/Veloria/AppDelegate/SceneDelegate.swift index 2d8d922..b73a072 100644 --- a/Veloria/AppDelegate/SceneDelegate.swift +++ b/Veloria/AppDelegate/SceneDelegate.swift @@ -2,7 +2,7 @@ // SceneDelegate.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Base/Controller/VPNavigationController.swift b/Veloria/Base/Controller/VPNavigationController.swift index 160c0dc..598a8cc 100644 --- a/Veloria/Base/Controller/VPNavigationController.swift +++ b/Veloria/Base/Controller/VPNavigationController.swift @@ -2,7 +2,7 @@ // VPNavigationController.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Base/Controller/VPTabBarController.swift b/Veloria/Base/Controller/VPTabBarController.swift index e203a15..fa29331 100644 --- a/Veloria/Base/Controller/VPTabBarController.swift +++ b/Veloria/Base/Controller/VPTabBarController.swift @@ -2,13 +2,48 @@ // VPTabBarController.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit import ESTabBarController_swift class VPTabBarController: UITabBarController { + + private var ignoreNextSelection = false + + override var selectedViewController: UIViewController? { + willSet { + guard let newValue = newValue else { + // if newValue == nil ... + return + } + + guard !ignoreNextSelection else { + ignoreNextSelection = false + return + } + + guard let tabBar = self.tabBar as? VPTabBar, let index = viewControllers?.firstIndex(of: newValue) else { + return + } + tabBar.select(itemAtIndex: index, animated: false) + } + } + + override var selectedIndex: Int { + willSet { + guard let tabBar = self.tabBar as? VPTabBar else { + return + } + guard !ignoreNextSelection else { + ignoreNextSelection = false + return + } + + tabBar.select(itemAtIndex: newValue, animated: false) + } + } override func viewDidLoad() { super.viewDidLoad() @@ -48,10 +83,10 @@ extension VPTabBarController { - let nav1 = createNavigationController(viewController: VPHomePageViewController(), title: "Home".localized, image: UIImage(named: ""), selectedImage: UIImage(named: "")) - let nav2 = createNavigationController(viewController: VPHomePageViewController(), title: "Home".localized, image: UIImage(named: ""), selectedImage: UIImage(named: "")) - let nav3 = createNavigationController(viewController: VPHomePageViewController(), title: "Home".localized, image: UIImage(named: ""), selectedImage: UIImage(named: "")) - let nav4 = createNavigationController(viewController: VPHomePageViewController(), title: "Home".localized, image: UIImage(named: ""), selectedImage: UIImage(named: "")) + let nav1 = createNavigationController(viewController: VPHomePageViewController(), title: "Home".localized, image: UIImage(named: "tabbar_icon_01"), selectedImage: UIImage(named: "tabbar_icon_01_selected")) + let nav2 = createNavigationController(viewController: VPHomePageViewController(), title: "Home".localized, image: UIImage(named: "tabbar_icon_02"), selectedImage: UIImage(named: "tabbar_icon_02_selected")) + let nav3 = createNavigationController(viewController: VPHomePageViewController(), title: "Home".localized, image: UIImage(named: "tabbar_icon_03"), selectedImage: UIImage(named: "tabbar_icon_03_selected")) + let nav4 = createNavigationController(viewController: VPHomePageViewController(), title: "Home".localized, image: UIImage(named: "tabbar_icon_03"), selectedImage: UIImage(named: "tabbar_icon_04_selected")) viewControllers = [nav1, nav2, nav3, nav4] @@ -68,6 +103,9 @@ extension VPTabBarController { // tabBarItem.contentView?.titleLabel.font = .fontRegular(ofSize: 13) let tabBarItem = VPTabBarItem() + tabBarItem.title = title + tabBarItem.image = image + tabBarItem.selectedImage = selectedImage let nav = VPNavigationController(rootViewController: viewController) // nav.tabBarItem.title = title @@ -89,7 +127,7 @@ extension VPTabBarController { // return; // } if let vc = viewControllers?[idx] { -// ignoreNextSelection = true + ignoreNextSelection = true selectedIndex = idx delegate?.tabBarController?(self, didSelect: vc) } diff --git a/Veloria/Base/Controller/VPViewController.swift b/Veloria/Base/Controller/VPViewController.swift index 37f92df..f25dfe0 100644 --- a/Veloria/Base/Controller/VPViewController.swift +++ b/Veloria/Base/Controller/VPViewController.swift @@ -2,7 +2,7 @@ // VPViewController.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Base/Define/VPDefine.swift b/Veloria/Base/Define/VPDefine.swift index 84d0589..cf7e350 100644 --- a/Veloria/Base/Define/VPDefine.swift +++ b/Veloria/Base/Define/VPDefine.swift @@ -2,7 +2,7 @@ // VPDefine.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Base/Extension/UIColor+VPAdd.swift b/Veloria/Base/Extension/UIColor+VPAdd.swift index 2ddb164..d9060aa 100644 --- a/Veloria/Base/Extension/UIColor+VPAdd.swift +++ b/Veloria/Base/Extension/UIColor+VPAdd.swift @@ -2,7 +2,7 @@ // UIColor+VPAdd.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Base/Extension/UIDevice+VPAdd.swift b/Veloria/Base/Extension/UIDevice+VPAdd.swift index 0ce6a09..3004d14 100644 --- a/Veloria/Base/Extension/UIDevice+VPAdd.swift +++ b/Veloria/Base/Extension/UIDevice+VPAdd.swift @@ -2,7 +2,7 @@ // UIDevice+VPAdd.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Base/Extension/UIFont+VPAdd.swift b/Veloria/Base/Extension/UIFont+VPAdd.swift index ba05f5d..026ead5 100644 --- a/Veloria/Base/Extension/UIFont+VPAdd.swift +++ b/Veloria/Base/Extension/UIFont+VPAdd.swift @@ -2,7 +2,7 @@ // UIFont+VPAdd.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Base/Extension/UIScreen+VPAdd.swift b/Veloria/Base/Extension/UIScreen+VPAdd.swift index 101fdcb..5d134f2 100644 --- a/Veloria/Base/Extension/UIScreen+VPAdd.swift +++ b/Veloria/Base/Extension/UIScreen+VPAdd.swift @@ -2,7 +2,7 @@ // UIScreen+VPAdd.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Base/Extension/UIView+VPAdd.swift b/Veloria/Base/Extension/UIView+VPAdd.swift index 7ce825f..6e66be5 100644 --- a/Veloria/Base/Extension/UIView+VPAdd.swift +++ b/Veloria/Base/Extension/UIView+VPAdd.swift @@ -2,7 +2,7 @@ // UIView+VPAdd.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Base/Model/VPModel.swift b/Veloria/Base/Model/VPModel.swift index 89f8a2b..9d6f895 100644 --- a/Veloria/Base/Model/VPModel.swift +++ b/Veloria/Base/Model/VPModel.swift @@ -2,7 +2,7 @@ // VPModel.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Base/Networking/Base/VPCryptorService.swift b/Veloria/Base/Networking/Base/VPCryptorService.swift index 1ae7791..77bc86e 100644 --- a/Veloria/Base/Networking/Base/VPCryptorService.swift +++ b/Veloria/Base/Networking/Base/VPCryptorService.swift @@ -2,7 +2,7 @@ // VPCryptorService.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Base/View/TabBar/VPTabBar.swift b/Veloria/Base/View/TabBar/VPTabBar.swift index c59c805..f61e085 100644 --- a/Veloria/Base/View/TabBar/VPTabBar.swift +++ b/Veloria/Base/View/TabBar/VPTabBar.swift @@ -2,7 +2,7 @@ // VPTabBar.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Base/View/TabBar/VPTabBarItem.swift b/Veloria/Base/View/TabBar/VPTabBarItem.swift index 9689648..f677a1a 100644 --- a/Veloria/Base/View/TabBar/VPTabBarItem.swift +++ b/Veloria/Base/View/TabBar/VPTabBarItem.swift @@ -2,7 +2,7 @@ // VPTabBarItem.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit @@ -12,6 +12,23 @@ class VPTabBarItem: UITabBarItem { private(set) var contentView: VPTabBarItemContentView + override var title: String? { + didSet { + contentView.title = title + } + } + override var image: UIImage? { + didSet { + contentView.image = image + } + } + + override var selectedImage: UIImage? { + didSet { + contentView.selectedImage = selectedImage + } + } + public init(_ contentView: VPTabBarItemContentView = VPTabBarItemContentView(), title: String? = nil, image: UIImage? = nil, selectedImage: UIImage? = nil, tag: Int = 0) { self.contentView = contentView super.init() diff --git a/Veloria/Base/View/TabBar/VPTabBarItemContainer.swift b/Veloria/Base/View/TabBar/VPTabBarItemContainer.swift index 70635bb..66aee3e 100644 --- a/Veloria/Base/View/TabBar/VPTabBarItemContainer.swift +++ b/Veloria/Base/View/TabBar/VPTabBarItemContainer.swift @@ -2,7 +2,7 @@ // VPTabBarItemContainer.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit @@ -38,7 +38,7 @@ class VPTabBarItemContainer: UIControl { super.layoutSubviews() if let contentView = contentView { contentView.frame = self.bounds - contentView.updateLayout() +// contentView.updateLayout() } } diff --git a/Veloria/Base/View/TabBar/VPTabBarItemContentView.swift b/Veloria/Base/View/TabBar/VPTabBarItemContentView.swift index 2006870..edc728a 100644 --- a/Veloria/Base/View/TabBar/VPTabBarItemContentView.swift +++ b/Veloria/Base/View/TabBar/VPTabBarItemContentView.swift @@ -2,7 +2,7 @@ // VPTabBarItemContentView.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit @@ -19,22 +19,37 @@ class VPTabBarItemContentView: UIView { /// 是否支持高亮 open var highlightEnabled = true + var title: String? { + didSet { + selectedView.title = title + } + } + var image: UIImage? { + didSet { + normalView.image = image + } + } + + var selectedImage: UIImage? { + didSet { + selectedView.image = selectedImage + } + } private lazy var normalView: VPTabBarItemNormalVew = { let view = VPTabBarItemNormalVew() - view.isHidden = false + view.alpha = 1 return view }() private lazy var selectedView: VPTabBarItemSelectedView = { let view = VPTabBarItemSelectedView() - view.isHidden = true + view.alpha = 0 return view }() override init(frame: CGRect) { super.init(frame: frame) - backgroundColor = .yellow self.isUserInteractionEnabled = false self.layer.masksToBounds = true @@ -66,8 +81,8 @@ class VPTabBarItemContentView: UIView { } func updateLayout() { - normalView.isHidden = selected - selectedView.isHidden = !selected +// normalView.isHidden = selected +// selectedView.isHidden = !selected } } @@ -138,28 +153,41 @@ extension VPTabBarItemContentView { // MARK: - ANIMATION METHODS func selectAnimation(animated: Bool, completion: (() -> ())?) { - self.selectedView.isHidden = false - self.normalView.isHidden = true - - -// UIView.animate(withDuration: VPTabBar.animateDuration) { -// -// -// -// } completion: { finish in -// <#code#> -// } + if animated { + UIView.animate(withDuration: VPTabBar.animateDuration) { [weak self] in + guard let self = self else { return } + self.selectedView.alpha = 1 + self.normalView.alpha = 0 + } completion: { finis in + completion?() + } + + } else { + self.selectedView.alpha = 1 + self.normalView.alpha = 0 + completion?() + } - - - - completion?() } func deselectAnimation(animated: Bool, completion: (() -> ())?) { - self.selectedView.isHidden = true - self.normalView.isHidden = false - completion?() + + if animated { + UIView.animate(withDuration: VPTabBar.animateDuration) { [weak self] in + guard let self = self else { return } + self.selectedView.alpha = 0 + self.normalView.alpha = 1 + } completion: { finis in + completion?() + } + + } else { + self.selectedView.alpha = 0 + self.normalView.alpha = 1 + completion?() + } + + } func reselectAnimation(animated: Bool, completion: (() -> ())?) { diff --git a/Veloria/Base/View/TabBar/VPTabBarItemNormalVew.swift b/Veloria/Base/View/TabBar/VPTabBarItemNormalVew.swift index ae756af..0d83526 100644 --- a/Veloria/Base/View/TabBar/VPTabBarItemNormalVew.swift +++ b/Veloria/Base/View/TabBar/VPTabBarItemNormalVew.swift @@ -2,7 +2,7 @@ // VPTabBarItemNormalVew.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Base/View/TabBar/VPTabBarItemSelectedView.swift b/Veloria/Base/View/TabBar/VPTabBarItemSelectedView.swift index 8787759..455add5 100644 --- a/Veloria/Base/View/TabBar/VPTabBarItemSelectedView.swift +++ b/Veloria/Base/View/TabBar/VPTabBarItemSelectedView.swift @@ -2,14 +2,26 @@ // VPTabBarItemSelectedView.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit class VPTabBarItemSelectedView: VPGradientView { - private lazy var contentView: UIView = { + var image: UIImage? { + didSet { + iconImageView.image = image + } + } + + var title: String? { + didSet { + titleLabel.text = title + } + } + + private lazy var bgView: UIView = { let view = UIView() view.backgroundColor = .color353537() view.layer.cornerRadius = VPTabBar.itemMinWidth / 2 - 3 @@ -17,6 +29,23 @@ class VPTabBarItemSelectedView: VPGradientView { return view }() + private lazy var contentView: UIView = { + let view = UIView() + return view + }() + + private lazy var iconImageView: UIImageView = { + let imageView = UIImageView() + return imageView + }() + + private lazy var titleLabel: UILabel = { + let label = UILabel() + label.font = .fontRegular(ofSize: 13) + label.textColor = .colorFFFFFF() + return label + }() + override init(frame: CGRect) { super.init(frame: frame) colors = [UIColor.color7C174F().cgColor, UIColor.color05CEA0().cgColor] @@ -41,14 +70,33 @@ class VPTabBarItemSelectedView: VPGradientView { extension VPTabBarItemSelectedView { private func vp_setupUI() { - addSubview(contentView) + addSubview(bgView) + bgView.addSubview(contentView) + contentView.addSubview(iconImageView) + contentView.addSubview(titleLabel) - contentView.snp.makeConstraints { make in + bgView.snp.makeConstraints { make in make.left.equalToSuperview().offset(3) make.top.equalToSuperview().offset(3) make.center.equalToSuperview() } + contentView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.centerX.equalToSuperview() + } + + iconImageView.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.left.equalToSuperview() + } + + titleLabel.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.left.equalTo(iconImageView.snp.right).offset(8) + make.right.equalToSuperview() + } + } } diff --git a/Veloria/Base/View/VPGradientView.swift b/Veloria/Base/View/VPGradientView.swift index 76cf4ea..72af5ef 100644 --- a/Veloria/Base/View/VPGradientView.swift +++ b/Veloria/Base/View/VPGradientView.swift @@ -2,7 +2,7 @@ // VPGradientView.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Class/Home/Controller/VPHomePageViewController.swift b/Veloria/Class/Home/Controller/VPHomePageViewController.swift index 4844608..5306f39 100644 --- a/Veloria/Class/Home/Controller/VPHomePageViewController.swift +++ b/Veloria/Class/Home/Controller/VPHomePageViewController.swift @@ -2,7 +2,7 @@ // VPHomePageViewController.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Libs/AppTool/VPAppTool.swift b/Veloria/Libs/AppTool/VPAppTool.swift index 6aceb05..f48e12d 100644 --- a/Veloria/Libs/AppTool/VPAppTool.swift +++ b/Veloria/Libs/AppTool/VPAppTool.swift @@ -2,7 +2,7 @@ // VPAppTool.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Libs/LocalizedManager/VPLocalizedManager.swift b/Veloria/Libs/LocalizedManager/VPLocalizedManager.swift index d289701..92e1725 100644 --- a/Veloria/Libs/LocalizedManager/VPLocalizedManager.swift +++ b/Veloria/Libs/LocalizedManager/VPLocalizedManager.swift @@ -2,7 +2,7 @@ // VPLocalizedManager.swift // Veloria // -// Created by 佳尔 on 2025/5/19. +// Created by Veloria on 2025/5/19. // import UIKit diff --git a/Veloria/Source/Assets.xcassets/icon/Contents.json b/Veloria/Source/Assets.xcassets/icon/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Veloria/Source/Assets.xcassets/icon/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/tabbar/Contents.json b/Veloria/Source/Assets.xcassets/tabbar/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Veloria/Source/Assets.xcassets/tabbar/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01.imageset/Contents.json b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01.imageset/Contents.json new file mode 100644 index 0000000..5c4d3b1 --- /dev/null +++ b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01.imageset/Frame@2x.png b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01.imageset/Frame@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ae43cb2d204a87c38c26b98f2165f0218456bf5b GIT binary patch literal 915 zcmV;E18n?>P)XVe0I49Pg7C=TZnuh90`eu;c%GQY&IFb-`w2HipAngV!)bEr_)KNQmJov&7BNQ z&|fPQ3Ujf56`_8=pCczc4xU9Kk?8JrI|pqBZ5r)-yWKujDwVDnA}NLdnL3)WA~RX9 z*PlzJQmtGryQ|eIkG`%V)xq4aVu;8Rf{L8m+uJ5Kdr)1^AkmOu((Kn{x*%P1U3Vex zMTqtSGGm?`Ul(X=m(cd!ZuzVw69n+Z{j^r(;TF-cx`bFkZWGDt3Z{Vx-=Ggg5kbM3_#M4 zI8;-8rKH`U!@VKIK!+c8wC?e^af6-7+CD-`GE-459Vft@gW7{JjM05ToAmCH@=jKs zw6_-+<%3)Sv@0}O*k>COx`$oTH1c}5#X~tq5libn-5@K5Z5qR}huRr9J5TNf`_0edQmMep`wH)m1SQq&SA$w2c zV1N$F%keo6@fK4N5E!Spw!R6|D^b6<^_b7g5JOx{)VEZUq8hyg7B2u=%o8~ejxi3^ zvBnqg00^YHJ`=OPV*AD=_yi5!2)vct3C{k};9W!h{^4*69<&7kyqre#&>~Bft3I(~ pky+HV!1RKs?JLsoeI8Z?`~mDaz`Y)2uBHG0002ovPDHLkV1l$GlT!cy literal 0 HcmV?d00001 diff --git a/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01.imageset/Frame@3x.png b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01.imageset/Frame@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b386deb346fb73593d5e1314ac703d540f6a587b GIT binary patch literal 1234 zcmV;@1TFiCP) z;y@I=DEd3h4#Ey}1p}X!kC7E9D^OMdu0ULY%nGo4l%K{G;Ov0e0sp?{9O*Efm`5kv zDAsVQQZz{?>682H+by!h68{%&Z*M&w@C!&D4iP4^n>NRE$g?iy=ZEtTsWZdhmt*zZr zYSw8V&uh=Cnsce*&CSgQ21eCuSf_nBgv~5c1f0egeVb@rSf?A$&(C-BhK9ltgX$g0 zRP}6CI)N(nqyX@|o=ii-43K1JZ*Q+J1yG0>4E;3X$|o2^8-uuzIe_Qx!_l1Ds)=?V z&+SM~}klXm=))ae|Y?j6H>P z9bd7NkoLl|xF@`NP=_(+r|rW}at*o)_;MMpQF16-y+R5Mv%-V=e9U zCksVvyOQ*v7*fo}Qq`DE8+x~1)1Y;y^Tc%T=AkRFH>-$b(Oh$3@ zth0$v16d##?|5gOYDR7Toy0)uz-kW`jTB)>oLQ%$o-<60wk1~H2mMvaw95cguxI^k z(1Y98L&QMDo*eog?fvq=xOzYMkFhuG>mg!LJ)79QEIxh*4dj@feW5CfFtv_-d>}8+ zeQ;3Yg0?)do)J<-HDU>|&k6VtoKbf*lWDb@M>O{3MOsWM0yT-*`J_x;v1>_Zn4Db0}m3lu(TW#6ZvS`^V*8e28zh3TxSz zrdMR~rol!;EmMKMvok2 znlP2BxvEtfP_5lB5|+fi8q{r!U^2YEzV5xeywtM#mR0RiCl=K7T}TlK<}Bw8w3d$o zXfOP6iq0ac6Dh)E9X*5z)nbvV#1Ov@txSR`)ZMX-r`1lbt zB4ZB|!<>p21F6-tV~Zv@Jrb)%f?`rKF%v^(HF3rkF1*Qtfi)H`!Uz93^NyAj-Z>9Q zt#8eQYjD9MW)#udcoaoTZx~==(K8B;fn(veCOc-v&Ajt0{1Lt+!``~*yhs?c&g>_2 z<+D8rJGBWuOfzn?Ox~s1Oyu3VVAi=uMc$LPttoTYfLRD+#_nQkh4w+^{D?k|`>Y*6 w&Kp?FX0SwZv=x{AQ)!^1N=vKgwOy0szg%=gG~kNSqW}N^07*qoM6N<$f-^xpbN~PV literal 0 HcmV?d00001 diff --git a/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01_selected.imageset/Contents.json b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01_selected.imageset/Contents.json new file mode 100644 index 0000000..5c4d3b1 --- /dev/null +++ b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01_selected.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01_selected.imageset/Frame@2x.png b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01_selected.imageset/Frame@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4fbb0965e8904acb10b3327f22696bfe66ab1f03 GIT binary patch literal 487 zcmV!SyVHL=uC~*qBt}kzOId z9LI6~I0G{>6cRy1Pkhj zt_bnLAP*&L#j`-wTv&88+#(;EbvBk=MJjWY8ti*jAdncREb)`8gPZAn zZDyyW#O9Qxf;-tYQbF~SSIXLB>m$IHPT|xM{twh7M>o&K_M@O!g2Y~ du3%<{@COwY$=qnXE=>Rc002ovPDHLkV1j$D*4O|5 literal 0 HcmV?d00001 diff --git a/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01_selected.imageset/Frame@3x.png b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_01_selected.imageset/Frame@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9487737209447a9dad3218c9ac925ecc6088c79a GIT binary patch literal 651 zcmV;60(AX}P)xjJR%`-sP_R99I-TNLg*zC)!g_q!ARb{7 z!IracqiYqkEf-;nUE+~ja9b`kX*rqi3B=9vQemYyQYp|7@gwKkGe31LH$pmOaO~JVV8;MA>@A_h6;N}}4wlH&3QD9mMj46& z?=Hd)_u@u`5*G!b#P#8h&%GyviaEKEo%8h@YG5%%3d?XKDide9a6(!<94~>|m`jyb zT&lFKd|(ItT-Qb2D-iN0vv}8#{0~xu>HB=e&0z`O^Fn@zmIe9#?Z6Mn$oznR21m&JL&{XG@_#YoW8=~aK&8}9fouhm2o_kj!@3;(wmnJNiOJlRy82kO+kaXY`3Iz{qI{kj%lPIL7)9C;& ze?hk)83F6xmr5nG*=)N1jUSslpU=mz%s}7rYg{bgND9EZRWt^!dVt)Z-ERLpNeUJk zVbU$hV1cjQZr73wFqupYSZS!eA;n_xs?};aAyS-JE|*vAqpdwRYZjQzW_M_AaM_(s z=UNdAPN-BWJ;fBh&VvwvfFH^sL>e$kHAD(zKC#{Hb`O#h^bS;RgF71`QXo^+3d&bm^@`KjgU?nm#&eSB!HX?%MH-|p@({xzMHvD zA^ZQ8h)ASU=iqA?^h?DPTxnnWZYHD<*gaTi6eyw1D0Nv9_bKJ}%MF6TjO!7BJ<)`0 zT-OYIiGU=QV!6?vix!K;15yktNPp||a9~2a?j#11SjyDx5OMRQOK3GtIfzS$h;1pj z#D?o?u+#{*OfSx{lS!_m2x<`r5f!e0)FqfMrM2drah%QC&yJQSjuPh4L*A<0A=-94Hj7Rkl1ffADeD1)d zsU5pebJel-M>&WsOBIl2adDx^mc5 emLEs&h=YHlsW`5#a7iiv0000M3E@X+p*j2R##S5!g9I%?e+DwhNb|&suYV6euGk} zG<P<#U36?FQV`jygO)Kc~hLAMp72 z7>yBe_;XZ_cjS6g)luBN`Us41Xv@ljPLo?(ThoDhDE|o5x*LZKKBvgRW;HqQXDtn7 z`M~(l_kuxgi6vYsvqV~(n%Ty(wC!CojlmbO}7;mSm z#!Q}qoi$*FO(=;v zN$S3MzYi631CmY28BWMyz)`G(2#=%@l>|vrxuZI;?aEZ|uCA_Xk`opZ3P=*O`30nQ zW2PFw+1zqHG7BIXvCue2kGZ+I$yt1}^Wb_kS%6INB8YRpNK=ii$C}w`zZ>2t6uTZp z?ahF%k^$byFU;WY97w4YNCtREPNz6vrkQpnUXf$0!)zVfI?4md0O!Ja9#CA%Bt;k6 zHiihyVy67fLdj8FLxUdD_3L&L!>^Gw>AMheCQZ*=BQuLuXs^gfjCVC)zkY|eC2{{b>OiUJ-nh}J!c19?(?alrU=*uLd-ItubOATSnwf0lBCQZ#y#fvf|*RjZy~3zX5SY`!i73RtR9zjf4tacj-q(~%U7?-t6IBB zdUftAi8KY80q1zP!_sW@ SYB8Ju0000C z!!QtqUm^zR2w?)c0cC@3P>%o;6gFUkgb84S!UVts^#-uP@vIcdwP+eUwi~K^(#du6 z_sOx(rvMZED7p@c$ehg_anX#AqA0$7E;2Gp##Yi&GpfEqYstr!F*_zyNq!z(kJ9NY zPe_IMWpU+PYjRv8VW=ol z9rsY;zeOqg9?|C%H`<1AiT2fM1dwc^Q|un?eDkXYka+b`Oe0_s9$ zCPkq&n|C;yZ67WW8Oki!)CiFIC3vKE54Za!d2aY~GepQRWTc)caffyyn>y?kkr*On z%A6Vrm`azvxKiGUE)v@AxKeL84chLwQZLBQ>u!%cjL9{Um*d|mc+yP5D@Y%{8t*SJ6aRr9e?>laOKjW~00000NkvXXu0mjfi%zz( literal 0 HcmV?d00001 diff --git a/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_02_selected.imageset/Frame@3x.png b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_02_selected.imageset/Frame@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..910908cc611f61e2910c3a7c4b30ec669bc3f8f9 GIT binary patch literal 654 zcmV;90&)F`P)Ajzf*LU{5QtFC^43)# zW_O^?PgNiwq0CLCx#ijRs}dc>MML$uf?Cqdis=tbTycbs!-kD-1$AHWI%;(R`*_1k z4iKeEHkT?ka~0B~vSl{R)ln;NyWx(gY?-cRxkg%8<1a3AW2D8(mT5It$1GwMI;ceJ1^%C@QH>X?d{j=u>-Q ocF(E;-LTo}l#_dzOr|@20YF@ahhXsood5s;07*qoM6N<$f)vvkGynhq literal 0 HcmV?d00001 diff --git a/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03.imageset/Contents.json b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03.imageset/Contents.json new file mode 100644 index 0000000..5c4d3b1 --- /dev/null +++ b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03.imageset/Frame@2x.png b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03.imageset/Frame@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..42f59994513b4966289350c75885df909f1f80e1 GIT binary patch literal 691 zcmV;k0!;mhP)tb z>Oc^N$6$CpoC=Ol2T2Fy5phwdAfW=13PLJ?R1kN7!$mye4&o9>1@SZDlK;2X$|ex9 zmTW7L{7cL3+AI8dW_LZaB87gjEJ>*8bXwo<_fDtNaZimKkH@u2rE*;^m%T=#v62KT zB^f-M&8|=_Ez5cY+?|{NvTb___~CZDT`m?2M-s>wN?FL&E)5jqfncE_sx!c^XjOs{ zRMLimV$0m4T(CjN&tT|3;`%k3UaQsmk2)Y&wOYLtLnVPCjNt9B;2K(>r@%(@`TUG+ zx>NxLo6V-DTpU?!yyGIby2Qn{rU_fbMz^Au2s`WF3vXb-gh z>WlvrzNEewEDgxP&1W=?eV?WXjuk!n00mPMh;9f_LdjQk{=nsbyWMVRv!hl>}hq>UOdqwm!0x^mV)bESOY5JNVIw8r5^zW3;ogi`b2+4Rf8$JaAR&0 z9nY(kN~Iw;SadHir+r(y|A2A_pt0mAJda?}e8v~RkFMzh@QJv=0Pez^aG7omfN*FX zwGlsIj~vAt=t1ZbFHcdXl#Dc)Ok94l;JRM3*>v@L#p*Lv0cENJ%2WlEsR}4l6;QfV zwj)SX4?g+_P;qD~Dwxkg%n2AJu#Idwknf-{*j3GboMfgA#I#-ob^fu#kE5q92w#|g z^;OqTGob(slUK%TA!4X=V<-hSkoWV0wB;j?x!2h?RHz=?RIaaQmIWBG8hb=@F+*4(dT?V zKcgFP6LCV=1i>W7A@CUjTj!RCusR+M5nVuF_7(!Q#d(FfFOEd2g+ifos=Vm2mZ$7I z7K>$bx!jyIh>`}~Za0Nq>XJtogY-5kejikRI2=CEzOb1no7!wPlks?*A`P^}p>-Qv z5mBMHVzJ1U&{VQ?xo3}+W#QZaGLG;g%4cAbJrQStb<#jf94g|D3z*VZexiabSej#! zP1Y+=#JfsTlP4iz32t7L{XshQBMmU7T8fY~%hU*TibIm#K`Da-PKSJ!33;^S~jQTob9lghEXTu503~Z86{Yyj_7|>tH z5X3z3TgJtDdwjOMWH5&TbrMn0UJAmD6=y1{IM;5)qG}90p&U!!Tg35s#50cEaPn5< zCz-(=CPBHrO)*<$IS}_`dcmKw%}_EMh4LYP_-%>a;}6?=G7uIfb|el*j~Vb~U&UTc z{S@nkY3&nxKDqDXod@sxcqcJc^ZA~kczQ7FE%=e3ZVeK{hs3t&SU$VXnTi!>Dps7S zSaGIe#hHo~XDU{lsaSEQ@;Sxfn8DbiK8de5+?@PzGex5*3K6K!oeZPlef?E}%yO!{ z;DJJdxKnqp+HlQwxj6J3yG%&aObaic4+mFOuS#?l;rQun44vVY2_H-T2E@in~F8r>BKP`U&hrE&E Tw&J&v00000NkvXXu0mjf=$fu~ literal 0 HcmV?d00001 diff --git a/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03_selected.imageset/Contents.json b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03_selected.imageset/Contents.json new file mode 100644 index 0000000..5c4d3b1 --- /dev/null +++ b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03_selected.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03_selected.imageset/Frame@2x.png b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03_selected.imageset/Frame@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..74008e5436c4d2b5c2f2a41a9a5587176832a3d0 GIT binary patch literal 382 zcmV-^0fGLBP)K~-GC7o!3}f+;{-5*8@PfS$Of_jY+yGyuK_ePZE4j5KJFz=o3?2lkUM$+ z0uzY1rFPYQz}}N?z)3IEU`OKunmcn+QbH&q z6^clOB2uAzl#_d3j<)fjWm+gWa9Y%4CJyKaD=%UsvR) cYFY5{0xKCnH+iPZX#fBK07*qoM6N<$f+I$gTL1t6 literal 0 HcmV?d00001 diff --git a/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03_selected.imageset/Frame@3x.png b/Veloria/Source/Assets.xcassets/tabbar/tabbar_icon_03_selected.imageset/Frame@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..95c5cecc64b5c708438f514c7a65e09c2099b24e GIT binary patch literal 476 zcmV<20VDp2P)CHdM`Bdrvx9ksbA( z6rUSAfMJ|BL^R^K2en^9p8gqP5;H^}U$IocT3{p4{qf)^GF*$+}v24MJ zm<&NqprJHT!5*=e;pQO!_%b8GAA*@;o-u}kLWOKHlI#Qv#2zs;g@O;1#~g;SWBZsb zDPH0w;vf0F%IYF=3vQ;+$A;s^Ip&%^V_mIa^N~{P9AFN3^MxNu?P&g}pp>Y0uY8s9O#{`C9h~x_e)8SxO SE*0qj0000UK~#7F?O4lE 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 literal 0 HcmV?d00001 diff --git a/Veloria/Source/en.lproj/Localizable.strings b/Veloria/Source/en.lproj/Localizable.strings index 1912621..8db4c52 100644 --- a/Veloria/Source/en.lproj/Localizable.strings +++ b/Veloria/Source/en.lproj/Localizable.strings @@ -2,7 +2,7 @@ Localizable.strings VideoPlayer - Created by 佳尔 on 2025/5/19. + Created by Veloria on 2025/5/19. */