commit 6ca0dd91a2d8b877762f3f388d37ecf64808a7bc Author: 忆海16 <> Date: Mon Jul 15 11:52:15 2024 +0800 广告 diff --git a/Podfile b/Podfile new file mode 100644 index 0000000..3cabf15 --- /dev/null +++ b/Podfile @@ -0,0 +1,41 @@ +# Uncomment the next line to define a global platform for your project +# platform :ios, '9.0' + +target 'anniversary_Project' do + # Comment the next line if you don't want to use dynamic frameworks + use_frameworks! + +pod 'SnapKit' +#pod 'AFNetworking' +pod 'SDWebImage/WebP' +pod 'IQKeyboardManagerSwift' +pod 'BRPickerView' +pod 'Alamofire' +pod "ESTabBarController-swift" +pod 'RAMAnimatedTabBarController' +pod 'MJExtension' +pod 'MJRefresh' +pod 'WCDB.swift' +pod 'FSCalendar' +pod 'SVProgressHUD' + +pod 'AppLovinSDK' +pod 'AppLovinDSPLinkedInAdapter' +pod 'AppLovinMediationVungleAdapter' +pod 'AppLovinMediationByteDanceAdapter' + +pod 'Firebase/Core' +pod 'Firebase/AnalyticsWithoutAdIdSupport' +pod 'FirebaseRemoteConfig' + +post_install do |installer| + installer.generated_projects.each do |project| + project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0' + end + end + end +end + +end diff --git a/anniversary_Project.xcodeproj/project.pbxproj b/anniversary_Project.xcodeproj/project.pbxproj new file mode 100644 index 0000000..601cff6 --- /dev/null +++ b/anniversary_Project.xcodeproj/project.pbxproj @@ -0,0 +1,1151 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 753C258A2C3B8272006E2660 /* AV_WaterDayCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 753C25892C3B8272006E2660 /* AV_WaterDayCell.xib */; }; + 753C258B2C3B8272006E2660 /* AV_WaterDayCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753C25882C3B8272006E2660 /* AV_WaterDayCell.swift */; }; + 753C258E2C3B88F4006E2660 /* AV_BirtherDayTaskCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 753C258D2C3B88F4006E2660 /* AV_BirtherDayTaskCell.xib */; }; + 753C258F2C3B88F4006E2660 /* AV_BirtherDayTaskCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753C258C2C3B88F4006E2660 /* AV_BirtherDayTaskCell.swift */; }; + 753C25912C3BBA9D006E2660 /* AV_WaveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753C25902C3BBA9D006E2660 /* AV_WaveView.swift */; }; + 753C25932C3BC46B006E2660 /* NotificationCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753C25922C3BC46B006E2660 /* NotificationCenter.swift */; }; + 753C25962C3BE9D5006E2660 /* AV_AddWaterVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 753C25952C3BE9D5006E2660 /* AV_AddWaterVC.xib */; }; + 753C25972C3BE9D5006E2660 /* AV_AddWaterVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753C25942C3BE9D5006E2660 /* AV_AddWaterVC.swift */; }; + 753C259A2C3BED09006E2660 /* AV_AddWaterVCCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 753C25992C3BED09006E2660 /* AV_AddWaterVCCollectionViewCell.xib */; }; + 753C259B2C3BED09006E2660 /* AV_AddWaterVCCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753C25982C3BED09006E2660 /* AV_AddWaterVCCollectionViewCell.swift */; }; + 753C259F2C3BEFB8006E2660 /* AV_ScrollingScaleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753C259E2C3BEFB8006E2660 /* AV_ScrollingScaleView.swift */; }; + 753C25A22C3BF4A1006E2660 /* MLSliderRulerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753C25A02C3BF4A1006E2660 /* MLSliderRulerView.swift */; }; + 753C25A32C3BF4A1006E2660 /* MLSliderRulerScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753C25A12C3BF4A1006E2660 /* MLSliderRulerScrollView.swift */; }; + 754835022C3D04F300AC6F8F /* AV_WaterSettingVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 754835012C3D04F300AC6F8F /* AV_WaterSettingVC.xib */; }; + 754835032C3D04F300AC6F8F /* AV_WaterSettingVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754835002C3D04F300AC6F8F /* AV_WaterSettingVC.swift */; }; + 754C97D12C3D0F7100A0455D /* AV_selectWeightVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 754C97D02C3D0F7100A0455D /* AV_selectWeightVC.xib */; }; + 754C97D22C3D0F7100A0455D /* AV_selectWeightVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754C97CF2C3D0F7100A0455D /* AV_selectWeightVC.swift */; }; + 754C97D42C3D1E5500A0455D /* ageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754C97D32C3D1E5500A0455D /* ageView.swift */; }; + 754C97D72C3D253200A0455D /* AV_selectWeightCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 754C97D62C3D253200A0455D /* AV_selectWeightCell.xib */; }; + 754C97D82C3D253200A0455D /* AV_selectWeightCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754C97D52C3D253200A0455D /* AV_selectWeightCell.swift */; }; + 754C97DA2C3D258700A0455D /* weightView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754C97D92C3D258700A0455D /* weightView.swift */; }; + 754C97DD2C3D2EAA00A0455D /* AV_TemperatureVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 754C97DC2C3D2EAA00A0455D /* AV_TemperatureVC.xib */; }; + 754C97DE2C3D2EAA00A0455D /* AV_TemperatureVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754C97DB2C3D2EAA00A0455D /* AV_TemperatureVC.swift */; }; + 754C97E12C3D453800A0455D /* AV_pagesAllVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 754C97E02C3D453800A0455D /* AV_pagesAllVC.xib */; }; + 754C97E22C3D453800A0455D /* AV_pagesAllVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754C97DF2C3D453800A0455D /* AV_pagesAllVC.swift */; }; + 755073C32C3F7FC200ADFD6B /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 755073C22C3F7FC200ADFD6B /* GoogleService-Info.plist */; }; + 755073C62C3F81B400ADFD6B /* AV_LaunchLimitesVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755073C42C3F81B400ADFD6B /* AV_LaunchLimitesVC.swift */; }; + 755073C72C3F81B400ADFD6B /* AV_LaunchLimitesVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 755073C52C3F81B400ADFD6B /* AV_LaunchLimitesVC.xib */; }; + 755073C92C3F837700ADFD6B /* ip+idfa+ADID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755073C82C3F837700ADFD6B /* ip+idfa+ADID.swift */; }; + 755073CB2C3F843A00ADFD6B /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755073CA2C3F843A00ADFD6B /* NetworkManager.swift */; }; + 759616622C35244A00363C46 /* AV_SelectGenderVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759616602C35244A00363C46 /* AV_SelectGenderVC.swift */; }; + 759616632C35244A00363C46 /* AV_SelectGenderVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 759616612C35244A00363C46 /* AV_SelectGenderVC.xib */; }; + 759616682C3525AD00363C46 /* AV_SelectGenderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759616662C3525AD00363C46 /* AV_SelectGenderCell.swift */; }; + 759616692C3525AD00363C46 /* AV_SelectGenderCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 759616672C3525AD00363C46 /* AV_SelectGenderCell.xib */; }; + 759616702C35348A00363C46 /* AV_SportsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7596166E2C35348A00363C46 /* AV_SportsVC.swift */; }; + 759616712C35348A00363C46 /* AV_SportsVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7596166F2C35348A00363C46 /* AV_SportsVC.xib */; }; + 759616742C353BEF00363C46 /* AV_SportsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759616722C353BEF00363C46 /* AV_SportsCell.swift */; }; + 759616752C353BEF00363C46 /* AV_SportsCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 759616732C353BEF00363C46 /* AV_SportsCell.xib */; }; + 75C0A1322BC787A400AB0094 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A1312BC787A400AB0094 /* AppDelegate.swift */; }; + 75C0A1362BC787A500AB0094 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A1352BC787A500AB0094 /* ViewController.swift */; }; + 75C0A1392BC787A500AB0094 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 75C0A1372BC787A500AB0094 /* Main.storyboard */; }; + 75C0A13B2BC787A700AB0094 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 75C0A13A2BC787A700AB0094 /* Assets.xcassets */; }; + 75C0A13E2BC787A700AB0094 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 75C0A13C2BC787A700AB0094 /* LaunchScreen.storyboard */; }; + 75C0A1492BC787A700AB0094 /* anniversary_ProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A1482BC787A700AB0094 /* anniversary_ProjectTests.swift */; }; + 75C0A1532BC787A700AB0094 /* anniversary_ProjectUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A1522BC787A700AB0094 /* anniversary_ProjectUITests.swift */; }; + 75C0A1552BC787A700AB0094 /* anniversary_ProjectUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A1542BC787A700AB0094 /* anniversary_ProjectUITestsLaunchTests.swift */; }; + 75C0A1632BC7897600AB0094 /* AV_RootVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A1622BC7897600AB0094 /* AV_RootVC.swift */; }; + 75C0A1652BC789A700AB0094 /* AV_NAVVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A1642BC789A700AB0094 /* AV_NAVVC.swift */; }; + 75C0A1672BC789CA00AB0094 /* AV_RootTabbarVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A1662BC789CA00AB0094 /* AV_RootTabbarVC.swift */; }; + 75C0A16C2BC789F900AB0094 /* AV_HomeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A16A2BC789F900AB0094 /* AV_HomeVC.swift */; }; + 75C0A16D2BC789F900AB0094 /* AV_HomeVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75C0A16B2BC789F900AB0094 /* AV_HomeVC.xib */; }; + 75C0A1722BC78A1B00AB0094 /* AV_MineVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A1702BC78A1B00AB0094 /* AV_MineVC.swift */; }; + 75C0A1732BC78A1B00AB0094 /* AV_MineVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75C0A1712BC78A1B00AB0094 /* AV_MineVC.xib */; }; + 75C0A1762BC78F3300AB0094 /* WCDB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A1752BC78F3300AB0094 /* WCDB.swift */; }; + 75C0A17A2BC791B400AB0094 /* AV_usermodel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A1792BC791B400AB0094 /* AV_usermodel.swift */; }; + 75C0A1EA2BCCC83D00AB0094 /* AV_CustomTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A1E92BCCC83D00AB0094 /* AV_CustomTabBar.swift */; }; + 75C0A1EF2BCCC8B100AB0094 /* AV_AddVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A1ED2BCCC8B100AB0094 /* AV_AddVC.swift */; }; + 75C0A1F02BCCC8B100AB0094 /* AV_AddVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75C0A1EE2BCCC8B100AB0094 /* AV_AddVC.xib */; }; + 75C0A1F42BCCD48A00AB0094 /* AV_TaskCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A1F22BCCD48A00AB0094 /* AV_TaskCell.swift */; }; + 75C0A1F52BCCD48A00AB0094 /* AV_TaskCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75C0A1F32BCCD48A00AB0094 /* AV_TaskCell.xib */; }; + 75C0A1F72BCD027A00AB0094 /* color.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C0A1F62BCD027A00AB0094 /* color.swift */; }; + 75C4E0B12C36792900B4C170 /* AV_WaterHomeVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75C4E0B02C36792900B4C170 /* AV_WaterHomeVC.xib */; }; + 75C4E0B22C36792900B4C170 /* AV_WaterHomeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C4E0AF2C36792900B4C170 /* AV_WaterHomeVC.swift */; }; + 75C4E0B82C367EAE00B4C170 /* AV_WaterCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75C4E0B72C367EAE00B4C170 /* AV_WaterCell.xib */; }; + 75C4E0B92C367EAE00B4C170 /* AV_WaterCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C4E0B62C367EAE00B4C170 /* AV_WaterCell.swift */; }; + 75C4E0BC2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75C4E0BB2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.xib */; }; + 75C4E0BD2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C4E0BA2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.swift */; }; + 75FAEF2E2C3E5D9800298C7D /* CircularProgressBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75FAEF2D2C3E5D9700298C7D /* CircularProgressBarView.swift */; }; + 75FAEF312C3E735800298C7D /* HealthManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75FAEF302C3E735800298C7D /* HealthManager.swift */; }; + 75FAEF342C3E8D7400298C7D /* AV_NoneCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75FAEF322C3E8D7400298C7D /* AV_NoneCell.swift */; }; + 75FAEF352C3E8D7400298C7D /* AV_NoneCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75FAEF332C3E8D7400298C7D /* AV_NoneCell.xib */; }; + 75FDC0B32BCE1F4F005B3D13 /* AV_CalenDarcell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75FDC0B12BCE1F4F005B3D13 /* AV_CalenDarcell.swift */; }; + 75FDC0B42BCE1F4F005B3D13 /* AV_CalenDarcell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75FDC0B22BCE1F4F005B3D13 /* AV_CalenDarcell.xib */; }; + 75FDC0B72BCE2F37005B3D13 /* AV_DetalisVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75FDC0B52BCE2F37005B3D13 /* AV_DetalisVC.swift */; }; + 75FDC0B82BCE2F37005B3D13 /* AV_DetalisVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75FDC0B62BCE2F37005B3D13 /* AV_DetalisVC.xib */; }; + 75FDC0C82BCF77B7005B3D13 /* AV_AboutVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75FDC0C62BCF77B7005B3D13 /* AV_AboutVC.swift */; }; + 75FDC0C92BCF77B7005B3D13 /* AV_AboutVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75FDC0C72BCF77B7005B3D13 /* AV_AboutVC.xib */; }; + 75FDC0CC2BCF77C9005B3D13 /* AV_PivacyVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75FDC0CA2BCF77C9005B3D13 /* AV_PivacyVC.swift */; }; + 75FDC0CD2BCF77C9005B3D13 /* AV_PivacyVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75FDC0CB2BCF77C9005B3D13 /* AV_PivacyVC.xib */; }; + F9B33271C51F0F9539EE366C /* Pods_anniversary_Project.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 54C12C891A8D806F1F2D9570 /* Pods_anniversary_Project.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 75C0A1452BC787A700AB0094 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 75C0A1262BC787A400AB0094 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 75C0A12D2BC787A400AB0094; + remoteInfo = anniversary_Project; + }; + 75C0A14F2BC787A700AB0094 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 75C0A1262BC787A400AB0094 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 75C0A12D2BC787A400AB0094; + remoteInfo = anniversary_Project; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 54C12C891A8D806F1F2D9570 /* Pods_anniversary_Project.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_anniversary_Project.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 753C25882C3B8272006E2660 /* AV_WaterDayCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_WaterDayCell.swift; sourceTree = ""; }; + 753C25892C3B8272006E2660 /* AV_WaterDayCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_WaterDayCell.xib; sourceTree = ""; }; + 753C258C2C3B88F4006E2660 /* AV_BirtherDayTaskCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_BirtherDayTaskCell.swift; sourceTree = ""; }; + 753C258D2C3B88F4006E2660 /* AV_BirtherDayTaskCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_BirtherDayTaskCell.xib; sourceTree = ""; }; + 753C25902C3BBA9D006E2660 /* AV_WaveView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_WaveView.swift; sourceTree = ""; }; + 753C25922C3BC46B006E2660 /* NotificationCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationCenter.swift; sourceTree = ""; }; + 753C25942C3BE9D5006E2660 /* AV_AddWaterVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_AddWaterVC.swift; sourceTree = ""; }; + 753C25952C3BE9D5006E2660 /* AV_AddWaterVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_AddWaterVC.xib; sourceTree = ""; }; + 753C25982C3BED09006E2660 /* AV_AddWaterVCCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_AddWaterVCCollectionViewCell.swift; sourceTree = ""; }; + 753C25992C3BED09006E2660 /* AV_AddWaterVCCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_AddWaterVCCollectionViewCell.xib; sourceTree = ""; }; + 753C259E2C3BEFB8006E2660 /* AV_ScrollingScaleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_ScrollingScaleView.swift; sourceTree = ""; }; + 753C25A02C3BF4A1006E2660 /* MLSliderRulerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MLSliderRulerView.swift; sourceTree = ""; }; + 753C25A12C3BF4A1006E2660 /* MLSliderRulerScrollView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MLSliderRulerScrollView.swift; sourceTree = ""; }; + 754835002C3D04F300AC6F8F /* AV_WaterSettingVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_WaterSettingVC.swift; sourceTree = ""; }; + 754835012C3D04F300AC6F8F /* AV_WaterSettingVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_WaterSettingVC.xib; sourceTree = ""; }; + 754C97CF2C3D0F7100A0455D /* AV_selectWeightVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_selectWeightVC.swift; sourceTree = ""; }; + 754C97D02C3D0F7100A0455D /* AV_selectWeightVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_selectWeightVC.xib; sourceTree = ""; }; + 754C97D32C3D1E5500A0455D /* ageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ageView.swift; sourceTree = ""; }; + 754C97D52C3D253200A0455D /* AV_selectWeightCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_selectWeightCell.swift; sourceTree = ""; }; + 754C97D62C3D253200A0455D /* AV_selectWeightCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_selectWeightCell.xib; sourceTree = ""; }; + 754C97D92C3D258700A0455D /* weightView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = weightView.swift; sourceTree = ""; }; + 754C97DB2C3D2EAA00A0455D /* AV_TemperatureVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_TemperatureVC.swift; sourceTree = ""; }; + 754C97DC2C3D2EAA00A0455D /* AV_TemperatureVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_TemperatureVC.xib; sourceTree = ""; }; + 754C97DF2C3D453800A0455D /* AV_pagesAllVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_pagesAllVC.swift; sourceTree = ""; }; + 754C97E02C3D453800A0455D /* AV_pagesAllVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_pagesAllVC.xib; sourceTree = ""; }; + 755073C22C3F7FC200ADFD6B /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 755073C42C3F81B400ADFD6B /* AV_LaunchLimitesVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_LaunchLimitesVC.swift; sourceTree = ""; }; + 755073C52C3F81B400ADFD6B /* AV_LaunchLimitesVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_LaunchLimitesVC.xib; sourceTree = ""; }; + 755073C82C3F837700ADFD6B /* ip+idfa+ADID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ip+idfa+ADID.swift"; sourceTree = ""; }; + 755073CA2C3F843A00ADFD6B /* NetworkManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkManager.swift; sourceTree = ""; }; + 759616602C35244A00363C46 /* AV_SelectGenderVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_SelectGenderVC.swift; sourceTree = ""; }; + 759616612C35244A00363C46 /* AV_SelectGenderVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_SelectGenderVC.xib; sourceTree = ""; }; + 759616662C3525AD00363C46 /* AV_SelectGenderCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_SelectGenderCell.swift; sourceTree = ""; }; + 759616672C3525AD00363C46 /* AV_SelectGenderCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_SelectGenderCell.xib; sourceTree = ""; }; + 7596166E2C35348A00363C46 /* AV_SportsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_SportsVC.swift; sourceTree = ""; }; + 7596166F2C35348A00363C46 /* AV_SportsVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_SportsVC.xib; sourceTree = ""; }; + 759616722C353BEF00363C46 /* AV_SportsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_SportsCell.swift; sourceTree = ""; }; + 759616732C353BEF00363C46 /* AV_SportsCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_SportsCell.xib; sourceTree = ""; }; + 75C0A12E2BC787A400AB0094 /* anniversary_Project.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = anniversary_Project.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 75C0A1312BC787A400AB0094 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 75C0A1352BC787A500AB0094 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; + 75C0A1382BC787A500AB0094 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 75C0A13A2BC787A700AB0094 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 75C0A13D2BC787A700AB0094 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 75C0A13F2BC787A700AB0094 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 75C0A1442BC787A700AB0094 /* anniversary_ProjectTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = anniversary_ProjectTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 75C0A1482BC787A700AB0094 /* anniversary_ProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = anniversary_ProjectTests.swift; sourceTree = ""; }; + 75C0A14E2BC787A700AB0094 /* anniversary_ProjectUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = anniversary_ProjectUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 75C0A1522BC787A700AB0094 /* anniversary_ProjectUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = anniversary_ProjectUITests.swift; sourceTree = ""; }; + 75C0A1542BC787A700AB0094 /* anniversary_ProjectUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = anniversary_ProjectUITestsLaunchTests.swift; sourceTree = ""; }; + 75C0A1622BC7897600AB0094 /* AV_RootVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_RootVC.swift; sourceTree = ""; }; + 75C0A1642BC789A700AB0094 /* AV_NAVVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_NAVVC.swift; sourceTree = ""; }; + 75C0A1662BC789CA00AB0094 /* AV_RootTabbarVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_RootTabbarVC.swift; sourceTree = ""; }; + 75C0A16A2BC789F900AB0094 /* AV_HomeVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_HomeVC.swift; sourceTree = ""; }; + 75C0A16B2BC789F900AB0094 /* AV_HomeVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_HomeVC.xib; sourceTree = ""; }; + 75C0A1702BC78A1B00AB0094 /* AV_MineVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_MineVC.swift; sourceTree = ""; }; + 75C0A1712BC78A1B00AB0094 /* AV_MineVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_MineVC.xib; sourceTree = ""; }; + 75C0A1752BC78F3300AB0094 /* WCDB.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WCDB.swift; sourceTree = ""; }; + 75C0A1792BC791B400AB0094 /* AV_usermodel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_usermodel.swift; sourceTree = ""; }; + 75C0A1E92BCCC83D00AB0094 /* AV_CustomTabBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_CustomTabBar.swift; sourceTree = ""; }; + 75C0A1ED2BCCC8B100AB0094 /* AV_AddVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_AddVC.swift; sourceTree = ""; }; + 75C0A1EE2BCCC8B100AB0094 /* AV_AddVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_AddVC.xib; sourceTree = ""; }; + 75C0A1F22BCCD48A00AB0094 /* AV_TaskCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_TaskCell.swift; sourceTree = ""; }; + 75C0A1F32BCCD48A00AB0094 /* AV_TaskCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_TaskCell.xib; sourceTree = ""; }; + 75C0A1F62BCD027A00AB0094 /* color.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = color.swift; sourceTree = ""; }; + 75C0A1F92BCD06EB00AB0094 /* AV_header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AV_header.h; sourceTree = ""; }; + 75C4E0AF2C36792900B4C170 /* AV_WaterHomeVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_WaterHomeVC.swift; sourceTree = ""; }; + 75C4E0B02C36792900B4C170 /* AV_WaterHomeVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_WaterHomeVC.xib; sourceTree = ""; }; + 75C4E0B62C367EAE00B4C170 /* AV_WaterCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_WaterCell.swift; sourceTree = ""; }; + 75C4E0B72C367EAE00B4C170 /* AV_WaterCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_WaterCell.xib; sourceTree = ""; }; + 75C4E0BA2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_AddWaterCollectionViewCell.swift; sourceTree = ""; }; + 75C4E0BB2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_AddWaterCollectionViewCell.xib; sourceTree = ""; }; + 75FAEF2D2C3E5D9700298C7D /* CircularProgressBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircularProgressBarView.swift; sourceTree = ""; }; + 75FAEF2F2C3E723A00298C7D /* anniversary_Project.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = anniversary_Project.entitlements; sourceTree = ""; }; + 75FAEF302C3E735800298C7D /* HealthManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HealthManager.swift; sourceTree = ""; }; + 75FAEF322C3E8D7400298C7D /* AV_NoneCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_NoneCell.swift; sourceTree = ""; }; + 75FAEF332C3E8D7400298C7D /* AV_NoneCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_NoneCell.xib; sourceTree = ""; }; + 75FDC0B12BCE1F4F005B3D13 /* AV_CalenDarcell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_CalenDarcell.swift; sourceTree = ""; }; + 75FDC0B22BCE1F4F005B3D13 /* AV_CalenDarcell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_CalenDarcell.xib; sourceTree = ""; }; + 75FDC0B52BCE2F37005B3D13 /* AV_DetalisVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_DetalisVC.swift; sourceTree = ""; }; + 75FDC0B62BCE2F37005B3D13 /* AV_DetalisVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_DetalisVC.xib; sourceTree = ""; }; + 75FDC0C62BCF77B7005B3D13 /* AV_AboutVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_AboutVC.swift; sourceTree = ""; }; + 75FDC0C72BCF77B7005B3D13 /* AV_AboutVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_AboutVC.xib; sourceTree = ""; }; + 75FDC0CA2BCF77C9005B3D13 /* AV_PivacyVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_PivacyVC.swift; sourceTree = ""; }; + 75FDC0CB2BCF77C9005B3D13 /* AV_PivacyVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_PivacyVC.xib; sourceTree = ""; }; + 8088326EB6FBFFC8839103D7 /* Pods-anniversary_Project.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-anniversary_Project.debug.xcconfig"; path = "Target Support Files/Pods-anniversary_Project/Pods-anniversary_Project.debug.xcconfig"; sourceTree = ""; }; + FC148B18263C5E308A2640EF /* Pods-anniversary_Project.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-anniversary_Project.release.xcconfig"; path = "Target Support Files/Pods-anniversary_Project/Pods-anniversary_Project.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 75C0A12B2BC787A400AB0094 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F9B33271C51F0F9539EE366C /* Pods_anniversary_Project.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75C0A1412BC787A700AB0094 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75C0A14B2BC787A700AB0094 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 5E4DFCA07F1444B408C9A170 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 54C12C891A8D806F1F2D9570 /* Pods_anniversary_Project.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 753C259C2C3BED13006E2660 /* homewater */ = { + isa = PBXGroup; + children = ( + 75C4E0B62C367EAE00B4C170 /* AV_WaterCell.swift */, + 75C4E0B72C367EAE00B4C170 /* AV_WaterCell.xib */, + 75C4E0BA2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.swift */, + 75C4E0BB2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.xib */, + 753C25882C3B8272006E2660 /* AV_WaterDayCell.swift */, + 753C25892C3B8272006E2660 /* AV_WaterDayCell.xib */, + 753C258C2C3B88F4006E2660 /* AV_BirtherDayTaskCell.swift */, + 753C258D2C3B88F4006E2660 /* AV_BirtherDayTaskCell.xib */, + 75FAEF322C3E8D7400298C7D /* AV_NoneCell.swift */, + 75FAEF332C3E8D7400298C7D /* AV_NoneCell.xib */, + ); + path = homewater; + sourceTree = ""; + }; + 753C259D2C3BED24006E2660 /* addwater */ = { + isa = PBXGroup; + children = ( + 753C25982C3BED09006E2660 /* AV_AddWaterVCCollectionViewCell.swift */, + 753C25992C3BED09006E2660 /* AV_AddWaterVCCollectionViewCell.xib */, + ); + path = addwater; + sourceTree = ""; + }; + 7596165F2C35242200363C46 /* Guidepages */ = { + isa = PBXGroup; + children = ( + 759616652C35259B00363C46 /* V */, + 759616642C35259400363C46 /* C */, + ); + path = Guidepages; + sourceTree = ""; + }; + 759616642C35259400363C46 /* C */ = { + isa = PBXGroup; + children = ( + 759616602C35244A00363C46 /* AV_SelectGenderVC.swift */, + 759616612C35244A00363C46 /* AV_SelectGenderVC.xib */, + 7596166E2C35348A00363C46 /* AV_SportsVC.swift */, + 7596166F2C35348A00363C46 /* AV_SportsVC.xib */, + 754C97CF2C3D0F7100A0455D /* AV_selectWeightVC.swift */, + 754C97D02C3D0F7100A0455D /* AV_selectWeightVC.xib */, + 754C97DB2C3D2EAA00A0455D /* AV_TemperatureVC.swift */, + 754C97DC2C3D2EAA00A0455D /* AV_TemperatureVC.xib */, + ); + path = C; + sourceTree = ""; + }; + 759616652C35259B00363C46 /* V */ = { + isa = PBXGroup; + children = ( + 759616662C3525AD00363C46 /* AV_SelectGenderCell.swift */, + 759616672C3525AD00363C46 /* AV_SelectGenderCell.xib */, + 759616722C353BEF00363C46 /* AV_SportsCell.swift */, + 759616732C353BEF00363C46 /* AV_SportsCell.xib */, + 754C97D52C3D253200A0455D /* AV_selectWeightCell.swift */, + 754C97D62C3D253200A0455D /* AV_selectWeightCell.xib */, + ); + path = V; + sourceTree = ""; + }; + 75C0A1252BC787A400AB0094 = { + isa = PBXGroup; + children = ( + 75C0A1302BC787A400AB0094 /* anniversary_Project */, + 75C0A1472BC787A700AB0094 /* anniversary_ProjectTests */, + 75C0A1512BC787A700AB0094 /* anniversary_ProjectUITests */, + 75C0A12F2BC787A400AB0094 /* Products */, + 86ADE38F202174A78BEA74AC /* Pods */, + 5E4DFCA07F1444B408C9A170 /* Frameworks */, + ); + sourceTree = ""; + }; + 75C0A12F2BC787A400AB0094 /* Products */ = { + isa = PBXGroup; + children = ( + 75C0A12E2BC787A400AB0094 /* anniversary_Project.app */, + 75C0A1442BC787A700AB0094 /* anniversary_ProjectTests.xctest */, + 75C0A14E2BC787A700AB0094 /* anniversary_ProjectUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 75C0A1302BC787A400AB0094 /* anniversary_Project */ = { + isa = PBXGroup; + children = ( + 755073C22C3F7FC200ADFD6B /* GoogleService-Info.plist */, + 75FAEF2F2C3E723A00298C7D /* anniversary_Project.entitlements */, + 7596165F2C35242200363C46 /* Guidepages */, + 75C0A1F82BCD06DC00AB0094 /* header */, + 75C0A1EB2BCCC89700AB0094 /* Add */, + 75C0A1742BC78F2500AB0094 /* Tool */, + 75C0A16E2BC78A0000AB0094 /* Me */, + 75C0A1682BC789E000AB0094 /* Home */, + 75C0A1612BC7896300AB0094 /* Main */, + 75C0A1312BC787A400AB0094 /* AppDelegate.swift */, + 75C0A1352BC787A500AB0094 /* ViewController.swift */, + 75C0A1372BC787A500AB0094 /* Main.storyboard */, + 75C0A13A2BC787A700AB0094 /* Assets.xcassets */, + 75C0A13C2BC787A700AB0094 /* LaunchScreen.storyboard */, + 75C0A13F2BC787A700AB0094 /* Info.plist */, + ); + path = anniversary_Project; + sourceTree = ""; + }; + 75C0A1472BC787A700AB0094 /* anniversary_ProjectTests */ = { + isa = PBXGroup; + children = ( + 75C0A1482BC787A700AB0094 /* anniversary_ProjectTests.swift */, + ); + path = anniversary_ProjectTests; + sourceTree = ""; + }; + 75C0A1512BC787A700AB0094 /* anniversary_ProjectUITests */ = { + isa = PBXGroup; + children = ( + 75C0A1522BC787A700AB0094 /* anniversary_ProjectUITests.swift */, + 75C0A1542BC787A700AB0094 /* anniversary_ProjectUITestsLaunchTests.swift */, + ); + path = anniversary_ProjectUITests; + sourceTree = ""; + }; + 75C0A1612BC7896300AB0094 /* Main */ = { + isa = PBXGroup; + children = ( + 75C0A1622BC7897600AB0094 /* AV_RootVC.swift */, + 75C0A1642BC789A700AB0094 /* AV_NAVVC.swift */, + 75C0A1662BC789CA00AB0094 /* AV_RootTabbarVC.swift */, + 75C0A1E92BCCC83D00AB0094 /* AV_CustomTabBar.swift */, + 755073C42C3F81B400ADFD6B /* AV_LaunchLimitesVC.swift */, + 755073C52C3F81B400ADFD6B /* AV_LaunchLimitesVC.xib */, + ); + path = Main; + sourceTree = ""; + }; + 75C0A1682BC789E000AB0094 /* Home */ = { + isa = PBXGroup; + children = ( + 75C4E0B32C36792D00B4C170 /* Drink_water */, + 75C0A1F12BCCD47100AB0094 /* V */, + 75C0A1692BC789E800AB0094 /* C */, + ); + path = Home; + sourceTree = ""; + }; + 75C0A1692BC789E800AB0094 /* C */ = { + isa = PBXGroup; + children = ( + 75C0A16A2BC789F900AB0094 /* AV_HomeVC.swift */, + 75C0A16B2BC789F900AB0094 /* AV_HomeVC.xib */, + 75FDC0B52BCE2F37005B3D13 /* AV_DetalisVC.swift */, + 75FDC0B62BCE2F37005B3D13 /* AV_DetalisVC.xib */, + ); + path = C; + sourceTree = ""; + }; + 75C0A16E2BC78A0000AB0094 /* Me */ = { + isa = PBXGroup; + children = ( + 75FDC0B02BCE1C56005B3D13 /* V */, + 75C0A16F2BC78A0F00AB0094 /* C */, + ); + path = Me; + sourceTree = ""; + }; + 75C0A16F2BC78A0F00AB0094 /* C */ = { + isa = PBXGroup; + children = ( + 75C0A1702BC78A1B00AB0094 /* AV_MineVC.swift */, + 75C0A1712BC78A1B00AB0094 /* AV_MineVC.xib */, + 75FDC0C62BCF77B7005B3D13 /* AV_AboutVC.swift */, + 75FDC0C72BCF77B7005B3D13 /* AV_AboutVC.xib */, + 75FDC0CA2BCF77C9005B3D13 /* AV_PivacyVC.swift */, + 75FDC0CB2BCF77C9005B3D13 /* AV_PivacyVC.xib */, + ); + path = C; + sourceTree = ""; + }; + 75C0A1742BC78F2500AB0094 /* Tool */ = { + isa = PBXGroup; + children = ( + 753C25A12C3BF4A1006E2660 /* MLSliderRulerScrollView.swift */, + 753C25A02C3BF4A1006E2660 /* MLSliderRulerView.swift */, + 753C25902C3BBA9D006E2660 /* AV_WaveView.swift */, + 75C0A1752BC78F3300AB0094 /* WCDB.swift */, + 75C0A1792BC791B400AB0094 /* AV_usermodel.swift */, + 75C0A1F62BCD027A00AB0094 /* color.swift */, + 753C25922C3BC46B006E2660 /* NotificationCenter.swift */, + 753C259E2C3BEFB8006E2660 /* AV_ScrollingScaleView.swift */, + 754C97D32C3D1E5500A0455D /* ageView.swift */, + 754C97D92C3D258700A0455D /* weightView.swift */, + 75FAEF2D2C3E5D9700298C7D /* CircularProgressBarView.swift */, + 75FAEF302C3E735800298C7D /* HealthManager.swift */, + 755073C82C3F837700ADFD6B /* ip+idfa+ADID.swift */, + 755073CA2C3F843A00ADFD6B /* NetworkManager.swift */, + ); + path = Tool; + sourceTree = ""; + }; + 75C0A1EB2BCCC89700AB0094 /* Add */ = { + isa = PBXGroup; + children = ( + 75C0A1EC2BCCC89D00AB0094 /* C */, + ); + path = Add; + sourceTree = ""; + }; + 75C0A1EC2BCCC89D00AB0094 /* C */ = { + isa = PBXGroup; + children = ( + 75C0A1ED2BCCC8B100AB0094 /* AV_AddVC.swift */, + 75C0A1EE2BCCC8B100AB0094 /* AV_AddVC.xib */, + ); + path = C; + sourceTree = ""; + }; + 75C0A1F12BCCD47100AB0094 /* V */ = { + isa = PBXGroup; + children = ( + 75C0A1F22BCCD48A00AB0094 /* AV_TaskCell.swift */, + 75C0A1F32BCCD48A00AB0094 /* AV_TaskCell.xib */, + ); + path = V; + sourceTree = ""; + }; + 75C0A1F82BCD06DC00AB0094 /* header */ = { + isa = PBXGroup; + children = ( + 75C0A1F92BCD06EB00AB0094 /* AV_header.h */, + ); + path = header; + sourceTree = ""; + }; + 75C4E0B32C36792D00B4C170 /* Drink_water */ = { + isa = PBXGroup; + children = ( + 75C4E0B52C367BA100B4C170 /* waterV */, + 75C4E0B42C367B2500B4C170 /* waterC */, + ); + path = Drink_water; + sourceTree = ""; + }; + 75C4E0B42C367B2500B4C170 /* waterC */ = { + isa = PBXGroup; + children = ( + 75C4E0AF2C36792900B4C170 /* AV_WaterHomeVC.swift */, + 75C4E0B02C36792900B4C170 /* AV_WaterHomeVC.xib */, + 753C25942C3BE9D5006E2660 /* AV_AddWaterVC.swift */, + 753C25952C3BE9D5006E2660 /* AV_AddWaterVC.xib */, + 754835002C3D04F300AC6F8F /* AV_WaterSettingVC.swift */, + 754835012C3D04F300AC6F8F /* AV_WaterSettingVC.xib */, + 754C97DF2C3D453800A0455D /* AV_pagesAllVC.swift */, + 754C97E02C3D453800A0455D /* AV_pagesAllVC.xib */, + ); + path = waterC; + sourceTree = ""; + }; + 75C4E0B52C367BA100B4C170 /* waterV */ = { + isa = PBXGroup; + children = ( + 753C259D2C3BED24006E2660 /* addwater */, + 753C259C2C3BED13006E2660 /* homewater */, + ); + path = waterV; + sourceTree = ""; + }; + 75FDC0B02BCE1C56005B3D13 /* V */ = { + isa = PBXGroup; + children = ( + 75FDC0B12BCE1F4F005B3D13 /* AV_CalenDarcell.swift */, + 75FDC0B22BCE1F4F005B3D13 /* AV_CalenDarcell.xib */, + ); + path = V; + sourceTree = ""; + }; + 86ADE38F202174A78BEA74AC /* Pods */ = { + isa = PBXGroup; + children = ( + 8088326EB6FBFFC8839103D7 /* Pods-anniversary_Project.debug.xcconfig */, + FC148B18263C5E308A2640EF /* Pods-anniversary_Project.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 75C0A12D2BC787A400AB0094 /* anniversary_Project */ = { + isa = PBXNativeTarget; + buildConfigurationList = 75C0A1582BC787A700AB0094 /* Build configuration list for PBXNativeTarget "anniversary_Project" */; + buildPhases = ( + 3F66E3BB8958A657442ED070 /* [CP] Check Pods Manifest.lock */, + 75C0A12A2BC787A400AB0094 /* Sources */, + 75C0A12B2BC787A400AB0094 /* Frameworks */, + 75C0A12C2BC787A400AB0094 /* Resources */, + A32E9CD058BFCA5BFF1CCE22 /* [CP] Embed Pods Frameworks */, + 7AE71B5775688830B7D4549A /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = anniversary_Project; + productName = anniversary_Project; + productReference = 75C0A12E2BC787A400AB0094 /* anniversary_Project.app */; + productType = "com.apple.product-type.application"; + }; + 75C0A1432BC787A700AB0094 /* anniversary_ProjectTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 75C0A15B2BC787A700AB0094 /* Build configuration list for PBXNativeTarget "anniversary_ProjectTests" */; + buildPhases = ( + 75C0A1402BC787A700AB0094 /* Sources */, + 75C0A1412BC787A700AB0094 /* Frameworks */, + 75C0A1422BC787A700AB0094 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 75C0A1462BC787A700AB0094 /* PBXTargetDependency */, + ); + name = anniversary_ProjectTests; + productName = anniversary_ProjectTests; + productReference = 75C0A1442BC787A700AB0094 /* anniversary_ProjectTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 75C0A14D2BC787A700AB0094 /* anniversary_ProjectUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 75C0A15E2BC787A700AB0094 /* Build configuration list for PBXNativeTarget "anniversary_ProjectUITests" */; + buildPhases = ( + 75C0A14A2BC787A700AB0094 /* Sources */, + 75C0A14B2BC787A700AB0094 /* Frameworks */, + 75C0A14C2BC787A700AB0094 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 75C0A1502BC787A700AB0094 /* PBXTargetDependency */, + ); + name = anniversary_ProjectUITests; + productName = anniversary_ProjectUITests; + productReference = 75C0A14E2BC787A700AB0094 /* anniversary_ProjectUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 75C0A1262BC787A400AB0094 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + CLASSPREFIX = AV_; + LastSwiftUpdateCheck = 1500; + LastUpgradeCheck = 1500; + TargetAttributes = { + 75C0A12D2BC787A400AB0094 = { + CreatedOnToolsVersion = 15.0; + }; + 75C0A1432BC787A700AB0094 = { + CreatedOnToolsVersion = 15.0; + TestTargetID = 75C0A12D2BC787A400AB0094; + }; + 75C0A14D2BC787A700AB0094 = { + CreatedOnToolsVersion = 15.0; + TestTargetID = 75C0A12D2BC787A400AB0094; + }; + }; + }; + buildConfigurationList = 75C0A1292BC787A400AB0094 /* Build configuration list for PBXProject "anniversary_Project" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 75C0A1252BC787A400AB0094; + productRefGroup = 75C0A12F2BC787A400AB0094 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 75C0A12D2BC787A400AB0094 /* anniversary_Project */, + 75C0A1432BC787A700AB0094 /* anniversary_ProjectTests */, + 75C0A14D2BC787A700AB0094 /* anniversary_ProjectUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 75C0A12C2BC787A400AB0094 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 75FDC0B82BCE2F37005B3D13 /* AV_DetalisVC.xib in Resources */, + 753C259A2C3BED09006E2660 /* AV_AddWaterVCCollectionViewCell.xib in Resources */, + 75C0A13E2BC787A700AB0094 /* LaunchScreen.storyboard in Resources */, + 753C258A2C3B8272006E2660 /* AV_WaterDayCell.xib in Resources */, + 755073C72C3F81B400ADFD6B /* AV_LaunchLimitesVC.xib in Resources */, + 755073C32C3F7FC200ADFD6B /* GoogleService-Info.plist in Resources */, + 759616752C353BEF00363C46 /* AV_SportsCell.xib in Resources */, + 754C97D12C3D0F7100A0455D /* AV_selectWeightVC.xib in Resources */, + 754835022C3D04F300AC6F8F /* AV_WaterSettingVC.xib in Resources */, + 759616712C35348A00363C46 /* AV_SportsVC.xib in Resources */, + 75C0A13B2BC787A700AB0094 /* Assets.xcassets in Resources */, + 75C4E0BC2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.xib in Resources */, + 75FAEF352C3E8D7400298C7D /* AV_NoneCell.xib in Resources */, + 75FDC0C92BCF77B7005B3D13 /* AV_AboutVC.xib in Resources */, + 75C0A1732BC78A1B00AB0094 /* AV_MineVC.xib in Resources */, + 75C4E0B82C367EAE00B4C170 /* AV_WaterCell.xib in Resources */, + 753C258E2C3B88F4006E2660 /* AV_BirtherDayTaskCell.xib in Resources */, + 75C0A1F52BCCD48A00AB0094 /* AV_TaskCell.xib in Resources */, + 753C25962C3BE9D5006E2660 /* AV_AddWaterVC.xib in Resources */, + 75FDC0B42BCE1F4F005B3D13 /* AV_CalenDarcell.xib in Resources */, + 75C0A16D2BC789F900AB0094 /* AV_HomeVC.xib in Resources */, + 75C0A1392BC787A500AB0094 /* Main.storyboard in Resources */, + 75FDC0CD2BCF77C9005B3D13 /* AV_PivacyVC.xib in Resources */, + 754C97DD2C3D2EAA00A0455D /* AV_TemperatureVC.xib in Resources */, + 754C97D72C3D253200A0455D /* AV_selectWeightCell.xib in Resources */, + 759616632C35244A00363C46 /* AV_SelectGenderVC.xib in Resources */, + 75C4E0B12C36792900B4C170 /* AV_WaterHomeVC.xib in Resources */, + 754C97E12C3D453800A0455D /* AV_pagesAllVC.xib in Resources */, + 759616692C3525AD00363C46 /* AV_SelectGenderCell.xib in Resources */, + 75C0A1F02BCCC8B100AB0094 /* AV_AddVC.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75C0A1422BC787A700AB0094 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75C0A14C2BC787A700AB0094 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3F66E3BB8958A657442ED070 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-anniversary_Project-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 7AE71B5775688830B7D4549A /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-anniversary_Project/Pods-anniversary_Project-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-anniversary_Project/Pods-anniversary_Project-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-anniversary_Project/Pods-anniversary_Project-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + A32E9CD058BFCA5BFF1CCE22 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-anniversary_Project/Pods-anniversary_Project-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-anniversary_Project/Pods-anniversary_Project-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-anniversary_Project/Pods-anniversary_Project-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 75C0A12A2BC787A400AB0094 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 755073CB2C3F843A00ADFD6B /* NetworkManager.swift in Sources */, + 75C0A1362BC787A500AB0094 /* ViewController.swift in Sources */, + 759616682C3525AD00363C46 /* AV_SelectGenderCell.swift in Sources */, + 75C0A1EF2BCCC8B100AB0094 /* AV_AddVC.swift in Sources */, + 75C4E0B22C36792900B4C170 /* AV_WaterHomeVC.swift in Sources */, + 75C0A1672BC789CA00AB0094 /* AV_RootTabbarVC.swift in Sources */, + 75C4E0B92C367EAE00B4C170 /* AV_WaterCell.swift in Sources */, + 754C97D82C3D253200A0455D /* AV_selectWeightCell.swift in Sources */, + 753C258F2C3B88F4006E2660 /* AV_BirtherDayTaskCell.swift in Sources */, + 75FDC0CC2BCF77C9005B3D13 /* AV_PivacyVC.swift in Sources */, + 75C0A1652BC789A700AB0094 /* AV_NAVVC.swift in Sources */, + 759616702C35348A00363C46 /* AV_SportsVC.swift in Sources */, + 75C0A1EA2BCCC83D00AB0094 /* AV_CustomTabBar.swift in Sources */, + 75FAEF342C3E8D7400298C7D /* AV_NoneCell.swift in Sources */, + 75FDC0C82BCF77B7005B3D13 /* AV_AboutVC.swift in Sources */, + 75FAEF312C3E735800298C7D /* HealthManager.swift in Sources */, + 754835032C3D04F300AC6F8F /* AV_WaterSettingVC.swift in Sources */, + 75C0A1F72BCD027A00AB0094 /* color.swift in Sources */, + 75C0A1F42BCCD48A00AB0094 /* AV_TaskCell.swift in Sources */, + 754C97DA2C3D258700A0455D /* weightView.swift in Sources */, + 75C0A1632BC7897600AB0094 /* AV_RootVC.swift in Sources */, + 754C97D42C3D1E5500A0455D /* ageView.swift in Sources */, + 753C25932C3BC46B006E2660 /* NotificationCenter.swift in Sources */, + 755073C92C3F837700ADFD6B /* ip+idfa+ADID.swift in Sources */, + 753C258B2C3B8272006E2660 /* AV_WaterDayCell.swift in Sources */, + 759616742C353BEF00363C46 /* AV_SportsCell.swift in Sources */, + 75C0A17A2BC791B400AB0094 /* AV_usermodel.swift in Sources */, + 75C0A1722BC78A1B00AB0094 /* AV_MineVC.swift in Sources */, + 753C25912C3BBA9D006E2660 /* AV_WaveView.swift in Sources */, + 75FAEF2E2C3E5D9800298C7D /* CircularProgressBarView.swift in Sources */, + 753C259B2C3BED09006E2660 /* AV_AddWaterVCCollectionViewCell.swift in Sources */, + 75FDC0B72BCE2F37005B3D13 /* AV_DetalisVC.swift in Sources */, + 75FDC0B32BCE1F4F005B3D13 /* AV_CalenDarcell.swift in Sources */, + 759616622C35244A00363C46 /* AV_SelectGenderVC.swift in Sources */, + 753C25972C3BE9D5006E2660 /* AV_AddWaterVC.swift in Sources */, + 754C97E22C3D453800A0455D /* AV_pagesAllVC.swift in Sources */, + 75C0A1762BC78F3300AB0094 /* WCDB.swift in Sources */, + 754C97DE2C3D2EAA00A0455D /* AV_TemperatureVC.swift in Sources */, + 754C97D22C3D0F7100A0455D /* AV_selectWeightVC.swift in Sources */, + 753C259F2C3BEFB8006E2660 /* AV_ScrollingScaleView.swift in Sources */, + 753C25A22C3BF4A1006E2660 /* MLSliderRulerView.swift in Sources */, + 753C25A32C3BF4A1006E2660 /* MLSliderRulerScrollView.swift in Sources */, + 755073C62C3F81B400ADFD6B /* AV_LaunchLimitesVC.swift in Sources */, + 75C4E0BD2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.swift in Sources */, + 75C0A16C2BC789F900AB0094 /* AV_HomeVC.swift in Sources */, + 75C0A1322BC787A400AB0094 /* AppDelegate.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75C0A1402BC787A700AB0094 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 75C0A1492BC787A700AB0094 /* anniversary_ProjectTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 75C0A14A2BC787A700AB0094 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 75C0A1532BC787A700AB0094 /* anniversary_ProjectUITests.swift in Sources */, + 75C0A1552BC787A700AB0094 /* anniversary_ProjectUITestsLaunchTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 75C0A1462BC787A700AB0094 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 75C0A12D2BC787A400AB0094 /* anniversary_Project */; + targetProxy = 75C0A1452BC787A700AB0094 /* PBXContainerItemProxy */; + }; + 75C0A1502BC787A700AB0094 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 75C0A12D2BC787A400AB0094 /* anniversary_Project */; + targetProxy = 75C0A14F2BC787A700AB0094 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 75C0A1372BC787A500AB0094 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 75C0A1382BC787A500AB0094 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 75C0A13C2BC787A700AB0094 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 75C0A13D2BC787A700AB0094 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 75C0A1562BC787A700AB0094 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 75C0A1572BC787A700AB0094 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 75C0A1592BC787A700AB0094 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8088326EB6FBFFC8839103D7 /* Pods-anniversary_Project.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = anniversary_Project/anniversary_Project.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = MK2ZG9GGT4; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = anniversary_Project/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "Watermore\n"; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "We need to access your photo album so you can add reminders for anniversaries or birthdays"; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 2.0; + PRODUCT_BUNDLE_IDENTIFIER = com.countdown.day.daycount; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/anniversary_Project/header/AV_header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Debug; + }; + 75C0A15A2BC787A700AB0094 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FC148B18263C5E308A2640EF /* Pods-anniversary_Project.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = anniversary_Project/anniversary_Project.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = MK2ZG9GGT4; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = anniversary_Project/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "Watermore\n"; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "We need to access your photo album so you can add reminders for anniversaries or birthdays"; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; + INFOPLIST_KEY_UIMainStoryboardFile = Main; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 2.0; + PRODUCT_BUNDLE_IDENTIFIER = com.countdown.day.daycount; + PRODUCT_NAME = "$(TARGET_NAME)"; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; + SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/anniversary_Project/header/AV_header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = 1; + }; + name = Release; + }; + 75C0A15C2BC787A700AB0094 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.520.cn.anniversary-ProjectTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/anniversary_Project.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/anniversary_Project"; + }; + name = Debug; + }; + 75C0A15D2BC787A700AB0094 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.520.cn.anniversary-ProjectTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/anniversary_Project.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/anniversary_Project"; + }; + name = Release; + }; + 75C0A15F2BC787A700AB0094 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.520.cn.anniversary-ProjectUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = anniversary_Project; + }; + name = Debug; + }; + 75C0A1602BC787A700AB0094 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.520.cn.anniversary-ProjectUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = anniversary_Project; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 75C0A1292BC787A400AB0094 /* Build configuration list for PBXProject "anniversary_Project" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 75C0A1562BC787A700AB0094 /* Debug */, + 75C0A1572BC787A700AB0094 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 75C0A1582BC787A700AB0094 /* Build configuration list for PBXNativeTarget "anniversary_Project" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 75C0A1592BC787A700AB0094 /* Debug */, + 75C0A15A2BC787A700AB0094 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 75C0A15B2BC787A700AB0094 /* Build configuration list for PBXNativeTarget "anniversary_ProjectTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 75C0A15C2BC787A700AB0094 /* Debug */, + 75C0A15D2BC787A700AB0094 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 75C0A15E2BC787A700AB0094 /* Build configuration list for PBXNativeTarget "anniversary_ProjectUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 75C0A15F2BC787A700AB0094 /* Debug */, + 75C0A1602BC787A700AB0094 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 75C0A1262BC787A400AB0094 /* Project object */; +} diff --git a/anniversary_Project/Add/C/AV_AddVC.swift b/anniversary_Project/Add/C/AV_AddVC.swift new file mode 100644 index 0000000..a6518d0 --- /dev/null +++ b/anniversary_Project/Add/C/AV_AddVC.swift @@ -0,0 +1,619 @@ +// +// AV_AddVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/15. +// + +import UIKit +import BRPickerView +import Photos +import SVProgressHUD +import WCDBSwift +//import FirebaseAnalytics +import AppLovinSDK +import Alamofire +import FirebaseRemoteConfig + +class AV_AddVC: AV_RootVC { + + + @IBOutlet weak var scheduleImagV: UIImageView! + + + @IBOutlet weak var schedLabel: UILabel! + + + @IBOutlet weak var birthdayImagV: UIImageView! + + + @IBOutlet weak var birthdayLabel: UILabel! + + + @IBOutlet weak var memoryImagV: UIImageView! + + + @IBOutlet weak var memoryLabel: UILabel! + + + @IBOutlet weak var titleLabel: UITextField! + + + @IBOutlet weak var datetextF: UITextField! + + + @IBOutlet weak var switchSelect: UISwitch! + + + @IBOutlet weak var deleteBtn: UIButton! + + + @IBOutlet weak var cameraImagV: UIImageView! + + + @IBOutlet weak var scheduleV: UIView! + + + @IBOutlet weak var birthdayV: UIView! + + + @IBOutlet weak var memoryV: UIView! + + + + var type:String = "Schedule" + + var isremind:Bool = true + + var model:UserModel? + var typeedit:Int = 0 + + var dataUpdateClosure: ((UserModel) -> Void)? + + var interstitialAd: MAInterstitialAd! + var remoteConfig: RemoteConfig! + var isadshow:Bool = false + var retryAttempt = 0.0 + + override func viewDidLoad() { + super.viewDidLoad() + + cameraImagV.layer.cornerRadius = 8 + cameraImagV.clipsToBounds = true + cameraImagV.isUserInteractionEnabled = true + let tapGesture = UITapGestureRecognizer(target: self, action: #selector(imageTouch)) + cameraImagV.addGestureRecognizer(tapGesture) + + } + + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + self.createInterstitialAd() + remoteConfig = RemoteConfig.remoteConfig() + + // 设置最小获取间隔(开发期间可以设置较小的值) + let settings = RemoteConfigSettings() + settings.minimumFetchInterval = 0 + remoteConfig.configSettings = settings + // Fetch 配置值 + remoteConfig.setDefaults(fromPlist: "isopen") + fetchRemoteConfig() + + + if typeedit == 0{ + self.cameraImagV.image = UIImage(named: "camera") + }else{ + self.titleLabel.text = model?.name + self.datetextF.text = model?.date + self.switchSelect.isOn = ((model?.notificationEnabled) != nil) + let image = model?.getImage() + self.cameraImagV.image = image + } + + self.scheduleImagV.image = UIImage(named: "schedule_s") + self.schedLabel.alpha = 1.0 + + self.birthdayImagV.image = UIImage(named: "birthday_n") + self.birthdayLabel.alpha = 0.5 + + self.memoryImagV.image = UIImage(named: "memor_n") + self.memoryLabel.alpha = 0.5 + + scheduleV.layer.cornerRadius = 8 + scheduleV.layer.borderWidth = 1 + scheduleV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor + scheduleV.backgroundColor = .white + + birthdayV.layer.cornerRadius = 8 + birthdayV.layer.borderWidth = 0 + birthdayV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor + birthdayV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1) + + memoryV.layer.cornerRadius = 8 + memoryV.layer.borderWidth = 0 + memoryV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor + memoryV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1) + + if self.cameraImagV.image == UIImage(named: "camera"){ + self.deleteBtn.isHidden = true + }else{ + self.deleteBtn.isHidden = false + } + } + + @IBAction func back(_ sender: Any) { + + if self.typeedit == 0{ + self.dismiss(animated: true) + }else{ + self.navigationController?.popViewController(animated: true) + } + + } + + @IBAction func sure(_ sender: Any) { + + if let title = self.titleLabel.text, title.count > 0 && title.count <= 50 { + if self.datetextF.text!.count != 0{ + if cameraImagV.image != UIImage(named: "camera"){ + // print("---成功") + + if self.typeedit == 0{ + let user = UserModel() + let uuid = UUID() + user.uid = uuid.uuidString + user.name = self.titleLabel.text! + user.date = self.datetextF.text! + user.notificationEnabled = self.isremind + user.type = self.type + user.setImage(image: self.cameraImagV.image!) + PrWCDBBaseManager.shared.insertToDb(objects: [user], intoTable: userModelTableName) + self.titleLabel.text = "" + self.datetextF.text = "" + self.cameraImagV.image = UIImage(named: "camera") + self.deleteBtn.isHidden = true + + SVProgressHUD.showSuccess(withStatus: "Added successfully") + DispatchQueue.global().asyncAfter(wallDeadline: .now() + 1.5) { + SVProgressHUD.dismiss() + } + if self.isadshow == true{ + DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.5) { + + if self.interstitialAd.isReady { + self.interstitialAd.show() + self.setPostSHOW() + + }else{ + + self.dismiss(animated: true) + + } + } + }else{ + + self.dismiss(animated: true) + + } + + }else{ + let user = UserModel() + // let uuid = UUID() + user.uid = model!.uid + user.name = self.titleLabel.text! + user.date = self.datetextF.text! + user.notificationEnabled = self.isremind + user.type = self.type + user.setImage(image: self.cameraImagV.image!) + let condition: Condition = UserModel.Properties.uid == model!.uid + PrWCDBBaseManager.shared.updateToDb(table: userModelTableName, on: [UserModel.Properties.name,UserModel.Properties.date,UserModel.Properties.type,UserModel.Properties.notificationEnabled,UserModel.Properties.imageBase64], with: user, where: condition) + self.titleLabel.text = "" + self.datetextF.text = "" + self.cameraImagV.image = UIImage(named: "camera") + self.deleteBtn.isHidden = true + + SVProgressHUD.showInfo(withStatus: "update completed") + DispatchQueue.global().asyncAfter(wallDeadline: .now() + 1.5) { + SVProgressHUD.dismiss() + } + self.navigationController?.popViewController(animated: true) + dataUpdateClosure?(user) + + + } + + }else{ + SVProgressHUD.showInfo(withStatus: "Please choose your commemorative picture") + DispatchQueue.global().asyncAfter(deadline: .now() + 1.5) { + SVProgressHUD.dismiss() + } + } + + }else{ + SVProgressHUD.showInfo(withStatus: "Please select anniversary date") + DispatchQueue.global().asyncAfter(deadline: .now() + 1.5) { + SVProgressHUD.dismiss() + } + } + + } else { + SVProgressHUD.showInfo(withStatus: "Please enter a title within 30 characters") + DispatchQueue.global().asyncAfter(deadline: .now() + 1.5) { + SVProgressHUD.dismiss() + } + } + + + } + + @objc func imageTouch(){ + let imagePicker = UIImagePickerController() + imagePicker.sourceType = .photoLibrary + imagePicker.delegate = self + present(imagePicker, animated: true, completion: nil) + + if self.cameraImagV.image == UIImage(named: "camera"){ + self.deleteBtn.isHidden = true + }else{ + self.deleteBtn.isHidden = false + } + + } + + + @IBAction func dateSelect(_ sender: UIButton) { + titleLabel.resignFirstResponder() + let datePicker = BRDatePickerView() + datePicker.pickerMode = .YMD + datePicker.title = "Select Date" + datePicker.selectDate = Date() + datePicker.isAutoSelect = true // 自动选择,滚动选择器时立即返回结果,默认为 false + datePicker.resultBlock = { selectDate, selectValue in + print("选择的值:\(selectValue ?? "")") + self.datetextF.text = selectValue + } + let customestyle = BRPickerStyle() + customestyle.cancelBtnTitle = "Cancel" + customestyle.doneBtnTitle = "Sure" + datePicker.pickerStyle = customestyle + datePicker.show() + } + + + @IBAction func switchSele(_ sender: Any) { + if switchSelect.isOn { + print("Switch is ON") + self.isremind = true + } else { + print("Switch is OFF") + self.isremind = false + } + + } + + + + + @IBAction func scheduleBtn(_ sender: UIButton) { + self.type = "Schedule" + + self.scheduleImagV.image = UIImage(named: "schedule_s") + self.schedLabel.alpha = 1.0 + + self.birthdayImagV.image = UIImage(named: "birthday_n") + self.birthdayLabel.alpha = 0.5 + + self.memoryImagV.image = UIImage(named: "memor_n") + self.memoryLabel.alpha = 0.5 + scheduleV.layer.cornerRadius = 8 + scheduleV.layer.borderWidth = 1 + scheduleV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor + scheduleV.backgroundColor = .white + + birthdayV.layer.cornerRadius = 8 + birthdayV.layer.borderWidth = 0 + birthdayV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor + birthdayV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1) + + memoryV.layer.cornerRadius = 8 + memoryV.layer.borderWidth = 0 + memoryV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor + memoryV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1) + + } + + + @IBAction func birthdatBtn(_ sender: UIButton) { + self.type = "Birthday" + self.scheduleImagV.image = UIImage(named: "schedule_n") + self.schedLabel.alpha = 0.5 + + self.birthdayImagV.image = UIImage(named: "birthday_s") + self.birthdayLabel.alpha = 1.0 + + self.memoryImagV.image = UIImage(named: "memor_n") + self.memoryLabel.alpha = 0.5 + + scheduleV.layer.cornerRadius = 8 + scheduleV.layer.borderWidth = 0 + scheduleV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor + scheduleV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1) + + birthdayV.layer.cornerRadius = 8 + birthdayV.layer.borderWidth = 1 + birthdayV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor + birthdayV.backgroundColor = .white + + memoryV.layer.cornerRadius = 8 + memoryV.layer.borderWidth = 0 + memoryV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor + memoryV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1) + + } + + + @IBAction func memoryBtn(_ sender: UIButton) { + + self.type = "Memory" + self.scheduleImagV.image = UIImage(named: "schedule_n") + self.schedLabel.alpha = 0.5 + + self.birthdayImagV.image = UIImage(named: "birthday_n") + self.birthdayLabel.alpha = 0.5 + + self.memoryImagV.image = UIImage(named: "memor_S") + self.memoryLabel.alpha = 1.0 + + scheduleV.layer.cornerRadius = 8 + scheduleV.layer.borderWidth = 0 + scheduleV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor + scheduleV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1) + + birthdayV.layer.cornerRadius = 8 + birthdayV.layer.borderWidth = 0 + birthdayV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor + birthdayV.backgroundColor = .hexSting(color: "#FAFAFA", alpha: 1) + + memoryV.layer.cornerRadius = 8 + memoryV.layer.borderWidth = 1 + memoryV.layer.borderColor = UIColor.hexSting(color: "#4B92FE", alpha: 0.5).cgColor + memoryV.backgroundColor = .white + + + } + + + + + + @IBAction func btndelete(_ sender: UIButton) { + self.cameraImagV.image = UIImage(named: "camera") + self.deleteBtn.isHidden = true + } + + ///是否有广告 + func fetchRemoteConfig() { + let localVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0" + remoteConfig.fetch{ (status, error) -> Void in + if status == .success { + print("Config fetched!") + self.remoteConfig.activate { changed, error in + if error == nil{ + let js = self.remoteConfig.configValue(forKey: "isopen").jsonValue as! [String:Any] + let valueopen = js["isadopen"] as! Bool + let valueversion = js["version"] as! String + DispatchQueue.main.async { + if valueversion == localVersion{ + self.isadshow = false + }else{ + if valueopen { + self.isadshow = true + } else { + self.isadshow = false + } + } + } + + + } + + } + + } else { + print("Config not fetched") + if let error = error { + print("Error: \(error.localizedDescription)") + } + } + } + + } + func setPostload(){ + let url = "http://111.9.47.226:38080/top_selection/save_ad_load_log" + let parameters:[String : Any] = [ + "deviceId": StartManager.shared.devicID ?? "", + "localIp": StartManager.shared.localIP ?? "", + "remoteIp": StartManager.shared.publicIP ?? "", + "linkId": "", + "packageName": "com.countdown.day.daycount", + "gaid": StartManager.shared.idfaid ?? "", + "dataId": "", + "shelfNumber":"日历添加和返回", + "succeed": StartManager.shared.succeed, + "loadTime": "", + "adPlatform": StartManager.shared.adPlatform ?? "", + "countryCode": StartManager.shared.countryCode ?? "", + "adId": StartManager.shared.adId ?? "", + "platformResponseTime": StartManager.shared.platformResponseTime ?? "", + "getIpResponseTime": StartManager.shared.getIpResponseTime ?? "", + "ecpm": StartManager.shared.ecpm ?? "", + "dsp": StartManager.shared.dsp ?? "", + "network": StartManager.shared.network ?? "", + "showStatus": 0, + "washParam": true, + ] + + + let headers: HTTPHeaders = [ + "Content-Type": "application/json" + ] + + NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in + switch result { + case .success(let data): + print("Response:--- \(data)") + case .failure(let error): + print("Error:--- \(error)") + } + } + + } + + + func setPostSHOW(){ + let url = "http://111.9.47.226:38080/top_selection/save_ad_show_log" + let parameters:[String : Any] = [ + "deviceId": StartManager.shared.devicID ?? "", + "localIp": StartManager.shared.localIP ?? "", + "remoteIp": StartManager.shared.publicIP ?? "", + "linkId": "", + "packageName": "com.countdown.day.daycount", + "gaid": StartManager.shared.idfaid ?? "", + "dataId": "", + "shelfNumber":"日历添加和返回", + "succeed": StartManager.shared.succeed, + "loadTime": "", + "adPlatform": StartManager.shared.adPlatform ?? "", + "countryCode": StartManager.shared.countryCode ?? "", + "adId": StartManager.shared.adId ?? "", + "platformResponseTime": StartManager.shared.platformResponseTime ?? "", + "getIpResponseTime": StartManager.shared.getIpResponseTime ?? "", + "ecpm": StartManager.shared.ecpm ?? "", + "dsp": StartManager.shared.dsp ?? "", + "network": StartManager.shared.network ?? "", + ] + + + let headers: HTTPHeaders = [ + "Content-Type": "application/json" + ] + + NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in + switch result { + case .success(let data): + print("Response:--- \(data)") + case .failure(let error): + print("Error:--- \(error)") + } + } + + } + + +} + +extension AV_AddVC:UIImagePickerControllerDelegate, UINavigationControllerDelegate{ + + // 当选择图片完成时调用的方法 + func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { + picker.dismiss(animated: true, completion: nil) + + // 获取选定的图片 + if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { + // 存储图片到 UserDefaults + // saveImageToUserDefaults(image, forKey: "selectedImage") + self.cameraImagV.image = image + // 也可以将图片保存到应用的沙盒中,以便稍后使用 + // saveImageToDocumentsDirectory(image) + if self.cameraImagV.image == UIImage(named: "camera"){ + self.deleteBtn.isHidden = true + }else{ + self.deleteBtn.isHidden = false + } + } + } + + // 当用户取消选择图片时调用的方法 + func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { + picker.dismiss(animated: true, completion: nil) + if self.cameraImagV.image == UIImage(named: "camera"){ + self.deleteBtn.isHidden = true + }else{ + self.deleteBtn.isHidden = false + } + } + +} +extension AV_AddVC: MAAdDelegate +{ + func createInterstitialAd() + { + interstitialAd = MAInterstitialAd(adUnitIdentifier: "8fccdfa964b52e26") + interstitialAd.delegate = self + + // Load the first ad + interstitialAd.load() + } + + // MARK: MAAdDelegate Protocol + + func didLoad(_ ad: MAAd) + { + // Interstitial ad is ready to be shown. 'interstitialAd.isReady' will now return 'true' + + // Reset retry attempt + retryAttempt = 0 + StartManager.shared.succeed = true + // StartManager.shared.loadTime = self.adLoadTime + StartManager.shared.adPlatform = "MAX" + StartManager.shared.countryCode = ALSdk.shared().configuration.countryCode + StartManager.shared.adId = "8fccdfa964b52e26" + StartManager.shared.platformResponseTime = ad.requestLatency + StartManager.shared.ecpm = Float(ad.revenue) + StartManager.shared.dsp = ad.dspName + StartManager.shared.network = ad.networkName + + + setPostload() + } + + func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError) + { + // Interstitial ad failed to load + // We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds) + + retryAttempt += 1 + let delaySec = pow(2.0, min(6.0, retryAttempt)) + + DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) { + self.interstitialAd.load() + } + } + + func didDisplay(_ ad: MAAd) + { + // Pause your app's background audio + } + + func didClick(_ ad: MAAd) {} + + func didHide(_ ad: MAAd) + { + // Resume your app's background audio + // Interstitial ad is hidden. Pre-load the next ad + interstitialAd.load() + if self.typeedit == 0{ + self.dismiss(animated: true) + }else{ + self.navigationController?.popViewController(animated: true) + } + } + + func didFail(toDisplay ad: MAAd, withError error: MAError) + { + // Interstitial ad failed to display. We recommend loading the next ad + interstitialAd.load() + } +} diff --git a/anniversary_Project/Add/C/AV_AddVC.xib b/anniversary_Project/Add/C/AV_AddVC.xib new file mode 100644 index 0000000..dd5b44b --- /dev/null +++ b/anniversary_Project/Add/C/AV_AddVC.xib @@ -0,0 +1,350 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/AppDelegate.swift b/anniversary_Project/AppDelegate.swift new file mode 100644 index 0000000..695f764 --- /dev/null +++ b/anniversary_Project/AppDelegate.swift @@ -0,0 +1,229 @@ +// +// AppDelegate.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/11. +// + +import UIKit +import IQKeyboardManagerSwift +import Photos +import SVProgressHUD +import AppLovinSDK +import FirebaseCore +import FirebaseAnalytics +import Alamofire + +@main +class AppDelegate: UIResponder, UIApplicationDelegate,UNUserNotificationCenterDelegate { + + var window: UIWindow? + let hasLaunchedBeforeKey = "hasLaunchedBefore" + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + FirebaseApp.configure() + IQKeyboardManager.shared.enable = true + self.window?.frame = UIScreen.main.bounds + UNUserNotificationCenter.current().delegate = self + // let vc = AV_RootTabbarVC() + // self.window?.rootViewController = AV_NAVVC(rootViewController: vc) + + let userDefaults = UserDefaults.standard + let initConfig = ALSdkInitializationConfiguration(sdkKey: "NLQHJDx4rcfd5IqhZf9nad2tIqFSH8SSKP3DXD18sTKUvV6tBfrH9_RPCGb6hvEn3NPXJDmUQCnvnKgHIT7Qn4") { builder in + builder.mediationProvider = ALMediationProviderMAX + } + + if userDefaults.bool(forKey: hasLaunchedBeforeKey) { + // 不是第一次启动 + let vc = AV_LaunchLimitesVC() + self.window?.rootViewController = AV_NAVVC(rootViewController: vc) + + ALSdk.shared().initialize(with: initConfig) { sdkConfig in + // Start loading ads + vc.createInterstitialAd() + + } + self.window?.rootViewController = AV_NAVVC(rootViewController: vc) + } else { + // 第一次启动 + let vc = AV_SelectGenderVC() + self.window?.rootViewController = AV_NAVVC(rootViewController: vc) + userDefaults.set(true, forKey: hasLaunchedBeforeKey) + + setdispatch() + stePermissions() + let currentDate = Date() + // 使用 UserDefaults 存储日期 + let defaults = UserDefaults.standard + defaults.set(currentDate, forKey: "savedDate") + + ALSdk.shared().initialize(with: initConfig) { sdkConfig in + + + } + + } + + self.window?.makeKeyAndVisible() + + // 强制设置浅色模式 + if #available(iOS 13.0, *) { + window?.overrideUserInterfaceStyle = .light + + } + + return true + } + func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { + completionHandler([.alert, .sound, .badge]) + } + + func stePermissions(){ + UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in + if granted { + print("Permission granted") + } else if let error = error { + print("Permission denied: \(error.localizedDescription)") + } + } + requestPhotoLibraryPermission() + setNetwork() + // 使用示例 + let healthManager = HealthManager() + + // 请求授权 + healthManager.requestAuthorization { (success, error) in + if success { + print("HealthKit authorization granted") + + } else if let error = error { + print("HealthKit authorization failed with error: \(error.localizedDescription)") + } + } + } + + func requestPhotoLibraryPermission() { + // 检查相册权限状态 + let status = PHPhotoLibrary.authorizationStatus() + + // 根据权限状态进行处理 + switch status { + case .authorized: + // 用户已授权访问相册 + print("相册权限已授权") + case .denied, .restricted: + // 用户已拒绝访问相册或权限受限 + print("相册权限已拒绝或受限,请在设置中开启权限") + case .notDetermined: + // 用户尚未作出选择,请求相册权限 + PHPhotoLibrary.requestAuthorization { [weak self] (newStatus) in + DispatchQueue.main.async { + if newStatus == .authorized { + // 用户授权访问相册 + print("用户已授权访问相册") + } else { + // 用户未授权访问相册 + print("用户未授权访问相册") + } + } + } + @unknown default: + // 处理未知权限状态 + print("未知的相册权限状态") + } + } + + func setNetwork(){ + // 创建一个URL对象 + if let url = URL(string: "https://www.baidu.com/") { + // 创建一个URLSession对象 + let session = URLSession.shared + + // 创建一个网络请求任务 + let task = session.dataTask(with: url) { (data, response, error) in + if let error = error { + print("网络请求出错:\(error)") + + } else if let data = data { + + } + } + + // 开始网络请求任务 + task.resume() + } else { + print("URL无效") + } + } +} + +func setdispatch(){ + // 使用信号量控制并发任务 + let dispatchGroup = DispatchGroup() + + // 请求跟踪授权并处理 IDFA + dispatchGroup.enter() + DispatchQueue.global(qos: .background).async { + requestTrackingAuthorization { idfa in + DispatchQueue.main.async { + if let idfa = idfa { + print("IDFA: \(idfa)") + StartManager.shared.idfaid = idfa + print("Stored IDFA: \(StartManager.shared.idfaid ?? "N/A")") + } else { + print("IDFA is not available or tracking authorization denied.") + } + dispatchGroup.leave() + } + } + } + + // 获取本地 IP 地址 + dispatchGroup.enter() + DispatchQueue.global(qos: .background).async { + if let localIP = getLocalIPAddress() { + DispatchQueue.main.async { + print("Local IP Address: \(localIP)") + StartManager.shared.localIP = localIP + dispatchGroup.leave() + } + } else { + DispatchQueue.main.async { + print("Local IP Address not available") + dispatchGroup.leave() + } + } + } + + // 获取远程 IP 地址 + dispatchGroup.enter() + DispatchQueue.global(qos: .background).async { + getPublicIPAddress { publicIP in + DispatchQueue.main.async { + if let publicIP = publicIP { + print("Public IP Address: \(publicIP)") + StartManager.shared.publicIP = publicIP + print("Stored Public IP Address: \(StartManager.shared.publicIP ?? "N/A")") + } else { + print("Public IP Address not available") + } + dispatchGroup.leave() + } + } + } + + // 获取设备 ID + dispatchGroup.enter() + DispatchQueue.global(qos: .background).async { + let deviceID = UIDevice.current.identifierForVendor?.uuidString + DispatchQueue.main.async { + StartManager.shared.devicID = deviceID + print("Device ID: \(StartManager.shared.devicID ?? "N/A")") + dispatchGroup.leave() + } + } + + // 所有任务完成后的操作 + dispatchGroup.notify(queue: .main) { + print("All tasks are completed.") + } +} diff --git a/anniversary_Project/Assets.xcassets/AccentColor.colorset/Contents.json b/anniversary_Project/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/Contents.json b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..5a8c22d --- /dev/null +++ b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,119 @@ +{ + "images" : [ + { + "filename" : "icon-20@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "20x20" + }, + { + "filename" : "icon-20@3x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "20x20" + }, + { + "filename" : "icon-29@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "29x29" + }, + { + "filename" : "icon-29@3x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "29x29" + }, + { + "filename" : "icon-38@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "38x38" + }, + { + "filename" : "icon-38@3x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "38x38" + }, + { + "filename" : "icon-40@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "40x40" + }, + { + "filename" : "icon-40@3x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "40x40" + }, + { + "filename" : "icon-60@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "60x60" + }, + { + "filename" : "icon-60@3x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "60x60" + }, + { + "filename" : "icon-64@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "64x64" + }, + { + "filename" : "icon-64@3x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "3x", + "size" : "64x64" + }, + { + "filename" : "icon-68@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "68x68" + }, + { + "filename" : "icon-76@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "76x76" + }, + { + "filename" : "icon-83.5@2x.png", + "idiom" : "universal", + "platform" : "ios", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "filename" : "icon-1024.png", + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-1024.png new file mode 100644 index 0000000..e5a4809 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-1024.png differ diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png new file mode 100644 index 0000000..624130a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png new file mode 100644 index 0000000..53d9810 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png new file mode 100644 index 0000000..6f37f0c Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png new file mode 100644 index 0000000..6068731 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-38@2x.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-38@2x.png new file mode 100644 index 0000000..26d1065 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-38@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-38@3x.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-38@3x.png new file mode 100644 index 0000000..fc09b72 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-38@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png new file mode 100644 index 0000000..5794fe5 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png new file mode 100644 index 0000000..f0946a8 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png new file mode 100644 index 0000000..f0946a8 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png new file mode 100644 index 0000000..6d15e05 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-64@2x.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-64@2x.png new file mode 100644 index 0000000..d6398c6 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-64@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-64@3x.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-64@3x.png new file mode 100644 index 0000000..0948595 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-64@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-68@2x.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-68@2x.png new file mode 100644 index 0000000..4898245 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-68@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png new file mode 100644 index 0000000..065c5c1 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png new file mode 100644 index 0000000..ebc04d3 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/Contents.json b/anniversary_Project/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/add/Contents.json b/anniversary_Project/Assets.xcassets/add/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/add/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/add/birthday_n.imageset/Contents.json b/anniversary_Project/Assets.xcassets/add/birthday_n.imageset/Contents.json new file mode 100644 index 0000000..ee96937 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/add/birthday_n.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_7.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_7@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_7@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/add/birthday_n.imageset/分组_7.png b/anniversary_Project/Assets.xcassets/add/birthday_n.imageset/分组_7.png new file mode 100644 index 0000000..e1f8d74 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/birthday_n.imageset/分组_7.png differ diff --git a/anniversary_Project/Assets.xcassets/add/birthday_n.imageset/分组_7@2x.png b/anniversary_Project/Assets.xcassets/add/birthday_n.imageset/分组_7@2x.png new file mode 100644 index 0000000..30120f3 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/birthday_n.imageset/分组_7@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/birthday_n.imageset/分组_7@3x.png b/anniversary_Project/Assets.xcassets/add/birthday_n.imageset/分组_7@3x.png new file mode 100644 index 0000000..efe909e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/birthday_n.imageset/分组_7@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/birthday_s.imageset/Contents.json b/anniversary_Project/Assets.xcassets/add/birthday_s.imageset/Contents.json new file mode 100644 index 0000000..ee96937 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/add/birthday_s.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_7.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_7@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_7@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/add/birthday_s.imageset/分组_7.png b/anniversary_Project/Assets.xcassets/add/birthday_s.imageset/分组_7.png new file mode 100644 index 0000000..c0d553c Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/birthday_s.imageset/分组_7.png differ diff --git a/anniversary_Project/Assets.xcassets/add/birthday_s.imageset/分组_7@2x.png b/anniversary_Project/Assets.xcassets/add/birthday_s.imageset/分组_7@2x.png new file mode 100644 index 0000000..d6bf3d4 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/birthday_s.imageset/分组_7@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/birthday_s.imageset/分组_7@3x.png b/anniversary_Project/Assets.xcassets/add/birthday_s.imageset/分组_7@3x.png new file mode 100644 index 0000000..f73848a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/birthday_s.imageset/分组_7@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/camera.imageset/Contents.json b/anniversary_Project/Assets.xcassets/add/camera.imageset/Contents.json new file mode 100644 index 0000000..8190ebe --- /dev/null +++ b/anniversary_Project/Assets.xcassets/add/camera.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_10.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_10@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_10@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/add/camera.imageset/分组_10.png b/anniversary_Project/Assets.xcassets/add/camera.imageset/分组_10.png new file mode 100644 index 0000000..55e9ec5 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/camera.imageset/分组_10.png differ diff --git a/anniversary_Project/Assets.xcassets/add/camera.imageset/分组_10@2x.png b/anniversary_Project/Assets.xcassets/add/camera.imageset/分组_10@2x.png new file mode 100644 index 0000000..3de4aa8 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/camera.imageset/分组_10@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/camera.imageset/分组_10@3x.png b/anniversary_Project/Assets.xcassets/add/camera.imageset/分组_10@3x.png new file mode 100644 index 0000000..d1025f6 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/camera.imageset/分组_10@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/date.imageset/Contents.json b/anniversary_Project/Assets.xcassets/add/date.imageset/Contents.json new file mode 100644 index 0000000..adecac8 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/add/date.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Iconly_Light_Calendar.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Iconly_Light_Calendar@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Iconly_Light_Calendar@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/add/date.imageset/Iconly_Light_Calendar.png b/anniversary_Project/Assets.xcassets/add/date.imageset/Iconly_Light_Calendar.png new file mode 100644 index 0000000..ce94c88 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/date.imageset/Iconly_Light_Calendar.png differ diff --git a/anniversary_Project/Assets.xcassets/add/date.imageset/Iconly_Light_Calendar@2x.png b/anniversary_Project/Assets.xcassets/add/date.imageset/Iconly_Light_Calendar@2x.png new file mode 100644 index 0000000..f2df779 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/date.imageset/Iconly_Light_Calendar@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/date.imageset/Iconly_Light_Calendar@3x.png b/anniversary_Project/Assets.xcassets/add/date.imageset/Iconly_Light_Calendar@3x.png new file mode 100644 index 0000000..69a774c Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/date.imageset/Iconly_Light_Calendar@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/delete.imageset/Contents.json b/anniversary_Project/Assets.xcassets/add/delete.imageset/Contents.json new file mode 100644 index 0000000..ce6b1ae --- /dev/null +++ b/anniversary_Project/Assets.xcassets/add/delete.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/add/delete.imageset/分组_2.png b/anniversary_Project/Assets.xcassets/add/delete.imageset/分组_2.png new file mode 100644 index 0000000..a40f1c1 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/delete.imageset/分组_2.png differ diff --git a/anniversary_Project/Assets.xcassets/add/delete.imageset/分组_2@2x.png b/anniversary_Project/Assets.xcassets/add/delete.imageset/分组_2@2x.png new file mode 100644 index 0000000..915aa6e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/delete.imageset/分组_2@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/delete.imageset/分组_2@3x.png b/anniversary_Project/Assets.xcassets/add/delete.imageset/分组_2@3x.png new file mode 100644 index 0000000..ca78dc9 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/delete.imageset/分组_2@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/dismiss.imageset/Contents.json b/anniversary_Project/Assets.xcassets/add/dismiss.imageset/Contents.json new file mode 100644 index 0000000..919f528 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/add/dismiss.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/add/dismiss.imageset/分组_3.png b/anniversary_Project/Assets.xcassets/add/dismiss.imageset/分组_3.png new file mode 100644 index 0000000..c887fdf Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/dismiss.imageset/分组_3.png differ diff --git a/anniversary_Project/Assets.xcassets/add/dismiss.imageset/分组_3@2x.png b/anniversary_Project/Assets.xcassets/add/dismiss.imageset/分组_3@2x.png new file mode 100644 index 0000000..f397d1b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/dismiss.imageset/分组_3@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/dismiss.imageset/分组_3@3x.png b/anniversary_Project/Assets.xcassets/add/dismiss.imageset/分组_3@3x.png new file mode 100644 index 0000000..b794ec5 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/dismiss.imageset/分组_3@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/memor_S.imageset/Contents.json b/anniversary_Project/Assets.xcassets/add/memor_S.imageset/Contents.json new file mode 100644 index 0000000..51c01a9 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/add/memor_S.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_9.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_9@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_9@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/add/memor_S.imageset/分组_9.png b/anniversary_Project/Assets.xcassets/add/memor_S.imageset/分组_9.png new file mode 100644 index 0000000..3918981 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/memor_S.imageset/分组_9.png differ diff --git a/anniversary_Project/Assets.xcassets/add/memor_S.imageset/分组_9@2x.png b/anniversary_Project/Assets.xcassets/add/memor_S.imageset/分组_9@2x.png new file mode 100644 index 0000000..9d0a42a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/memor_S.imageset/分组_9@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/memor_S.imageset/分组_9@3x.png b/anniversary_Project/Assets.xcassets/add/memor_S.imageset/分组_9@3x.png new file mode 100644 index 0000000..6e6273f Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/memor_S.imageset/分组_9@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/memor_n.imageset/Contents.json b/anniversary_Project/Assets.xcassets/add/memor_n.imageset/Contents.json new file mode 100644 index 0000000..51c01a9 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/add/memor_n.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_9.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_9@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_9@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/add/memor_n.imageset/分组_9.png b/anniversary_Project/Assets.xcassets/add/memor_n.imageset/分组_9.png new file mode 100644 index 0000000..001eb3a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/memor_n.imageset/分组_9.png differ diff --git a/anniversary_Project/Assets.xcassets/add/memor_n.imageset/分组_9@2x.png b/anniversary_Project/Assets.xcassets/add/memor_n.imageset/分组_9@2x.png new file mode 100644 index 0000000..a301317 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/memor_n.imageset/分组_9@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/memor_n.imageset/分组_9@3x.png b/anniversary_Project/Assets.xcassets/add/memor_n.imageset/分组_9@3x.png new file mode 100644 index 0000000..92be414 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/memor_n.imageset/分组_9@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/schedule_n.imageset/Contents.json b/anniversary_Project/Assets.xcassets/add/schedule_n.imageset/Contents.json new file mode 100644 index 0000000..ce0f6aa --- /dev/null +++ b/anniversary_Project/Assets.xcassets/add/schedule_n.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_8.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_8@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_8@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/add/schedule_n.imageset/分组_8.png b/anniversary_Project/Assets.xcassets/add/schedule_n.imageset/分组_8.png new file mode 100644 index 0000000..63b9b68 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/schedule_n.imageset/分组_8.png differ diff --git a/anniversary_Project/Assets.xcassets/add/schedule_n.imageset/分组_8@2x.png b/anniversary_Project/Assets.xcassets/add/schedule_n.imageset/分组_8@2x.png new file mode 100644 index 0000000..a6f187c Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/schedule_n.imageset/分组_8@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/schedule_n.imageset/分组_8@3x.png b/anniversary_Project/Assets.xcassets/add/schedule_n.imageset/分组_8@3x.png new file mode 100644 index 0000000..59e9682 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/schedule_n.imageset/分组_8@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/schedule_s.imageset/Contents.json b/anniversary_Project/Assets.xcassets/add/schedule_s.imageset/Contents.json new file mode 100644 index 0000000..ce0f6aa --- /dev/null +++ b/anniversary_Project/Assets.xcassets/add/schedule_s.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_8.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_8@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_8@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/add/schedule_s.imageset/分组_8.png b/anniversary_Project/Assets.xcassets/add/schedule_s.imageset/分组_8.png new file mode 100644 index 0000000..dcd0589 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/schedule_s.imageset/分组_8.png differ diff --git a/anniversary_Project/Assets.xcassets/add/schedule_s.imageset/分组_8@2x.png b/anniversary_Project/Assets.xcassets/add/schedule_s.imageset/分组_8@2x.png new file mode 100644 index 0000000..644cbe6 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/schedule_s.imageset/分组_8@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/schedule_s.imageset/分组_8@3x.png b/anniversary_Project/Assets.xcassets/add/schedule_s.imageset/分组_8@3x.png new file mode 100644 index 0000000..ccf76fa Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/schedule_s.imageset/分组_8@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/sure.imageset/Contents.json b/anniversary_Project/Assets.xcassets/add/sure.imageset/Contents.json new file mode 100644 index 0000000..ab34051 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/add/sure.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_5.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_5@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_5@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/add/sure.imageset/分组_5.png b/anniversary_Project/Assets.xcassets/add/sure.imageset/分组_5.png new file mode 100644 index 0000000..4a06390 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/sure.imageset/分组_5.png differ diff --git a/anniversary_Project/Assets.xcassets/add/sure.imageset/分组_5@2x.png b/anniversary_Project/Assets.xcassets/add/sure.imageset/分组_5@2x.png new file mode 100644 index 0000000..69a5133 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/sure.imageset/分组_5@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/add/sure.imageset/分组_5@3x.png b/anniversary_Project/Assets.xcassets/add/sure.imageset/分组_5@3x.png new file mode 100644 index 0000000..20f715b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/add/sure.imageset/分组_5@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Frame.png new file mode 100644 index 0000000..afe6897 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Frame@2x.png new file mode 100644 index 0000000..bb31f06 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Frame@3x.png new file mode 100644 index 0000000..78ab39c Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/1-1.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Frame.png new file mode 100644 index 0000000..8867974 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Frame@2x.png new file mode 100644 index 0000000..f823c2f Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Frame@3x.png new file mode 100644 index 0000000..b4f4045 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/1.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Frame.png new file mode 100644 index 0000000..473e976 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Frame@2x.png new file mode 100644 index 0000000..83c523a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Frame@3x.png new file mode 100644 index 0000000..4d4995f Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/2-2.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Frame.png new file mode 100644 index 0000000..1c89739 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Frame@2x.png new file mode 100644 index 0000000..3df790a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Frame@3x.png new file mode 100644 index 0000000..c07f658 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/2.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Frame.png new file mode 100644 index 0000000..dc283a8 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Frame@2x.png new file mode 100644 index 0000000..dd03a3f Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Frame@3x.png new file mode 100644 index 0000000..3026b80 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/3-3.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Frame.png new file mode 100644 index 0000000..28d0e6b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Frame@2x.png new file mode 100644 index 0000000..981a277 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Frame@3x.png new file mode 100644 index 0000000..737923d Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/3.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Frame.png new file mode 100644 index 0000000..ab56521 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Frame@2x.png new file mode 100644 index 0000000..4f9bbff Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Frame@3x.png new file mode 100644 index 0000000..096ca9b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/4-4.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/4.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/4.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/4.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/4.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/4.imageset/Frame.png new file mode 100644 index 0000000..c5e5d3e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/4.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/4.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/4.imageset/Frame@2x.png new file mode 100644 index 0000000..2f0908f Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/4.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/4.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/4.imageset/Frame@3x.png new file mode 100644 index 0000000..f44359a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/4.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/5-5.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/5-5.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/5-5.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/5-5.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/5-5.imageset/Frame.png new file mode 100644 index 0000000..e4c00db Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/5-5.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/5-5.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/5-5.imageset/Frame@2x.png new file mode 100644 index 0000000..112d14c Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/5-5.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/5-5.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/5-5.imageset/Frame@3x.png new file mode 100644 index 0000000..75b3a19 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/5-5.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/5.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/5.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/5.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/5.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/5.imageset/Frame.png new file mode 100644 index 0000000..e93bb65 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/5.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/5.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/5.imageset/Frame@2x.png new file mode 100644 index 0000000..79c97dc Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/5.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/5.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/5.imageset/Frame@3x.png new file mode 100644 index 0000000..0d608fb Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/5.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/6-6.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/6-6.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/6-6.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/6-6.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/6-6.imageset/Frame.png new file mode 100644 index 0000000..e136df8 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/6-6.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/6-6.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/6-6.imageset/Frame@2x.png new file mode 100644 index 0000000..77da258 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/6-6.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/6-6.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/6-6.imageset/Frame@3x.png new file mode 100644 index 0000000..579f73b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/6-6.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/6.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/6.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/6.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/6.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/6.imageset/Frame.png new file mode 100644 index 0000000..805d344 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/6.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/6.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/6.imageset/Frame@2x.png new file mode 100644 index 0000000..276e8aa Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/6.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/6.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/6.imageset/Frame@3x.png new file mode 100644 index 0000000..d833fe7 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/6.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/7-7.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/7-7.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/7-7.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/7-7.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/7-7.imageset/Frame.png new file mode 100644 index 0000000..a73abc1 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/7-7.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/7-7.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/7-7.imageset/Frame@2x.png new file mode 100644 index 0000000..6f6610a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/7-7.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/7-7.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/7-7.imageset/Frame@3x.png new file mode 100644 index 0000000..6138407 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/7-7.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/7.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/7.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/7.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/7.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/7.imageset/Frame.png new file mode 100644 index 0000000..0fc02da Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/7.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/7.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/7.imageset/Frame@2x.png new file mode 100644 index 0000000..81892df Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/7.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/7.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/7.imageset/Frame@3x.png new file mode 100644 index 0000000..f4bebe1 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/7.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/8-8.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/8-8.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/8-8.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/8-8.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/8-8.imageset/Frame.png new file mode 100644 index 0000000..f14e6c8 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/8-8.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/8-8.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/8-8.imageset/Frame@2x.png new file mode 100644 index 0000000..b1125fc Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/8-8.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/8-8.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/8-8.imageset/Frame@3x.png new file mode 100644 index 0000000..cf960a3 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/8-8.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/8.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/8.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/8.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/8.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/8.imageset/Frame.png new file mode 100644 index 0000000..6a30b64 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/8.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/8.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/8.imageset/Frame@2x.png new file mode 100644 index 0000000..4e5bbf4 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/8.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/8.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/8.imageset/Frame@3x.png new file mode 100644 index 0000000..388f4e6 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/8.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Clod.imageset/Cold Face.png b/anniversary_Project/Assets.xcassets/addvcwater/Clod.imageset/Cold Face.png new file mode 100644 index 0000000..781711a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/Clod.imageset/Cold Face.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Clod.imageset/Cold Face@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/Clod.imageset/Cold Face@2x.png new file mode 100644 index 0000000..8e9afb5 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/Clod.imageset/Cold Face@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Clod.imageset/Cold Face@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/Clod.imageset/Cold Face@3x.png new file mode 100644 index 0000000..bbc2e5e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/Clod.imageset/Cold Face@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Clod.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/Clod.imageset/Contents.json new file mode 100644 index 0000000..4c8f2b3 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/Clod.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Cold Face.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Cold Face@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Cold Face@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Comfortable.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/Comfortable.imageset/Contents.json new file mode 100644 index 0000000..9fc15f9 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/Comfortable.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Relieved Face.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Relieved Face@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Relieved Face@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Comfortable.imageset/Relieved Face.png b/anniversary_Project/Assets.xcassets/addvcwater/Comfortable.imageset/Relieved Face.png new file mode 100644 index 0000000..8f8512a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/Comfortable.imageset/Relieved Face.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Comfortable.imageset/Relieved Face@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/Comfortable.imageset/Relieved Face@2x.png new file mode 100644 index 0000000..fea590b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/Comfortable.imageset/Relieved Face@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Comfortable.imageset/Relieved Face@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/Comfortable.imageset/Relieved Face@3x.png new file mode 100644 index 0000000..143bab9 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/Comfortable.imageset/Relieved Face@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Heat.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/Heat.imageset/Contents.json new file mode 100644 index 0000000..57f95cb --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/Heat.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Fire.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Fire@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Fire@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Heat.imageset/Fire.png b/anniversary_Project/Assets.xcassets/addvcwater/Heat.imageset/Fire.png new file mode 100644 index 0000000..738b4af Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/Heat.imageset/Fire.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Heat.imageset/Fire@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/Heat.imageset/Fire@2x.png new file mode 100644 index 0000000..bb6236a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/Heat.imageset/Fire@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Heat.imageset/Fire@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/Heat.imageset/Fire@3x.png new file mode 100644 index 0000000..67b8aae Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/Heat.imageset/Fire@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Triangle.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/Triangle.imageset/Contents.json new file mode 100644 index 0000000..63917dc --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/Triangle.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Polygon 2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Polygon 2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Polygon 2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Triangle.imageset/Polygon 2.png b/anniversary_Project/Assets.xcassets/addvcwater/Triangle.imageset/Polygon 2.png new file mode 100644 index 0000000..08bfe95 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/Triangle.imageset/Polygon 2.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Triangle.imageset/Polygon 2@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/Triangle.imageset/Polygon 2@2x.png new file mode 100644 index 0000000..ea4e230 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/Triangle.imageset/Polygon 2@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Triangle.imageset/Polygon 2@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/Triangle.imageset/Polygon 2@3x.png new file mode 100644 index 0000000..b0ba329 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/Triangle.imageset/Polygon 2@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Warmandwarm.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/Warmandwarm.imageset/Contents.json new file mode 100644 index 0000000..bf0b3da --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/Warmandwarm.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Hot Face.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Hot Face@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Hot Face@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Warmandwarm.imageset/Hot Face.png b/anniversary_Project/Assets.xcassets/addvcwater/Warmandwarm.imageset/Hot Face.png new file mode 100644 index 0000000..ca201e3 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/Warmandwarm.imageset/Hot Face.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Warmandwarm.imageset/Hot Face@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/Warmandwarm.imageset/Hot Face@2x.png new file mode 100644 index 0000000..dfce20e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/Warmandwarm.imageset/Hot Face@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/Warmandwarm.imageset/Hot Face@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/Warmandwarm.imageset/Hot Face@3x.png new file mode 100644 index 0000000..91179a2 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/Warmandwarm.imageset/Hot Face@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/addwaterBlack.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/addwaterBlack.imageset/Contents.json new file mode 100644 index 0000000..b4df4d0 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/addwaterBlack.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 42.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 42@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 42@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/addvcwater/addwaterBlack.imageset/Group 42.png b/anniversary_Project/Assets.xcassets/addvcwater/addwaterBlack.imageset/Group 42.png new file mode 100644 index 0000000..6d6af64 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/addwaterBlack.imageset/Group 42.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/addwaterBlack.imageset/Group 42@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/addwaterBlack.imageset/Group 42@2x.png new file mode 100644 index 0000000..aa6dbbe Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/addwaterBlack.imageset/Group 42@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/addwaterBlack.imageset/Group 42@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/addwaterBlack.imageset/Group 42@3x.png new file mode 100644 index 0000000..dffd2bb Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/addwaterBlack.imageset/Group 42@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/delete_add.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/delete_add.imageset/Contents.json new file mode 100644 index 0000000..f9fcb3e --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/delete_add.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 108.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 108@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 108@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/addvcwater/delete_add.imageset/Group 108.png b/anniversary_Project/Assets.xcassets/addvcwater/delete_add.imageset/Group 108.png new file mode 100644 index 0000000..60a0c84 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/delete_add.imageset/Group 108.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/delete_add.imageset/Group 108@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/delete_add.imageset/Group 108@2x.png new file mode 100644 index 0000000..e46a277 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/delete_add.imageset/Group 108@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/delete_add.imageset/Group 108@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/delete_add.imageset/Group 108@3x.png new file mode 100644 index 0000000..17992e1 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/delete_add.imageset/Group 108@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/editwater.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/editwater.imageset/Contents.json new file mode 100644 index 0000000..c3d5e17 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/editwater.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 100.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 100@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 100@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/addvcwater/editwater.imageset/Group 100.png b/anniversary_Project/Assets.xcassets/addvcwater/editwater.imageset/Group 100.png new file mode 100644 index 0000000..12de8ea Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/editwater.imageset/Group 100.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/editwater.imageset/Group 100@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/editwater.imageset/Group 100@2x.png new file mode 100644 index 0000000..377c9b7 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/editwater.imageset/Group 100@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/editwater.imageset/Group 100@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/editwater.imageset/Group 100@3x.png new file mode 100644 index 0000000..9fc056a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/editwater.imageset/Group 100@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/gowater.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/gowater.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/gowater.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/gowater.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/gowater.imageset/Frame.png new file mode 100644 index 0000000..74bbf7f Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/gowater.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/gowater.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/gowater.imageset/Frame@2x.png new file mode 100644 index 0000000..d3c89c3 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/gowater.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/gowater.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/gowater.imageset/Frame@3x.png new file mode 100644 index 0000000..3a32497 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/gowater.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/keyboard.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/keyboard.imageset/Contents.json new file mode 100644 index 0000000..b3de145 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/keyboard.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 96.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 96@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 96@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/addvcwater/keyboard.imageset/Group 96.png b/anniversary_Project/Assets.xcassets/addvcwater/keyboard.imageset/Group 96.png new file mode 100644 index 0000000..0b48754 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/keyboard.imageset/Group 96.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/keyboard.imageset/Group 96@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/keyboard.imageset/Group 96@2x.png new file mode 100644 index 0000000..ce67feb Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/keyboard.imageset/Group 96@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/keyboard.imageset/Group 96@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/keyboard.imageset/Group 96@3x.png new file mode 100644 index 0000000..5d400aa Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/keyboard.imageset/Group 96@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/valueImagV.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/valueImagV.imageset/Contents.json new file mode 100644 index 0000000..c34ba9d --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/valueImagV.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Union.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Union@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Union@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/addvcwater/valueImagV.imageset/Union.png b/anniversary_Project/Assets.xcassets/addvcwater/valueImagV.imageset/Union.png new file mode 100644 index 0000000..3a04b66 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/valueImagV.imageset/Union.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/valueImagV.imageset/Union@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/valueImagV.imageset/Union@2x.png new file mode 100644 index 0000000..0c59de4 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/valueImagV.imageset/Union@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/valueImagV.imageset/Union@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/valueImagV.imageset/Union@3x.png new file mode 100644 index 0000000..8bf7c4a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/valueImagV.imageset/Union@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/waterclock.imageset/Contents.json b/anniversary_Project/Assets.xcassets/addvcwater/waterclock.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/addvcwater/waterclock.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/addvcwater/waterclock.imageset/Frame.png b/anniversary_Project/Assets.xcassets/addvcwater/waterclock.imageset/Frame.png new file mode 100644 index 0000000..c69d4df Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/waterclock.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/waterclock.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/addvcwater/waterclock.imageset/Frame@2x.png new file mode 100644 index 0000000..344bfc5 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/waterclock.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/addvcwater/waterclock.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/addvcwater/waterclock.imageset/Frame@3x.png new file mode 100644 index 0000000..1a1265b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/addvcwater/waterclock.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/bir/Contents.json b/anniversary_Project/Assets.xcassets/bir/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/bir/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/bir/bir_s.imageset/Contents.json b/anniversary_Project/Assets.xcassets/bir/bir_s.imageset/Contents.json new file mode 100644 index 0000000..40d79f4 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/bir/bir_s.imageset/Contents.json @@ -0,0 +1,26 @@ +{ + "images" : [ + { + "filename" : "分组_2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "original" + } +} diff --git a/anniversary_Project/Assets.xcassets/bir/bir_s.imageset/分组_2.png b/anniversary_Project/Assets.xcassets/bir/bir_s.imageset/分组_2.png new file mode 100644 index 0000000..492fba7 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/bir/bir_s.imageset/分组_2.png differ diff --git a/anniversary_Project/Assets.xcassets/bir/bir_s.imageset/分组_2@2x.png b/anniversary_Project/Assets.xcassets/bir/bir_s.imageset/分组_2@2x.png new file mode 100644 index 0000000..27da2b1 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/bir/bir_s.imageset/分组_2@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/bir/bir_s.imageset/分组_2@3x.png b/anniversary_Project/Assets.xcassets/bir/bir_s.imageset/分组_2@3x.png new file mode 100644 index 0000000..14f7c59 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/bir/bir_s.imageset/分组_2@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/bir/home_n.imageset/Contents.json b/anniversary_Project/Assets.xcassets/bir/home_n.imageset/Contents.json new file mode 100644 index 0000000..7963e2d --- /dev/null +++ b/anniversary_Project/Assets.xcassets/bir/home_n.imageset/Contents.json @@ -0,0 +1,26 @@ +{ + "images" : [ + { + "filename" : "vuesax_bold_home-2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "vuesax_bold_home-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "vuesax_bold_home-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "original" + } +} diff --git a/anniversary_Project/Assets.xcassets/bir/home_n.imageset/vuesax_bold_home-2.png b/anniversary_Project/Assets.xcassets/bir/home_n.imageset/vuesax_bold_home-2.png new file mode 100644 index 0000000..d28db87 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/bir/home_n.imageset/vuesax_bold_home-2.png differ diff --git a/anniversary_Project/Assets.xcassets/bir/home_n.imageset/vuesax_bold_home-2@2x.png b/anniversary_Project/Assets.xcassets/bir/home_n.imageset/vuesax_bold_home-2@2x.png new file mode 100644 index 0000000..8114703 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/bir/home_n.imageset/vuesax_bold_home-2@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/bir/home_n.imageset/vuesax_bold_home-2@3x.png b/anniversary_Project/Assets.xcassets/bir/home_n.imageset/vuesax_bold_home-2@3x.png new file mode 100644 index 0000000..69fb276 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/bir/home_n.imageset/vuesax_bold_home-2@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/bir/left.imageset/Contents.json b/anniversary_Project/Assets.xcassets/bir/left.imageset/Contents.json new file mode 100644 index 0000000..ce0f6aa --- /dev/null +++ b/anniversary_Project/Assets.xcassets/bir/left.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_8.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_8@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_8@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/bir/left.imageset/分组_8.png b/anniversary_Project/Assets.xcassets/bir/left.imageset/分组_8.png new file mode 100644 index 0000000..016ba76 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/bir/left.imageset/分组_8.png differ diff --git a/anniversary_Project/Assets.xcassets/bir/left.imageset/分组_8@2x.png b/anniversary_Project/Assets.xcassets/bir/left.imageset/分组_8@2x.png new file mode 100644 index 0000000..e0b2ff0 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/bir/left.imageset/分组_8@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/bir/left.imageset/分组_8@3x.png b/anniversary_Project/Assets.xcassets/bir/left.imageset/分组_8@3x.png new file mode 100644 index 0000000..329957d Binary files /dev/null and b/anniversary_Project/Assets.xcassets/bir/left.imageset/分组_8@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/bir/more.imageset/Contents.json b/anniversary_Project/Assets.xcassets/bir/more.imageset/Contents.json new file mode 100644 index 0000000..ba27a33 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/bir/more.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "_11.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "_11@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "_11@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/bir/more.imageset/_11.png b/anniversary_Project/Assets.xcassets/bir/more.imageset/_11.png new file mode 100644 index 0000000..cba0f88 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/bir/more.imageset/_11.png differ diff --git a/anniversary_Project/Assets.xcassets/bir/more.imageset/_11@2x.png b/anniversary_Project/Assets.xcassets/bir/more.imageset/_11@2x.png new file mode 100644 index 0000000..b9a37e5 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/bir/more.imageset/_11@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/bir/more.imageset/_11@3x.png b/anniversary_Project/Assets.xcassets/bir/more.imageset/_11@3x.png new file mode 100644 index 0000000..6a84f0b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/bir/more.imageset/_11@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/bir/right.imageset/Contents.json b/anniversary_Project/Assets.xcassets/bir/right.imageset/Contents.json new file mode 100644 index 0000000..51c01a9 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/bir/right.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_9.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_9@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_9@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/bir/right.imageset/分组_9.png b/anniversary_Project/Assets.xcassets/bir/right.imageset/分组_9.png new file mode 100644 index 0000000..d42e2a8 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/bir/right.imageset/分组_9.png differ diff --git a/anniversary_Project/Assets.xcassets/bir/right.imageset/分组_9@2x.png b/anniversary_Project/Assets.xcassets/bir/right.imageset/分组_9@2x.png new file mode 100644 index 0000000..3c5fca7 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/bir/right.imageset/分组_9@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/bir/right.imageset/分组_9@3x.png b/anniversary_Project/Assets.xcassets/bir/right.imageset/分组_9@3x.png new file mode 100644 index 0000000..092e2aa Binary files /dev/null and b/anniversary_Project/Assets.xcassets/bir/right.imageset/分组_9@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/Contents.json b/anniversary_Project/Assets.xcassets/edit/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/edit/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/edit/Rectangle_1938.imageset/Contents.json b/anniversary_Project/Assets.xcassets/edit/Rectangle_1938.imageset/Contents.json new file mode 100644 index 0000000..270c87e --- /dev/null +++ b/anniversary_Project/Assets.xcassets/edit/Rectangle_1938.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Rectangle_1938.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Rectangle_1938@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Rectangle_1938@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/edit/Rectangle_1938.imageset/Rectangle_1938.png b/anniversary_Project/Assets.xcassets/edit/Rectangle_1938.imageset/Rectangle_1938.png new file mode 100644 index 0000000..40c3ecb Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/Rectangle_1938.imageset/Rectangle_1938.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/Rectangle_1938.imageset/Rectangle_1938@2x.png b/anniversary_Project/Assets.xcassets/edit/Rectangle_1938.imageset/Rectangle_1938@2x.png new file mode 100644 index 0000000..d8caf5d Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/Rectangle_1938.imageset/Rectangle_1938@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/Rectangle_1938.imageset/Rectangle_1938@3x.png b/anniversary_Project/Assets.xcassets/edit/Rectangle_1938.imageset/Rectangle_1938@3x.png new file mode 100644 index 0000000..0b1a431 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/Rectangle_1938.imageset/Rectangle_1938@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/bgEdit.imageset/Contents.json b/anniversary_Project/Assets.xcassets/edit/bgEdit.imageset/Contents.json new file mode 100644 index 0000000..ce6b1ae --- /dev/null +++ b/anniversary_Project/Assets.xcassets/edit/bgEdit.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/edit/bgEdit.imageset/分组_2.png b/anniversary_Project/Assets.xcassets/edit/bgEdit.imageset/分组_2.png new file mode 100644 index 0000000..670d075 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/bgEdit.imageset/分组_2.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/bgEdit.imageset/分组_2@2x.png b/anniversary_Project/Assets.xcassets/edit/bgEdit.imageset/分组_2@2x.png new file mode 100644 index 0000000..68aae87 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/bgEdit.imageset/分组_2@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/bgEdit.imageset/分组_2@3x.png b/anniversary_Project/Assets.xcassets/edit/bgEdit.imageset/分组_2@3x.png new file mode 100644 index 0000000..b491704 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/bgEdit.imageset/分组_2@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/buttonTriangle.imageset/Contents.json b/anniversary_Project/Assets.xcassets/edit/buttonTriangle.imageset/Contents.json new file mode 100644 index 0000000..63917dc --- /dev/null +++ b/anniversary_Project/Assets.xcassets/edit/buttonTriangle.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Polygon 2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Polygon 2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Polygon 2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/edit/buttonTriangle.imageset/Polygon 2.png b/anniversary_Project/Assets.xcassets/edit/buttonTriangle.imageset/Polygon 2.png new file mode 100644 index 0000000..c3af2d6 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/buttonTriangle.imageset/Polygon 2.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/buttonTriangle.imageset/Polygon 2@2x.png b/anniversary_Project/Assets.xcassets/edit/buttonTriangle.imageset/Polygon 2@2x.png new file mode 100644 index 0000000..d513453 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/buttonTriangle.imageset/Polygon 2@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/buttonTriangle.imageset/Polygon 2@3x.png b/anniversary_Project/Assets.xcassets/edit/buttonTriangle.imageset/Polygon 2@3x.png new file mode 100644 index 0000000..77f5c10 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/buttonTriangle.imageset/Polygon 2@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/dismiss_edit.imageset/Contents.json b/anniversary_Project/Assets.xcassets/edit/dismiss_edit.imageset/Contents.json new file mode 100644 index 0000000..9760275 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/edit/dismiss_edit.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_4.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_4@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/edit/dismiss_edit.imageset/分组_4.png b/anniversary_Project/Assets.xcassets/edit/dismiss_edit.imageset/分组_4.png new file mode 100644 index 0000000..c887fdf Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/dismiss_edit.imageset/分组_4.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/dismiss_edit.imageset/分组_4@2x.png b/anniversary_Project/Assets.xcassets/edit/dismiss_edit.imageset/分组_4@2x.png new file mode 100644 index 0000000..f397d1b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/dismiss_edit.imageset/分组_4@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/dismiss_edit.imageset/分组_4@3x.png b/anniversary_Project/Assets.xcassets/edit/dismiss_edit.imageset/分组_4@3x.png new file mode 100644 index 0000000..b794ec5 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/dismiss_edit.imageset/分组_4@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/edit_add.imageset/Contents.json b/anniversary_Project/Assets.xcassets/edit/edit_add.imageset/Contents.json new file mode 100644 index 0000000..919f528 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/edit/edit_add.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/edit/edit_add.imageset/分组_3.png b/anniversary_Project/Assets.xcassets/edit/edit_add.imageset/分组_3.png new file mode 100644 index 0000000..d046fc3 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/edit_add.imageset/分组_3.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/edit_add.imageset/分组_3@2x.png b/anniversary_Project/Assets.xcassets/edit/edit_add.imageset/分组_3@2x.png new file mode 100644 index 0000000..18d109e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/edit_add.imageset/分组_3@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/edit_add.imageset/分组_3@3x.png b/anniversary_Project/Assets.xcassets/edit/edit_add.imageset/分组_3@3x.png new file mode 100644 index 0000000..cea5a4c Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/edit_add.imageset/分组_3@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/edit_delete.imageset/Contents.json b/anniversary_Project/Assets.xcassets/edit/edit_delete.imageset/Contents.json new file mode 100644 index 0000000..6e29c18 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/edit/edit_delete.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/edit/edit_delete.imageset/分组_1.png b/anniversary_Project/Assets.xcassets/edit/edit_delete.imageset/分组_1.png new file mode 100644 index 0000000..c766b50 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/edit_delete.imageset/分组_1.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/edit_delete.imageset/分组_1@2x.png b/anniversary_Project/Assets.xcassets/edit/edit_delete.imageset/分组_1@2x.png new file mode 100644 index 0000000..3599261 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/edit_delete.imageset/分组_1@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/edit_delete.imageset/分组_1@3x.png b/anniversary_Project/Assets.xcassets/edit/edit_delete.imageset/分组_1@3x.png new file mode 100644 index 0000000..4a76271 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/edit_delete.imageset/分组_1@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/topTriangle.imageset/Contents.json b/anniversary_Project/Assets.xcassets/edit/topTriangle.imageset/Contents.json new file mode 100644 index 0000000..687f135 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/edit/topTriangle.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Polygon 1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Polygon 1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Polygon 1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/edit/topTriangle.imageset/Polygon 1.png b/anniversary_Project/Assets.xcassets/edit/topTriangle.imageset/Polygon 1.png new file mode 100644 index 0000000..e04e431 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/topTriangle.imageset/Polygon 1.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/topTriangle.imageset/Polygon 1@2x.png b/anniversary_Project/Assets.xcassets/edit/topTriangle.imageset/Polygon 1@2x.png new file mode 100644 index 0000000..379efcc Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/topTriangle.imageset/Polygon 1@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/edit/topTriangle.imageset/Polygon 1@3x.png b/anniversary_Project/Assets.xcassets/edit/topTriangle.imageset/Polygon 1@3x.png new file mode 100644 index 0000000..7811dcf Binary files /dev/null and b/anniversary_Project/Assets.xcassets/edit/topTriangle.imageset/Polygon 1@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Almostnoexercise.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/Almostnoexercise.imageset/Contents.json new file mode 100644 index 0000000..ab9ce00 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/Almostnoexercise.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Grinning Face With Sweat.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Grinning Face With Sweat@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Grinning Face With Sweat@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/Almostnoexercise.imageset/Grinning Face With Sweat.png b/anniversary_Project/Assets.xcassets/guidePages/Almostnoexercise.imageset/Grinning Face With Sweat.png new file mode 100644 index 0000000..ec3c325 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Almostnoexercise.imageset/Grinning Face With Sweat.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Almostnoexercise.imageset/Grinning Face With Sweat@2x.png b/anniversary_Project/Assets.xcassets/guidePages/Almostnoexercise.imageset/Grinning Face With Sweat@2x.png new file mode 100644 index 0000000..e04e95e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Almostnoexercise.imageset/Grinning Face With Sweat@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Almostnoexercise.imageset/Grinning Face With Sweat@3x.png b/anniversary_Project/Assets.xcassets/guidePages/Almostnoexercise.imageset/Grinning Face With Sweat@3x.png new file mode 100644 index 0000000..32f35be Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Almostnoexercise.imageset/Grinning Face With Sweat@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/Exerciseregularly.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/Exerciseregularly.imageset/Contents.json new file mode 100644 index 0000000..239728a --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/Exerciseregularly.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Grinning Face With Big Eyes.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Grinning Face With Big Eyes@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Grinning Face With Big Eyes@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/Exerciseregularly.imageset/Grinning Face With Big Eyes.png b/anniversary_Project/Assets.xcassets/guidePages/Exerciseregularly.imageset/Grinning Face With Big Eyes.png new file mode 100644 index 0000000..335be91 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Exerciseregularly.imageset/Grinning Face With Big Eyes.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Exerciseregularly.imageset/Grinning Face With Big Eyes@2x.png b/anniversary_Project/Assets.xcassets/guidePages/Exerciseregularly.imageset/Grinning Face With Big Eyes@2x.png new file mode 100644 index 0000000..7627fd7 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Exerciseregularly.imageset/Grinning Face With Big Eyes@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Exerciseregularly.imageset/Grinning Face With Big Eyes@3x.png b/anniversary_Project/Assets.xcassets/guidePages/Exerciseregularly.imageset/Grinning Face With Big Eyes@3x.png new file mode 100644 index 0000000..5723a72 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Exerciseregularly.imageset/Grinning Face With Big Eyes@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Lactation.imageset/Baby Bottle.png b/anniversary_Project/Assets.xcassets/guidePages/Lactation.imageset/Baby Bottle.png new file mode 100644 index 0000000..c67977d Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Lactation.imageset/Baby Bottle.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Lactation.imageset/Baby Bottle@2x.png b/anniversary_Project/Assets.xcassets/guidePages/Lactation.imageset/Baby Bottle@2x.png new file mode 100644 index 0000000..b7c15fc Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Lactation.imageset/Baby Bottle@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Lactation.imageset/Baby Bottle@3x.png b/anniversary_Project/Assets.xcassets/guidePages/Lactation.imageset/Baby Bottle@3x.png new file mode 100644 index 0000000..9c1d129 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Lactation.imageset/Baby Bottle@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Lactation.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/Lactation.imageset/Contents.json new file mode 100644 index 0000000..9273b75 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/Lactation.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Baby Bottle.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Baby Bottle@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Baby Bottle@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/Man.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/Man.imageset/Contents.json new file mode 100644 index 0000000..11f2f4e --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/Man.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Man With Veil Medium Light Skin Tone.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Man With Veil Medium Light Skin Tone@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Man With Veil Medium Light Skin Tone@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/Man.imageset/Man With Veil Medium Light Skin Tone.png b/anniversary_Project/Assets.xcassets/guidePages/Man.imageset/Man With Veil Medium Light Skin Tone.png new file mode 100644 index 0000000..08d383e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Man.imageset/Man With Veil Medium Light Skin Tone.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Man.imageset/Man With Veil Medium Light Skin Tone@2x.png b/anniversary_Project/Assets.xcassets/guidePages/Man.imageset/Man With Veil Medium Light Skin Tone@2x.png new file mode 100644 index 0000000..bf8b042 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Man.imageset/Man With Veil Medium Light Skin Tone@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Man.imageset/Man With Veil Medium Light Skin Tone@3x.png b/anniversary_Project/Assets.xcassets/guidePages/Man.imageset/Man With Veil Medium Light Skin Tone@3x.png new file mode 100644 index 0000000..3e2dcba Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Man.imageset/Man With Veil Medium Light Skin Tone@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Occasionalexercise.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/Occasionalexercise.imageset/Contents.json new file mode 100644 index 0000000..36a4276 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/Occasionalexercise.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Flexed Biceps.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Flexed Biceps@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Flexed Biceps@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/Occasionalexercise.imageset/Flexed Biceps.png b/anniversary_Project/Assets.xcassets/guidePages/Occasionalexercise.imageset/Flexed Biceps.png new file mode 100644 index 0000000..fe1f4a0 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Occasionalexercise.imageset/Flexed Biceps.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Occasionalexercise.imageset/Flexed Biceps@2x.png b/anniversary_Project/Assets.xcassets/guidePages/Occasionalexercise.imageset/Flexed Biceps@2x.png new file mode 100644 index 0000000..21a612b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Occasionalexercise.imageset/Flexed Biceps@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Occasionalexercise.imageset/Flexed Biceps@3x.png b/anniversary_Project/Assets.xcassets/guidePages/Occasionalexercise.imageset/Flexed Biceps@3x.png new file mode 100644 index 0000000..9ad8fc1 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Occasionalexercise.imageset/Flexed Biceps@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Other.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/Other.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/Other.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/guidePages/Other.imageset/Frame.png b/anniversary_Project/Assets.xcassets/guidePages/Other.imageset/Frame.png new file mode 100644 index 0000000..45459b0 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Other.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Other.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/guidePages/Other.imageset/Frame@2x.png new file mode 100644 index 0000000..475eb45 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Other.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Other.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/guidePages/Other.imageset/Frame@3x.png new file mode 100644 index 0000000..adaa6be Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Other.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Pregnant.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/Pregnant.imageset/Contents.json new file mode 100644 index 0000000..bd112c3 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/Pregnant.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Pregnant Woman005.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Pregnant Woman005@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Pregnant Woman005@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/Pregnant.imageset/Pregnant Woman005.png b/anniversary_Project/Assets.xcassets/guidePages/Pregnant.imageset/Pregnant Woman005.png new file mode 100644 index 0000000..398466b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Pregnant.imageset/Pregnant Woman005.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Pregnant.imageset/Pregnant Woman005@2x.png b/anniversary_Project/Assets.xcassets/guidePages/Pregnant.imageset/Pregnant Woman005@2x.png new file mode 100644 index 0000000..daea56b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Pregnant.imageset/Pregnant Woman005@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Pregnant.imageset/Pregnant Woman005@3x.png b/anniversary_Project/Assets.xcassets/guidePages/Pregnant.imageset/Pregnant Woman005@3x.png new file mode 100644 index 0000000..fe72ba3 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Pregnant.imageset/Pregnant Woman005@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Woman.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/Woman.imageset/Contents.json new file mode 100644 index 0000000..441eff1 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/Woman.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Woman In Tuxedo Medium Light Skin Tone.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Woman In Tuxedo Medium Light Skin Tone@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Woman In Tuxedo Medium Light Skin Tone@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/Woman.imageset/Woman In Tuxedo Medium Light Skin Tone.png b/anniversary_Project/Assets.xcassets/guidePages/Woman.imageset/Woman In Tuxedo Medium Light Skin Tone.png new file mode 100644 index 0000000..246c00c Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Woman.imageset/Woman In Tuxedo Medium Light Skin Tone.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Woman.imageset/Woman In Tuxedo Medium Light Skin Tone@2x.png b/anniversary_Project/Assets.xcassets/guidePages/Woman.imageset/Woman In Tuxedo Medium Light Skin Tone@2x.png new file mode 100644 index 0000000..674f4c2 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Woman.imageset/Woman In Tuxedo Medium Light Skin Tone@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/Woman.imageset/Woman In Tuxedo Medium Light Skin Tone@3x.png b/anniversary_Project/Assets.xcassets/guidePages/Woman.imageset/Woman In Tuxedo Medium Light Skin Tone@3x.png new file mode 100644 index 0000000..85763e2 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/Woman.imageset/Woman In Tuxedo Medium Light Skin Tone@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/back.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/back.imageset/Contents.json new file mode 100644 index 0000000..b7052b0 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/back.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 53@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 53@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 53@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/back.imageset/Group 53@1x.png b/anniversary_Project/Assets.xcassets/guidePages/back.imageset/Group 53@1x.png new file mode 100644 index 0000000..eff0a25 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/back.imageset/Group 53@1x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/back.imageset/Group 53@2x.png b/anniversary_Project/Assets.xcassets/guidePages/back.imageset/Group 53@2x.png new file mode 100644 index 0000000..f011e99 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/back.imageset/Group 53@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/back.imageset/Group 53@3x.png b/anniversary_Project/Assets.xcassets/guidePages/back.imageset/Group 53@3x.png new file mode 100644 index 0000000..bc999da Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/back.imageset/Group 53@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/bgkg.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/bgkg.imageset/Contents.json new file mode 100644 index 0000000..15c57e8 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/bgkg.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Rectangle 161124183.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Rectangle 161124183@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Rectangle 161124183@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/bgkg.imageset/Rectangle 161124183.png b/anniversary_Project/Assets.xcassets/guidePages/bgkg.imageset/Rectangle 161124183.png new file mode 100644 index 0000000..d865174 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/bgkg.imageset/Rectangle 161124183.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/bgkg.imageset/Rectangle 161124183@2x.png b/anniversary_Project/Assets.xcassets/guidePages/bgkg.imageset/Rectangle 161124183@2x.png new file mode 100644 index 0000000..defd4b4 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/bgkg.imageset/Rectangle 161124183@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/bgkg.imageset/Rectangle 161124183@3x.png b/anniversary_Project/Assets.xcassets/guidePages/bgkg.imageset/Rectangle 161124183@3x.png new file mode 100644 index 0000000..bba012b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/bgkg.imageset/Rectangle 161124183@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/gonext.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/gonext.imageset/Contents.json new file mode 100644 index 0000000..173be2e --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/gonext.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 41@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 41@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 41@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/gonext.imageset/Group 41@1x.png b/anniversary_Project/Assets.xcassets/guidePages/gonext.imageset/Group 41@1x.png new file mode 100644 index 0000000..4b76445 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/gonext.imageset/Group 41@1x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/gonext.imageset/Group 41@2x.png b/anniversary_Project/Assets.xcassets/guidePages/gonext.imageset/Group 41@2x.png new file mode 100644 index 0000000..be3b053 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/gonext.imageset/Group 41@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/gonext.imageset/Group 41@3x.png b/anniversary_Project/Assets.xcassets/guidePages/gonext.imageset/Group 41@3x.png new file mode 100644 index 0000000..ac275d8 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/gonext.imageset/Group 41@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/leftImage.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/leftImage.imageset/Contents.json new file mode 100644 index 0000000..0fe7919 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/leftImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Polygon 3.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Polygon 3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Polygon 3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/leftImage.imageset/Polygon 3.png b/anniversary_Project/Assets.xcassets/guidePages/leftImage.imageset/Polygon 3.png new file mode 100644 index 0000000..2e8d96b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/leftImage.imageset/Polygon 3.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/leftImage.imageset/Polygon 3@2x.png b/anniversary_Project/Assets.xcassets/guidePages/leftImage.imageset/Polygon 3@2x.png new file mode 100644 index 0000000..e71d571 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/leftImage.imageset/Polygon 3@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/leftImage.imageset/Polygon 3@3x.png b/anniversary_Project/Assets.xcassets/guidePages/leftImage.imageset/Polygon 3@3x.png new file mode 100644 index 0000000..6b77150 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/leftImage.imageset/Polygon 3@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages1.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/pages1.imageset/Contents.json new file mode 100644 index 0000000..48fa781 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/pages1.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 56.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 56@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 56@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages1.imageset/Group 56.png b/anniversary_Project/Assets.xcassets/guidePages/pages1.imageset/Group 56.png new file mode 100644 index 0000000..550f44e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/pages1.imageset/Group 56.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages1.imageset/Group 56@2x.png b/anniversary_Project/Assets.xcassets/guidePages/pages1.imageset/Group 56@2x.png new file mode 100644 index 0000000..32ab3e0 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/pages1.imageset/Group 56@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages1.imageset/Group 56@3x.png b/anniversary_Project/Assets.xcassets/guidePages/pages1.imageset/Group 56@3x.png new file mode 100644 index 0000000..fa069c5 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/pages1.imageset/Group 56@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages2.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/pages2.imageset/Contents.json new file mode 100644 index 0000000..770dad0 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/pages2.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame 56.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 56@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 56@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages2.imageset/Frame 56.png b/anniversary_Project/Assets.xcassets/guidePages/pages2.imageset/Frame 56.png new file mode 100644 index 0000000..9c653a0 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/pages2.imageset/Frame 56.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages2.imageset/Frame 56@2x.png b/anniversary_Project/Assets.xcassets/guidePages/pages2.imageset/Frame 56@2x.png new file mode 100644 index 0000000..42606f6 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/pages2.imageset/Frame 56@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages2.imageset/Frame 56@3x.png b/anniversary_Project/Assets.xcassets/guidePages/pages2.imageset/Frame 56@3x.png new file mode 100644 index 0000000..84eb151 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/pages2.imageset/Frame 56@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages3.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/pages3.imageset/Contents.json new file mode 100644 index 0000000..770dad0 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/pages3.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame 56.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 56@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 56@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages3.imageset/Frame 56.png b/anniversary_Project/Assets.xcassets/guidePages/pages3.imageset/Frame 56.png new file mode 100644 index 0000000..b713181 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/pages3.imageset/Frame 56.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages3.imageset/Frame 56@2x.png b/anniversary_Project/Assets.xcassets/guidePages/pages3.imageset/Frame 56@2x.png new file mode 100644 index 0000000..5940c5a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/pages3.imageset/Frame 56@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages3.imageset/Frame 56@3x.png b/anniversary_Project/Assets.xcassets/guidePages/pages3.imageset/Frame 56@3x.png new file mode 100644 index 0000000..07f0000 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/pages3.imageset/Frame 56@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages4.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/pages4.imageset/Contents.json new file mode 100644 index 0000000..770dad0 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/pages4.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame 56.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 56@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 56@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages4.imageset/Frame 56.png b/anniversary_Project/Assets.xcassets/guidePages/pages4.imageset/Frame 56.png new file mode 100644 index 0000000..ef4aeb0 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/pages4.imageset/Frame 56.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages4.imageset/Frame 56@2x.png b/anniversary_Project/Assets.xcassets/guidePages/pages4.imageset/Frame 56@2x.png new file mode 100644 index 0000000..eb3bf40 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/pages4.imageset/Frame 56@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/pages4.imageset/Frame 56@3x.png b/anniversary_Project/Assets.xcassets/guidePages/pages4.imageset/Frame 56@3x.png new file mode 100644 index 0000000..21d01c2 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/pages4.imageset/Frame 56@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/rightImage.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/rightImage.imageset/Contents.json new file mode 100644 index 0000000..6c493e2 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/rightImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Polygon 4.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Polygon 4@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Polygon 4@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/rightImage.imageset/Polygon 4.png b/anniversary_Project/Assets.xcassets/guidePages/rightImage.imageset/Polygon 4.png new file mode 100644 index 0000000..ad0d6d4 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/rightImage.imageset/Polygon 4.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/rightImage.imageset/Polygon 4@2x.png b/anniversary_Project/Assets.xcassets/guidePages/rightImage.imageset/Polygon 4@2x.png new file mode 100644 index 0000000..a6ff9b3 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/rightImage.imageset/Polygon 4@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/rightImage.imageset/Polygon 4@3x.png b/anniversary_Project/Assets.xcassets/guidePages/rightImage.imageset/Polygon 4@3x.png new file mode 100644 index 0000000..9454eaf Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/rightImage.imageset/Polygon 4@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/selectgenderBg.imageset/Contents.json b/anniversary_Project/Assets.xcassets/guidePages/selectgenderBg.imageset/Contents.json new file mode 100644 index 0000000..c32e428 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/guidePages/selectgenderBg.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Rectangle 161124128@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Rectangle 161124128@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Rectangle 161124128@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/guidePages/selectgenderBg.imageset/Rectangle 161124128@1x.png b/anniversary_Project/Assets.xcassets/guidePages/selectgenderBg.imageset/Rectangle 161124128@1x.png new file mode 100644 index 0000000..5c8a516 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/selectgenderBg.imageset/Rectangle 161124128@1x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/selectgenderBg.imageset/Rectangle 161124128@2x.png b/anniversary_Project/Assets.xcassets/guidePages/selectgenderBg.imageset/Rectangle 161124128@2x.png new file mode 100644 index 0000000..aacfd7a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/selectgenderBg.imageset/Rectangle 161124128@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/guidePages/selectgenderBg.imageset/Rectangle 161124128@3x.png b/anniversary_Project/Assets.xcassets/guidePages/selectgenderBg.imageset/Rectangle 161124128@3x.png new file mode 100644 index 0000000..27436fe Binary files /dev/null and b/anniversary_Project/Assets.xcassets/guidePages/selectgenderBg.imageset/Rectangle 161124128@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/home/Contents.json b/anniversary_Project/Assets.xcassets/home/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/home/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/home/Iconly_Curved_Search.imageset/Contents.json b/anniversary_Project/Assets.xcassets/home/Iconly_Curved_Search.imageset/Contents.json new file mode 100644 index 0000000..7fb055b --- /dev/null +++ b/anniversary_Project/Assets.xcassets/home/Iconly_Curved_Search.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Iconly_Curved_Search.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Iconly_Curved_Search@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Iconly_Curved_Search@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/home/Iconly_Curved_Search.imageset/Iconly_Curved_Search.png b/anniversary_Project/Assets.xcassets/home/Iconly_Curved_Search.imageset/Iconly_Curved_Search.png new file mode 100644 index 0000000..3ebba8a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/Iconly_Curved_Search.imageset/Iconly_Curved_Search.png differ diff --git a/anniversary_Project/Assets.xcassets/home/Iconly_Curved_Search.imageset/Iconly_Curved_Search@2x.png b/anniversary_Project/Assets.xcassets/home/Iconly_Curved_Search.imageset/Iconly_Curved_Search@2x.png new file mode 100644 index 0000000..e284fd6 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/Iconly_Curved_Search.imageset/Iconly_Curved_Search@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/home/Iconly_Curved_Search.imageset/Iconly_Curved_Search@3x.png b/anniversary_Project/Assets.xcassets/home/Iconly_Curved_Search.imageset/Iconly_Curved_Search@3x.png new file mode 100644 index 0000000..3247ea5 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/Iconly_Curved_Search.imageset/Iconly_Curved_Search@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/home/add.imageset/Contents.json b/anniversary_Project/Assets.xcassets/home/add.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/home/add.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/home/add.imageset/Frame.png b/anniversary_Project/Assets.xcassets/home/add.imageset/Frame.png new file mode 100644 index 0000000..4b495e0 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/add.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/home/add.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/home/add.imageset/Frame@2x.png new file mode 100644 index 0000000..b52abe1 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/add.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/home/add.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/home/add.imageset/Frame@3x.png new file mode 100644 index 0000000..3103c46 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/add.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/home/bir_n.imageset/Contents.json b/anniversary_Project/Assets.xcassets/home/bir_n.imageset/Contents.json new file mode 100644 index 0000000..40d79f4 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/home/bir_n.imageset/Contents.json @@ -0,0 +1,26 @@ +{ + "images" : [ + { + "filename" : "分组_2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "original" + } +} diff --git a/anniversary_Project/Assets.xcassets/home/bir_n.imageset/分组_2.png b/anniversary_Project/Assets.xcassets/home/bir_n.imageset/分组_2.png new file mode 100644 index 0000000..e913126 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/bir_n.imageset/分组_2.png differ diff --git a/anniversary_Project/Assets.xcassets/home/bir_n.imageset/分组_2@2x.png b/anniversary_Project/Assets.xcassets/home/bir_n.imageset/分组_2@2x.png new file mode 100644 index 0000000..d1f8a41 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/bir_n.imageset/分组_2@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/home/bir_n.imageset/分组_2@3x.png b/anniversary_Project/Assets.xcassets/home/bir_n.imageset/分组_2@3x.png new file mode 100644 index 0000000..49efc2d Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/bir_n.imageset/分组_2@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/home/home_s.imageset/Contents.json b/anniversary_Project/Assets.xcassets/home/home_s.imageset/Contents.json new file mode 100644 index 0000000..7963e2d --- /dev/null +++ b/anniversary_Project/Assets.xcassets/home/home_s.imageset/Contents.json @@ -0,0 +1,26 @@ +{ + "images" : [ + { + "filename" : "vuesax_bold_home-2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "vuesax_bold_home-2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "vuesax_bold_home-2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "original" + } +} diff --git a/anniversary_Project/Assets.xcassets/home/home_s.imageset/vuesax_bold_home-2.png b/anniversary_Project/Assets.xcassets/home/home_s.imageset/vuesax_bold_home-2.png new file mode 100644 index 0000000..9d9aa3a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/home_s.imageset/vuesax_bold_home-2.png differ diff --git a/anniversary_Project/Assets.xcassets/home/home_s.imageset/vuesax_bold_home-2@2x.png b/anniversary_Project/Assets.xcassets/home/home_s.imageset/vuesax_bold_home-2@2x.png new file mode 100644 index 0000000..270e66b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/home_s.imageset/vuesax_bold_home-2@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/home/home_s.imageset/vuesax_bold_home-2@3x.png b/anniversary_Project/Assets.xcassets/home/home_s.imageset/vuesax_bold_home-2@3x.png new file mode 100644 index 0000000..c8ee8b5 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/home_s.imageset/vuesax_bold_home-2@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/home/none.imageset/Contents.json b/anniversary_Project/Assets.xcassets/home/none.imageset/Contents.json new file mode 100644 index 0000000..ab34051 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/home/none.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_5.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_5@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_5@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/home/none.imageset/分组_5.png b/anniversary_Project/Assets.xcassets/home/none.imageset/分组_5.png new file mode 100644 index 0000000..55d995b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/none.imageset/分组_5.png differ diff --git a/anniversary_Project/Assets.xcassets/home/none.imageset/分组_5@2x.png b/anniversary_Project/Assets.xcassets/home/none.imageset/分组_5@2x.png new file mode 100644 index 0000000..5919778 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/none.imageset/分组_5@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/home/none.imageset/分组_5@3x.png b/anniversary_Project/Assets.xcassets/home/none.imageset/分组_5@3x.png new file mode 100644 index 0000000..88e326a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/none.imageset/分组_5@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/home/tabbar.imageset/Contents.json b/anniversary_Project/Assets.xcassets/home/tabbar.imageset/Contents.json new file mode 100644 index 0000000..05e9b4f --- /dev/null +++ b/anniversary_Project/Assets.xcassets/home/tabbar.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Subtract.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Subtract@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Subtract@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/home/tabbar.imageset/Subtract.png b/anniversary_Project/Assets.xcassets/home/tabbar.imageset/Subtract.png new file mode 100644 index 0000000..3b7187e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/tabbar.imageset/Subtract.png differ diff --git a/anniversary_Project/Assets.xcassets/home/tabbar.imageset/Subtract@2x.png b/anniversary_Project/Assets.xcassets/home/tabbar.imageset/Subtract@2x.png new file mode 100644 index 0000000..529f333 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/tabbar.imageset/Subtract@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/home/tabbar.imageset/Subtract@3x.png b/anniversary_Project/Assets.xcassets/home/tabbar.imageset/Subtract@3x.png new file mode 100644 index 0000000..85b8394 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/tabbar.imageset/Subtract@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/home/tbanner.imageset/Contents.json b/anniversary_Project/Assets.xcassets/home/tbanner.imageset/Contents.json new file mode 100644 index 0000000..c1c3096 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/home/tbanner.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "分组_2_1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "分组_2_1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "分组_2_1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/home/tbanner.imageset/分组_2_1.png b/anniversary_Project/Assets.xcassets/home/tbanner.imageset/分组_2_1.png new file mode 100644 index 0000000..d40e4d5 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/tbanner.imageset/分组_2_1.png differ diff --git a/anniversary_Project/Assets.xcassets/home/tbanner.imageset/分组_2_1@2x.png b/anniversary_Project/Assets.xcassets/home/tbanner.imageset/分组_2_1@2x.png new file mode 100644 index 0000000..471feee Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/tbanner.imageset/分组_2_1@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/home/tbanner.imageset/分组_2_1@3x.png b/anniversary_Project/Assets.xcassets/home/tbanner.imageset/分组_2_1@3x.png new file mode 100644 index 0000000..91e112a Binary files /dev/null and b/anniversary_Project/Assets.xcassets/home/tbanner.imageset/分组_2_1@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/launchScreen/Contents.json b/anniversary_Project/Assets.xcassets/launchScreen/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/launchScreen/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/launchScreen/bgImageV.imageset/Contents.json b/anniversary_Project/Assets.xcassets/launchScreen/bgImageV.imageset/Contents.json new file mode 100644 index 0000000..e9559ec --- /dev/null +++ b/anniversary_Project/Assets.xcassets/launchScreen/bgImageV.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "引导页1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "引导页1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "引导页1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/launchScreen/bgImageV.imageset/引导页1.png b/anniversary_Project/Assets.xcassets/launchScreen/bgImageV.imageset/引导页1.png new file mode 100644 index 0000000..b969c8d Binary files /dev/null and b/anniversary_Project/Assets.xcassets/launchScreen/bgImageV.imageset/引导页1.png differ diff --git a/anniversary_Project/Assets.xcassets/launchScreen/bgImageV.imageset/引导页1@2x.png b/anniversary_Project/Assets.xcassets/launchScreen/bgImageV.imageset/引导页1@2x.png new file mode 100644 index 0000000..f02bcca Binary files /dev/null and b/anniversary_Project/Assets.xcassets/launchScreen/bgImageV.imageset/引导页1@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/launchScreen/bgImageV.imageset/引导页1@3x.png b/anniversary_Project/Assets.xcassets/launchScreen/bgImageV.imageset/引导页1@3x.png new file mode 100644 index 0000000..007acdc Binary files /dev/null and b/anniversary_Project/Assets.xcassets/launchScreen/bgImageV.imageset/引导页1@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/launchScreen/lauch.imageset/Contents.json b/anniversary_Project/Assets.xcassets/launchScreen/lauch.imageset/Contents.json new file mode 100644 index 0000000..df61e69 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/launchScreen/lauch.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "image.png.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "image.png@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "image.png@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/launchScreen/lauch.imageset/image.png.png b/anniversary_Project/Assets.xcassets/launchScreen/lauch.imageset/image.png.png new file mode 100644 index 0000000..1da4cbb Binary files /dev/null and b/anniversary_Project/Assets.xcassets/launchScreen/lauch.imageset/image.png.png differ diff --git a/anniversary_Project/Assets.xcassets/launchScreen/lauch.imageset/image.png@2x.png b/anniversary_Project/Assets.xcassets/launchScreen/lauch.imageset/image.png@2x.png new file mode 100644 index 0000000..9611881 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/launchScreen/lauch.imageset/image.png@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/launchScreen/lauch.imageset/image.png@3x.png b/anniversary_Project/Assets.xcassets/launchScreen/lauch.imageset/image.png@3x.png new file mode 100644 index 0000000..57a1ccf Binary files /dev/null and b/anniversary_Project/Assets.xcassets/launchScreen/lauch.imageset/image.png@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/launchScreen/logo.imageset/Contents.json b/anniversary_Project/Assets.xcassets/launchScreen/logo.imageset/Contents.json new file mode 100644 index 0000000..0e019a5 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/launchScreen/logo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "启动图标.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "启动图标@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "启动图标@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/launchScreen/logo.imageset/启动图标.png b/anniversary_Project/Assets.xcassets/launchScreen/logo.imageset/启动图标.png new file mode 100644 index 0000000..6c14e8e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/launchScreen/logo.imageset/启动图标.png differ diff --git a/anniversary_Project/Assets.xcassets/launchScreen/logo.imageset/启动图标@2x.png b/anniversary_Project/Assets.xcassets/launchScreen/logo.imageset/启动图标@2x.png new file mode 100644 index 0000000..bacfc0e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/launchScreen/logo.imageset/启动图标@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/launchScreen/logo.imageset/启动图标@3x.png b/anniversary_Project/Assets.xcassets/launchScreen/logo.imageset/启动图标@3x.png new file mode 100644 index 0000000..85f2ced Binary files /dev/null and b/anniversary_Project/Assets.xcassets/launchScreen/logo.imageset/启动图标@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/0.imageset/Contents.json b/anniversary_Project/Assets.xcassets/water%/0.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/water%/0.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/water%/0.imageset/Frame.png b/anniversary_Project/Assets.xcassets/water%/0.imageset/Frame.png new file mode 100644 index 0000000..1d5f106 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/0.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/0.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/water%/0.imageset/Frame@2x.png new file mode 100644 index 0000000..ab6264e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/0.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/0.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/water%/0.imageset/Frame@3x.png new file mode 100644 index 0000000..32338d2 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/0.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/100.imageset/Contents.json b/anniversary_Project/Assets.xcassets/water%/100.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/water%/100.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/water%/100.imageset/Frame.png b/anniversary_Project/Assets.xcassets/water%/100.imageset/Frame.png new file mode 100644 index 0000000..d845c52 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/100.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/100.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/water%/100.imageset/Frame@2x.png new file mode 100644 index 0000000..23e6968 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/100.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/100.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/water%/100.imageset/Frame@3x.png new file mode 100644 index 0000000..12b0bbc Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/100.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/15.imageset/Contents.json b/anniversary_Project/Assets.xcassets/water%/15.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/water%/15.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/water%/15.imageset/Frame.png b/anniversary_Project/Assets.xcassets/water%/15.imageset/Frame.png new file mode 100644 index 0000000..d667334 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/15.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/15.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/water%/15.imageset/Frame@2x.png new file mode 100644 index 0000000..97dab76 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/15.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/15.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/water%/15.imageset/Frame@3x.png new file mode 100644 index 0000000..1ec0263 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/15.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/25.imageset/Contents.json b/anniversary_Project/Assets.xcassets/water%/25.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/water%/25.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/water%/25.imageset/Frame.png b/anniversary_Project/Assets.xcassets/water%/25.imageset/Frame.png new file mode 100644 index 0000000..0bf2219 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/25.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/25.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/water%/25.imageset/Frame@2x.png new file mode 100644 index 0000000..f69c2d7 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/25.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/25.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/water%/25.imageset/Frame@3x.png new file mode 100644 index 0000000..b535b98 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/25.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/45.imageset/Contents.json b/anniversary_Project/Assets.xcassets/water%/45.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/water%/45.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/water%/45.imageset/Frame.png b/anniversary_Project/Assets.xcassets/water%/45.imageset/Frame.png new file mode 100644 index 0000000..8eb888d Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/45.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/45.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/water%/45.imageset/Frame@2x.png new file mode 100644 index 0000000..c4a1c65 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/45.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/45.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/water%/45.imageset/Frame@3x.png new file mode 100644 index 0000000..d4a0b18 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/45.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/65.imageset/Contents.json b/anniversary_Project/Assets.xcassets/water%/65.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/water%/65.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/water%/65.imageset/Frame.png b/anniversary_Project/Assets.xcassets/water%/65.imageset/Frame.png new file mode 100644 index 0000000..4e56e41 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/65.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/65.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/water%/65.imageset/Frame@2x.png new file mode 100644 index 0000000..19af9cc Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/65.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/65.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/water%/65.imageset/Frame@3x.png new file mode 100644 index 0000000..ebfe263 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/65.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/85.imageset/Contents.json b/anniversary_Project/Assets.xcassets/water%/85.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/water%/85.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/water%/85.imageset/Frame.png b/anniversary_Project/Assets.xcassets/water%/85.imageset/Frame.png new file mode 100644 index 0000000..2adfb22 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/85.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/85.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/water%/85.imageset/Frame@2x.png new file mode 100644 index 0000000..086c194 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/85.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/85.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/water%/85.imageset/Frame@3x.png new file mode 100644 index 0000000..2387a92 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/85.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/90.imageset/Contents.json b/anniversary_Project/Assets.xcassets/water%/90.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/water%/90.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/water%/90.imageset/Frame.png b/anniversary_Project/Assets.xcassets/water%/90.imageset/Frame.png new file mode 100644 index 0000000..e2a54b3 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/90.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/90.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/water%/90.imageset/Frame@2x.png new file mode 100644 index 0000000..43b2664 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/90.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/90.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/water%/90.imageset/Frame@3x.png new file mode 100644 index 0000000..76d4aa5 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/90.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/Contents.json b/anniversary_Project/Assets.xcassets/water%/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/water%/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/water%/waterDrop.imageset/Contents.json b/anniversary_Project/Assets.xcassets/water%/waterDrop.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/water%/waterDrop.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/water%/waterDrop.imageset/Frame.png b/anniversary_Project/Assets.xcassets/water%/waterDrop.imageset/Frame.png new file mode 100644 index 0000000..90cbed4 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/waterDrop.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/waterDrop.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/water%/waterDrop.imageset/Frame@2x.png new file mode 100644 index 0000000..6f3f989 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/waterDrop.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/water%/waterDrop.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/water%/waterDrop.imageset/Frame@3x.png new file mode 100644 index 0000000..ddb34c8 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water%/waterDrop.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/water/Contents.json b/anniversary_Project/Assets.xcassets/water/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/water/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/water/datepush.imageset/Contents.json b/anniversary_Project/Assets.xcassets/water/datepush.imageset/Contents.json new file mode 100644 index 0000000..7e06798 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/water/datepush.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame@1x.png", + "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/anniversary_Project/Assets.xcassets/water/datepush.imageset/Frame@1x.png b/anniversary_Project/Assets.xcassets/water/datepush.imageset/Frame@1x.png new file mode 100644 index 0000000..fe451ef Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water/datepush.imageset/Frame@1x.png differ diff --git a/anniversary_Project/Assets.xcassets/water/datepush.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/water/datepush.imageset/Frame@2x.png new file mode 100644 index 0000000..da74a91 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water/datepush.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/water/datepush.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/water/datepush.imageset/Frame@3x.png new file mode 100644 index 0000000..47415f9 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water/datepush.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/water/moreseting.imageset/Contents.json b/anniversary_Project/Assets.xcassets/water/moreseting.imageset/Contents.json new file mode 100644 index 0000000..4c7db1a --- /dev/null +++ b/anniversary_Project/Assets.xcassets/water/moreseting.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 74@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 74@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 74@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/water/moreseting.imageset/Group 74@1x.png b/anniversary_Project/Assets.xcassets/water/moreseting.imageset/Group 74@1x.png new file mode 100644 index 0000000..fe1ec4f Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water/moreseting.imageset/Group 74@1x.png differ diff --git a/anniversary_Project/Assets.xcassets/water/moreseting.imageset/Group 74@2x.png b/anniversary_Project/Assets.xcassets/water/moreseting.imageset/Group 74@2x.png new file mode 100644 index 0000000..244b18d Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water/moreseting.imageset/Group 74@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/water/moreseting.imageset/Group 74@3x.png b/anniversary_Project/Assets.xcassets/water/moreseting.imageset/Group 74@3x.png new file mode 100644 index 0000000..29f7c4e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water/moreseting.imageset/Group 74@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/water/waertbgcup.imageset/Contents.json b/anniversary_Project/Assets.xcassets/water/waertbgcup.imageset/Contents.json new file mode 100644 index 0000000..45fea82 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/water/waertbgcup.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 106.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 106@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 106@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/water/waertbgcup.imageset/Group 106.png b/anniversary_Project/Assets.xcassets/water/waertbgcup.imageset/Group 106.png new file mode 100644 index 0000000..97b21cd Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water/waertbgcup.imageset/Group 106.png differ diff --git a/anniversary_Project/Assets.xcassets/water/waertbgcup.imageset/Group 106@2x.png b/anniversary_Project/Assets.xcassets/water/waertbgcup.imageset/Group 106@2x.png new file mode 100644 index 0000000..27a7807 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water/waertbgcup.imageset/Group 106@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/water/waertbgcup.imageset/Group 106@3x.png b/anniversary_Project/Assets.xcassets/water/waertbgcup.imageset/Group 106@3x.png new file mode 100644 index 0000000..57562e6 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water/waertbgcup.imageset/Group 106@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/water/waterBg.imageset/Contents.json b/anniversary_Project/Assets.xcassets/water/waterBg.imageset/Contents.json new file mode 100644 index 0000000..a154ecb --- /dev/null +++ b/anniversary_Project/Assets.xcassets/water/waterBg.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "背景@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "背景@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "背景@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/water/waterBg.imageset/背景@1x.png b/anniversary_Project/Assets.xcassets/water/waterBg.imageset/背景@1x.png new file mode 100644 index 0000000..b8b7b6c Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water/waterBg.imageset/背景@1x.png differ diff --git a/anniversary_Project/Assets.xcassets/water/waterBg.imageset/背景@2x.png b/anniversary_Project/Assets.xcassets/water/waterBg.imageset/背景@2x.png new file mode 100644 index 0000000..c6446ec Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water/waterBg.imageset/背景@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/water/waterBg.imageset/背景@3x.png b/anniversary_Project/Assets.xcassets/water/waterBg.imageset/背景@3x.png new file mode 100644 index 0000000..01302ed Binary files /dev/null and b/anniversary_Project/Assets.xcassets/water/waterBg.imageset/背景@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/Contents.json b/anniversary_Project/Assets.xcassets/waterHomeAdd/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/waterHomeAdd/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/addwater.imageset/Contents.json b/anniversary_Project/Assets.xcassets/waterHomeAdd/addwater.imageset/Contents.json new file mode 100644 index 0000000..cb98205 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/waterHomeAdd/addwater.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 103.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 103@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 103@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/addwater.imageset/Group 103.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/addwater.imageset/Group 103.png new file mode 100644 index 0000000..74ece2e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/addwater.imageset/Group 103.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/addwater.imageset/Group 103@2x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/addwater.imageset/Group 103@2x.png new file mode 100644 index 0000000..2ca7e93 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/addwater.imageset/Group 103@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/addwater.imageset/Group 103@3x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/addwater.imageset/Group 103@3x.png new file mode 100644 index 0000000..1336b58 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/addwater.imageset/Group 103@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/beer.imageset/Contents.json b/anniversary_Project/Assets.xcassets/waterHomeAdd/beer.imageset/Contents.json new file mode 100644 index 0000000..6920d49 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/waterHomeAdd/beer.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 98.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 98@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 98@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/beer.imageset/Group 98.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/beer.imageset/Group 98.png new file mode 100644 index 0000000..d1658c6 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/beer.imageset/Group 98.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/beer.imageset/Group 98@2x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/beer.imageset/Group 98@2x.png new file mode 100644 index 0000000..30bb224 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/beer.imageset/Group 98@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/beer.imageset/Group 98@3x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/beer.imageset/Group 98@3x.png new file mode 100644 index 0000000..43cd61f Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/beer.imageset/Group 98@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/fruitjuice.imageset/Contents.json b/anniversary_Project/Assets.xcassets/waterHomeAdd/fruitjuice.imageset/Contents.json new file mode 100644 index 0000000..c3d5e17 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/waterHomeAdd/fruitjuice.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 100.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 100@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 100@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/fruitjuice.imageset/Group 100.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/fruitjuice.imageset/Group 100.png new file mode 100644 index 0000000..4b60c1c Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/fruitjuice.imageset/Group 100.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/fruitjuice.imageset/Group 100@2x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/fruitjuice.imageset/Group 100@2x.png new file mode 100644 index 0000000..d541cba Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/fruitjuice.imageset/Group 100@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/fruitjuice.imageset/Group 100@3x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/fruitjuice.imageset/Group 100@3x.png new file mode 100644 index 0000000..6bdd1c1 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/fruitjuice.imageset/Group 100@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/milk.imageset/Contents.json b/anniversary_Project/Assets.xcassets/waterHomeAdd/milk.imageset/Contents.json new file mode 100644 index 0000000..fbe85a4 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/waterHomeAdd/milk.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 104.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 104@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 104@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/milk.imageset/Group 104.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/milk.imageset/Group 104.png new file mode 100644 index 0000000..1864ef5 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/milk.imageset/Group 104.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/milk.imageset/Group 104@2x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/milk.imageset/Group 104@2x.png new file mode 100644 index 0000000..6a1d71f Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/milk.imageset/Group 104@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/milk.imageset/Group 104@3x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/milk.imageset/Group 104@3x.png new file mode 100644 index 0000000..52ebd54 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/milk.imageset/Group 104@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/milkyTea.imageset/Contents.json b/anniversary_Project/Assets.xcassets/waterHomeAdd/milkyTea.imageset/Contents.json new file mode 100644 index 0000000..8ce173e --- /dev/null +++ b/anniversary_Project/Assets.xcassets/waterHomeAdd/milkyTea.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "奶茶.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "奶茶@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "奶茶@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/milkyTea.imageset/奶茶.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/milkyTea.imageset/奶茶.png new file mode 100644 index 0000000..fdeca25 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/milkyTea.imageset/奶茶.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/milkyTea.imageset/奶茶@2x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/milkyTea.imageset/奶茶@2x.png new file mode 100644 index 0000000..177cc8f Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/milkyTea.imageset/奶茶@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/milkyTea.imageset/奶茶@3x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/milkyTea.imageset/奶茶@3x.png new file mode 100644 index 0000000..2f63b05 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/milkyTea.imageset/奶茶@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/mytask.imageset/Contents.json b/anniversary_Project/Assets.xcassets/waterHomeAdd/mytask.imageset/Contents.json new file mode 100644 index 0000000..45fea82 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/waterHomeAdd/mytask.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 106.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 106@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 106@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/mytask.imageset/Group 106.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/mytask.imageset/Group 106.png new file mode 100644 index 0000000..df8945f Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/mytask.imageset/Group 106.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/mytask.imageset/Group 106@2x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/mytask.imageset/Group 106@2x.png new file mode 100644 index 0000000..65ad17c Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/mytask.imageset/Group 106@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/mytask.imageset/Group 106@3x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/mytask.imageset/Group 106@3x.png new file mode 100644 index 0000000..939d6bd Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/mytask.imageset/Group 106@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/redwine.imageset/Contents.json b/anniversary_Project/Assets.xcassets/waterHomeAdd/redwine.imageset/Contents.json new file mode 100644 index 0000000..b2bf08c --- /dev/null +++ b/anniversary_Project/Assets.xcassets/waterHomeAdd/redwine.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 99.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 99@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 99@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/redwine.imageset/Group 99.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/redwine.imageset/Group 99.png new file mode 100644 index 0000000..7cebc20 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/redwine.imageset/Group 99.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/redwine.imageset/Group 99@2x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/redwine.imageset/Group 99@2x.png new file mode 100644 index 0000000..42c532c Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/redwine.imageset/Group 99@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/redwine.imageset/Group 99@3x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/redwine.imageset/Group 99@3x.png new file mode 100644 index 0000000..f7b0ff0 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/redwine.imageset/Group 99@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/soup.imageset/Contents.json b/anniversary_Project/Assets.xcassets/waterHomeAdd/soup.imageset/Contents.json new file mode 100644 index 0000000..b08dfda --- /dev/null +++ b/anniversary_Project/Assets.xcassets/waterHomeAdd/soup.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 101.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 101@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 101@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/soup.imageset/Group 101.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/soup.imageset/Group 101.png new file mode 100644 index 0000000..67f5466 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/soup.imageset/Group 101.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/soup.imageset/Group 101@2x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/soup.imageset/Group 101@2x.png new file mode 100644 index 0000000..9ae8efa Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/soup.imageset/Group 101@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/soup.imageset/Group 101@3x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/soup.imageset/Group 101@3x.png new file mode 100644 index 0000000..9eb3e9f Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/soup.imageset/Group 101@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/taskWater.imageset/Contents.json b/anniversary_Project/Assets.xcassets/waterHomeAdd/taskWater.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/waterHomeAdd/taskWater.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/waterHomeAdd/taskWater.imageset/Frame.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/taskWater.imageset/Frame.png new file mode 100644 index 0000000..2bb2b12 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/taskWater.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/taskWater.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/taskWater.imageset/Frame@2x.png new file mode 100644 index 0000000..aa68d36 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/taskWater.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/taskWater.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/taskWater.imageset/Frame@3x.png new file mode 100644 index 0000000..4a190ee Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/taskWater.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/tea.imageset/Contents.json b/anniversary_Project/Assets.xcassets/waterHomeAdd/tea.imageset/Contents.json new file mode 100644 index 0000000..b3de145 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/waterHomeAdd/tea.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 96.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 96@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 96@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/tea.imageset/Group 96.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/tea.imageset/Group 96.png new file mode 100644 index 0000000..5a09413 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/tea.imageset/Group 96.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/tea.imageset/Group 96@2x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/tea.imageset/Group 96@2x.png new file mode 100644 index 0000000..dfda9b5 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/tea.imageset/Group 96@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/tea.imageset/Group 96@3x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/tea.imageset/Group 96@3x.png new file mode 100644 index 0000000..22afa4b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/tea.imageset/Group 96@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/watercup.imageset/Contents.json b/anniversary_Project/Assets.xcassets/waterHomeAdd/watercup.imageset/Contents.json new file mode 100644 index 0000000..4b7bf60 --- /dev/null +++ b/anniversary_Project/Assets.xcassets/waterHomeAdd/watercup.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Frame.png", + "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/anniversary_Project/Assets.xcassets/waterHomeAdd/watercup.imageset/Frame.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/watercup.imageset/Frame.png new file mode 100644 index 0000000..1d5f106 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/watercup.imageset/Frame.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/watercup.imageset/Frame@2x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/watercup.imageset/Frame@2x.png new file mode 100644 index 0000000..ab6264e Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/watercup.imageset/Frame@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/watercup.imageset/Frame@3x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/watercup.imageset/Frame@3x.png new file mode 100644 index 0000000..32338d2 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/watercup.imageset/Frame@3x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/wateredit.imageset/Contents.json b/anniversary_Project/Assets.xcassets/waterHomeAdd/wateredit.imageset/Contents.json new file mode 100644 index 0000000..8c98a7a --- /dev/null +++ b/anniversary_Project/Assets.xcassets/waterHomeAdd/wateredit.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "添加.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "添加@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "添加@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/wateredit.imageset/添加.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/wateredit.imageset/添加.png new file mode 100644 index 0000000..c12471b Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/wateredit.imageset/添加.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/wateredit.imageset/添加@2x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/wateredit.imageset/添加@2x.png new file mode 100644 index 0000000..258ca89 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/wateredit.imageset/添加@2x.png differ diff --git a/anniversary_Project/Assets.xcassets/waterHomeAdd/wateredit.imageset/添加@3x.png b/anniversary_Project/Assets.xcassets/waterHomeAdd/wateredit.imageset/添加@3x.png new file mode 100644 index 0000000..b15a783 Binary files /dev/null and b/anniversary_Project/Assets.xcassets/waterHomeAdd/wateredit.imageset/添加@3x.png differ diff --git a/anniversary_Project/Base.lproj/LaunchScreen.storyboard b/anniversary_Project/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..567e405 --- /dev/null +++ b/anniversary_Project/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Base.lproj/Main.storyboard b/anniversary_Project/Base.lproj/Main.storyboard new file mode 100644 index 0000000..25a7638 --- /dev/null +++ b/anniversary_Project/Base.lproj/Main.storyboard @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/GoogleService-Info.plist b/anniversary_Project/GoogleService-Info.plist new file mode 100644 index 0000000..52ad967 --- /dev/null +++ b/anniversary_Project/GoogleService-Info.plist @@ -0,0 +1,30 @@ + + + + + API_KEY + AIzaSyDkzca-r44sBovJjZZuXi1Ccs1Om2U33II + GCM_SENDER_ID + 949779735726 + PLIST_VERSION + 1 + BUNDLE_ID + com.countdown.day.daycount + PROJECT_ID + drinkwater-91529 + STORAGE_BUCKET + drinkwater-91529.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:949779735726:ios:7587cbf13c535bd042393f + + \ No newline at end of file diff --git a/anniversary_Project/Guidepages/C/AV_SelectGenderVC.swift b/anniversary_Project/Guidepages/C/AV_SelectGenderVC.swift new file mode 100644 index 0000000..dde4a29 --- /dev/null +++ b/anniversary_Project/Guidepages/C/AV_SelectGenderVC.swift @@ -0,0 +1,143 @@ +// +// AV_SelectGenderVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/3. +// + +import UIKit + +class AV_SelectGenderVC: AV_RootVC { + + @IBOutlet weak var tableView: UITableView! + + var headarr = ["Man","Woman","Pregnant","Lactation","Other"] + var namearr = ["Man","Woman","Pregnant","Lactation","Other"] + + var selectedIndex: IndexPath? + + override func viewDidLoad() { + super.viewDidLoad() + setTableViewcell() +// ["日", "一", "二", "三", "四", "五", "六"] + let defaults = UserDefaults.standard + let weekdays = ["日", "一", "二", "三", "四", "五", "六"] + for day in weekdays { + defaults.set(0, forKey: day) + } + + requestTrackingAuthorization { idfa in + if let idfa = idfa { + print("IDFA: \(idfa)") + StartManager.shared.idfaid = idfa + print("Stored IDFA: \(StartManager.shared.idfaid ?? "N/A")") + } else { + print("IDFA is not available or tracking authorization denied.") + } + } + } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + self.navigationController?.navigationBar.isHidden = true + + } + + func setTableViewcell(){ + tableView.delegate = self + tableView.dataSource = self + + tableView.register(UINib(nibName: "AV_SelectGenderCell", bundle: nil), forCellReuseIdentifier: "AV_SelectGenderCell") + + } + + @IBAction func skipBtn(_ sender: Any) { + let appDelegate = UIApplication.shared.delegate + appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC()) + let defaults = UserDefaults.standard + defaults.set(2000, forKey: "waterml") + + if defaults.object(forKey: "waveView") != nil { + print("键 'answer' 存在") + } else { + print("键 'answer' 不存在") + defaults.set(0, forKey: "waveView") + } + } + + + @IBAction func nextBtn(_ sender: Any) { + let vc = AV_selectWeightVC() + navigationController?.pushViewController(vc, animated: true) + } + +} +extension AV_SelectGenderVC:UITableViewDelegate,UITableViewDataSource{ + + func numberOfSections(in tableView: UITableView) -> Int { + return 1 + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + + return 5 + + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + + + let cell = tableView.dequeueReusableCell(withIdentifier: "AV_SelectGenderCell", for: indexPath) as! AV_SelectGenderCell + + cell.headImagV.image = UIImage(named: self.headarr[indexPath.row]) + cell.nameLabel.text = self.namearr[indexPath.row] + + if indexPath == selectedIndex { + + cell.animateGradient(to: [UIColor.hexSting(color: "#69CCFB", alpha: 1).cgColor, // + UIColor.hexSting(color: "#69CCFB", alpha: 1).cgColor]) + } else { + cell.animateGradient(to: [UIColor.hexSting(color: "#F7F8F9", alpha: 1).cgColor, UIColor.hexSting(color: "F7F8F9", alpha: 1).cgColor]) + } + + return cell + } + + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + + + let previousSelectedIndex = selectedIndex + + // 更新选定的索引 + if selectedIndex == indexPath { + selectedIndex = nil // 如果再次点击同一行则取消选择 + } else { + selectedIndex = indexPath + } + + // 重新加载先前选定的单元格和当前选定的单元格 + var indexPathsToReload: [IndexPath] = [indexPath] + if let previous = previousSelectedIndex { + indexPathsToReload.append(previous) + } + + tableView.reloadRows(at: indexPathsToReload, with: .automatic) + + if indexPath.row == 0{ + let defaults = UserDefaults.standard + defaults.set("Man", forKey: "people") + }else if indexPath.row == 1{ + let defaults = UserDefaults.standard + defaults.set("Woman", forKey: "people") + }else if indexPath.row == 2{ + let defaults = UserDefaults.standard + defaults.set("Pregnancy", forKey: "people") + }else if indexPath.row == 3{ + let defaults = UserDefaults.standard + defaults.set("Lactation", forKey: "people") + } + + } + +} diff --git a/anniversary_Project/Guidepages/C/AV_SelectGenderVC.xib b/anniversary_Project/Guidepages/C/AV_SelectGenderVC.xib new file mode 100644 index 0000000..332f6a8 --- /dev/null +++ b/anniversary_Project/Guidepages/C/AV_SelectGenderVC.xib @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Guidepages/C/AV_SportsVC.swift b/anniversary_Project/Guidepages/C/AV_SportsVC.swift new file mode 100644 index 0000000..aefa9cb --- /dev/null +++ b/anniversary_Project/Guidepages/C/AV_SportsVC.swift @@ -0,0 +1,129 @@ +// +// AV_SportsVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/3. +// + +import UIKit + +class AV_SportsVC: AV_RootVC { + @IBOutlet weak var tableView: UITableView! + + + var headarr = ["Exerciseregularly","Occasionalexercise","Almostnoexercise"] + var namearr = ["Exercise regularly","Occasional exercise","Almost no exercise"] + + var selectedIndex: IndexPath? + + override func viewDidLoad() { + super.viewDidLoad() + + setTableViewcell() + requestTrackingAuthorization { idfa in + if let idfa = idfa { + print("IDFA: \(idfa)") + StartManager.shared.idfaid = idfa + print("Stored IDFA: \(StartManager.shared.idfaid ?? "N/A")") + } else { + print("IDFA is not available or tracking authorization denied.") + } + } + } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + self.navigationController?.navigationBar.isHidden = true + + } + func setTableViewcell(){ + tableView.delegate = self + tableView.dataSource = self + tableView.register(UINib(nibName: "AV_SportsCell", bundle: nil), forCellReuseIdentifier: "AV_SportsCell") + + } + + @IBAction func backBtn(_ sender: UIButton) { + navigationController?.popViewController(animated: true) + } + + @IBAction func skip(_ sender: Any) { + let appDelegate = UIApplication.shared.delegate + appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC()) + let defaults = UserDefaults.standard + defaults.set(2000, forKey: "waterml") + } + + @IBAction func next(_ sender: Any) { + let vc = AV_TemperatureVC() + navigationController?.pushViewController(vc, animated: true) + } + +} +extension AV_SportsVC:UITableViewDelegate,UITableViewDataSource{ + + func numberOfSections(in tableView: UITableView) -> Int { + return 1 + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + + return 3 + + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + + + let cell = tableView.dequeueReusableCell(withIdentifier: "AV_SportsCell", for: indexPath) as! AV_SportsCell + + cell.headImagV.image = UIImage(named: self.headarr[indexPath.row]) + cell.nameLabel.text = self.namearr[indexPath.row] + + if indexPath == selectedIndex { + + cell.animateGradient(to: [UIColor.hexSting(color: "#69CCFB", alpha: 1).cgColor, // + UIColor.hexSting(color: "#69CCFB", alpha: 1).cgColor]) + } else { + + cell.animateGradient(to: [UIColor.hexSting(color: "#F7F8F9", alpha: 1).cgColor, UIColor.hexSting(color: "F7F8F9", alpha: 1).cgColor]) + } + + return cell + + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + if indexPath.section == 0 { + let previousSelectedIndex = selectedIndex + + // 更新选定的索引 + if selectedIndex == indexPath { + selectedIndex = nil // 如果再次点击同一行则取消选择 + } else { + selectedIndex = indexPath + } + + // 重新加载先前选定的单元格和当前选定的单元格 + var indexPathsToReload: [IndexPath] = [indexPath] + if let previous = previousSelectedIndex { + indexPathsToReload.append(previous) + } + + tableView.reloadRows(at: indexPathsToReload, with: .automatic) + } + + if indexPath.row == 0{ + let defaults = UserDefaults.standard + defaults.set("Exercise regularly", forKey: "sports") + }else if indexPath.row == 1{ + let defaults = UserDefaults.standard + defaults.set("Occasional exercise", forKey: "sports") + }else if indexPath.row == 2{ + let defaults = UserDefaults.standard + defaults.set("Almost no exercise", forKey: "sports") + } + + } + +} diff --git a/anniversary_Project/Guidepages/C/AV_SportsVC.xib b/anniversary_Project/Guidepages/C/AV_SportsVC.xib new file mode 100644 index 0000000..6fee0c0 --- /dev/null +++ b/anniversary_Project/Guidepages/C/AV_SportsVC.xib @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Guidepages/C/AV_TemperatureVC.swift b/anniversary_Project/Guidepages/C/AV_TemperatureVC.swift new file mode 100644 index 0000000..98abb6f --- /dev/null +++ b/anniversary_Project/Guidepages/C/AV_TemperatureVC.swift @@ -0,0 +1,129 @@ +// +// AV_TemperatureVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/9. +// + +import UIKit + +class AV_TemperatureVC: AV_RootVC { + + @IBOutlet weak var tableView: UITableView! + var headarr = ["Heat","Warmandwarm","Comfortable","Lactation","Clod"] + var namearr = ["Heat","Warm and warm","Comfortable","Lactation","Clod"] + + var selectedIndex: IndexPath? + + override func viewDidLoad() { + super.viewDidLoad() + + setTableViewcell() + } + func setTableViewcell(){ + tableView.delegate = self + tableView.dataSource = self + + tableView.register(UINib(nibName: "AV_SelectGenderCell", bundle: nil), forCellReuseIdentifier: "AV_SelectGenderCell") + + } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + self.navigationController?.navigationBar.isHidden = true + + } + + @IBAction func back(_ sender: Any) { + navigationController?.popViewController(animated: true) + } + + + @IBAction func skip(_ sender: Any) { + let appDelegate = UIApplication.shared.delegate + appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC()) + let defaults = UserDefaults.standard + defaults.set(2000, forKey: "waterml") + } + + @IBAction func gohome(_ sender: Any) { + let appDelegate = UIApplication.shared.delegate + appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC()) + + } + +} +extension AV_TemperatureVC:UITableViewDelegate,UITableViewDataSource{ + + func numberOfSections(in tableView: UITableView) -> Int { + return 1 + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + + return 5 + + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + + + let cell = tableView.dequeueReusableCell(withIdentifier: "AV_SelectGenderCell", for: indexPath) as! AV_SelectGenderCell + + cell.headImagV.image = UIImage(named: self.headarr[indexPath.row]) + cell.nameLabel.text = self.namearr[indexPath.row] + + if indexPath == selectedIndex { + + cell.animateGradient(to: [UIColor.hexSting(color: "#69CCFB", alpha: 1).cgColor, // + UIColor.hexSting(color: "#69CCFB", alpha: 1).cgColor]) + } else { + cell.animateGradient(to: [UIColor.hexSting(color: "#F7F8F9", alpha: 1).cgColor, UIColor.hexSting(color: "F7F8F9", alpha: 1).cgColor]) + } + + + + return cell + } + + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + + + let previousSelectedIndex = selectedIndex + + // 更新选定的索引 + if selectedIndex == indexPath { + selectedIndex = nil // 如果再次点击同一行则取消选择 + } else { + selectedIndex = indexPath + } + + // 重新加载先前选定的单元格和当前选定的单元格 + var indexPathsToReload: [IndexPath] = [indexPath] + if let previous = previousSelectedIndex { + indexPathsToReload.append(previous) + } + + tableView.reloadRows(at: indexPathsToReload, with: .automatic) + + + if indexPath.row == 0{ + let defaults = UserDefaults.standard + defaults.set("Heat", forKey: "temperature") + }else if indexPath.row == 1{ + let defaults = UserDefaults.standard + defaults.set("Warm and warm", forKey: "temperature") + }else if indexPath.row == 2{ + let defaults = UserDefaults.standard + defaults.set("Comfortable", forKey: "temperature") + }else if indexPath.row == 3{ + let defaults = UserDefaults.standard + defaults.set("Clod", forKey: "temperature") + } + + } + +} + + diff --git a/anniversary_Project/Guidepages/C/AV_TemperatureVC.xib b/anniversary_Project/Guidepages/C/AV_TemperatureVC.xib new file mode 100644 index 0000000..e1f64db --- /dev/null +++ b/anniversary_Project/Guidepages/C/AV_TemperatureVC.xib @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Guidepages/C/AV_selectWeightVC.swift b/anniversary_Project/Guidepages/C/AV_selectWeightVC.swift new file mode 100644 index 0000000..ddba74a --- /dev/null +++ b/anniversary_Project/Guidepages/C/AV_selectWeightVC.swift @@ -0,0 +1,101 @@ +// +// AV_selectWeightVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/9. +// + +import UIKit + +class AV_selectWeightVC: AV_RootVC { + + @IBOutlet weak var tableView: UITableView! + + var weightadd:Int? + + override func viewDidLoad() { + super.viewDidLoad() + + setTableViewcell() + requestTrackingAuthorization { idfa in + if let idfa = idfa { + print("IDFA: \(idfa)") + StartManager.shared.idfaid = idfa + print("Stored IDFA: \(StartManager.shared.idfaid ?? "N/A")") + } else { + print("IDFA is not available or tracking authorization denied.") + } + } + } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + self.navigationController?.navigationBar.isHidden = true + + } + func setTableViewcell(){ + tableView.delegate = self + tableView.dataSource = self + tableView.register(UINib(nibName: "AV_selectWeightCell", bundle: nil), forCellReuseIdentifier: "AV_selectWeightCell") + + } + + + @IBAction func backBtn(_ sender: UIButton) { + navigationController?.popViewController(animated: true) + + } + + + @IBAction func skip(_ sender: Any) { + let appDelegate = UIApplication.shared.delegate + appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC()) + let defaults = UserDefaults.standard + defaults.set(2000, forKey: "waterml") + } + + + @IBAction func nextGo(_ sender: Any) { + + let vc = AV_SportsVC() + navigationController?.pushViewController(vc, animated: true) + let defaults = UserDefaults.standard + + + } + +} +extension AV_selectWeightVC:UITableViewDelegate,UITableViewDataSource{ + + func numberOfSections(in tableView: UITableView) -> Int { + return 1 + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + + return 1 + + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + + + let cell = tableView.dequeueReusableCell(withIdentifier: "AV_selectWeightCell", for: indexPath) as! AV_selectWeightCell + cell.onAgeSelected = { age in +// self?.age = age + let defaults = UserDefaults.standard + defaults.set(age, forKey: "age") + + } + + + + let currentRulerValue = cell.rulerV.rulerScrollView.currentRulerValue + self.weightadd = Int(currentRulerValue) + + return cell + + } + + +} diff --git a/anniversary_Project/Guidepages/C/AV_selectWeightVC.xib b/anniversary_Project/Guidepages/C/AV_selectWeightVC.xib new file mode 100644 index 0000000..13a48e7 --- /dev/null +++ b/anniversary_Project/Guidepages/C/AV_selectWeightVC.xib @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Guidepages/V/AV_SelectGenderCell.swift b/anniversary_Project/Guidepages/V/AV_SelectGenderCell.swift new file mode 100644 index 0000000..1b06978 --- /dev/null +++ b/anniversary_Project/Guidepages/V/AV_SelectGenderCell.swift @@ -0,0 +1,62 @@ +// +// AV_SelectGenderCell.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/3. +// + +import UIKit + +class AV_SelectGenderCell: UITableViewCell { + + @IBOutlet weak var bgView: UIView! + + @IBOutlet weak var headImagV: UIImageView! + + @IBOutlet weak var nameLabel: UILabel! + + @IBOutlet weak var selectImagV: UIImageView! + + + var gradientLayer: CAGradientLayer? + + override func awakeFromNib() { + super.awakeFromNib() + self.bgView.layer.cornerRadius = 15 + self.bgView.clipsToBounds = true + + setupGradientLayer() + + } + + override func layoutSubviews() { + super.layoutSubviews() + // Ensure the gradient layer fills the entire view +// gradientLayer?.frame = bgView.bounds + gradientLayer?.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width - 56, height: 96) + } + + private func setupGradientLayer() { + gradientLayer = CAGradientLayer() + gradientLayer?.colors = [UIColor.hexSting(color: "#F7F8F9", alpha: 1).cgColor, // #F7F8F9 + UIColor.hexSting(color: "#F7F8F9", alpha: 1).cgColor] // #F7F8F9 + gradientLayer?.startPoint = CGPoint(x: 0, y: 0.5) + gradientLayer?.endPoint = CGPoint(x: 1, y: 0.5) + bgView.layer.insertSublayer(gradientLayer!, at: 0) + } + + func animateGradient(to colors: [CGColor]) { + // Ensure the gradient layer fills the entire view before starting the animation + layoutIfNeeded() +// gradientLayer?.frame = bgView.bounds + gradientLayer?.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width - 56, height: 96) + + let animation = CABasicAnimation(keyPath: "colors") + animation.fromValue = gradientLayer?.colors + animation.toValue = colors + animation.duration = 1.0 + animation.isRemovedOnCompletion = false + animation.fillMode = .forwards + gradientLayer?.add(animation, forKey: "colorChange") + } +} diff --git a/anniversary_Project/Guidepages/V/AV_SelectGenderCell.xib b/anniversary_Project/Guidepages/V/AV_SelectGenderCell.xib new file mode 100644 index 0000000..cd54799 --- /dev/null +++ b/anniversary_Project/Guidepages/V/AV_SelectGenderCell.xib @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Guidepages/V/AV_SportsCell.swift b/anniversary_Project/Guidepages/V/AV_SportsCell.swift new file mode 100644 index 0000000..a113b76 --- /dev/null +++ b/anniversary_Project/Guidepages/V/AV_SportsCell.swift @@ -0,0 +1,58 @@ +// +// AV_SportsCell.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/3. +// + +import UIKit + +class AV_SportsCell: UITableViewCell { + + @IBOutlet weak var bgView: UIView! + + @IBOutlet weak var headImagV: UIImageView! + + @IBOutlet weak var nameLabel: UILabel! + + var gradientLayer: CAGradientLayer? + + override func awakeFromNib() { + super.awakeFromNib() + self.bgView.layer.cornerRadius = 15 + self.bgView.clipsToBounds = true + + setupGradientLayer() + } + override func layoutSubviews() { + super.layoutSubviews() + // Ensure the gradient layer fills the entire view +// gradientLayer?.frame = bgView.bounds + gradientLayer?.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width - 56, height: 96) + } + + private func setupGradientLayer() { + gradientLayer = CAGradientLayer() + gradientLayer?.colors = [UIColor.hexSting(color: "#F7F8F9", alpha: 1).cgColor, // #F7F8F9 + UIColor.hexSting(color: "#F7F8F9", alpha: 1).cgColor] // #F7F8F9 + gradientLayer?.startPoint = CGPoint(x: 0, y: 0.5) + gradientLayer?.endPoint = CGPoint(x: 1, y: 0.5) + bgView.layer.insertSublayer(gradientLayer!, at: 0) + } + + func animateGradient(to colors: [CGColor]) { + // Ensure the gradient layer fills the entire view before starting the animation + layoutIfNeeded() +// gradientLayer?.frame = bgView.bounds + gradientLayer?.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width - 56, height: 96) + + let animation = CABasicAnimation(keyPath: "colors") + animation.fromValue = gradientLayer?.colors + animation.toValue = colors + animation.duration = 1.0 + animation.isRemovedOnCompletion = false + animation.fillMode = .forwards + gradientLayer?.add(animation, forKey: "colorChange") + } + +} diff --git a/anniversary_Project/Guidepages/V/AV_SportsCell.xib b/anniversary_Project/Guidepages/V/AV_SportsCell.xib new file mode 100644 index 0000000..7f53c48 --- /dev/null +++ b/anniversary_Project/Guidepages/V/AV_SportsCell.xib @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Guidepages/V/AV_selectWeightCell.swift b/anniversary_Project/Guidepages/V/AV_selectWeightCell.swift new file mode 100644 index 0000000..d4bde6e --- /dev/null +++ b/anniversary_Project/Guidepages/V/AV_selectWeightCell.swift @@ -0,0 +1,52 @@ +// +// AV_selectWeightCell.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/9. +// + +import UIKit + +class AV_selectWeightCell: UITableViewCell,weightViewDelegate { + + @IBOutlet weak var ageView: AgePickerView! + + @IBOutlet weak var weightView: UIView! + + + var rulerV = weightRulerView() + +// private let agePickerView = AgePickerView() + + var onAgeSelected: ((Int) -> Void)? { + didSet { + ageView.onAgeSelected = onAgeSelected + } + } +// var onweightSelected: ((Int) -> Void)? { +// didSet { +// rulerV.onweightSelected = onweightSelected +// } +// +// } + override func awakeFromNib() { + super.awakeFromNib() + rulerV.delegate = self + rulerV = weightRulerView(frame:CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 50)) + print("----\(rulerV.valueLabel.text ?? "")") + self.weightView.addSubview(rulerV) + ageView.translatesAutoresizingMaskIntoConstraints = false + } + + + func sliderRulerView(ruler: weightRulerView, rulervalue: CGFloat) { + // Handle the ruler value here + print("Selected value: \(rulervalue) kg") + } +// override func prepareForReuse() { +// super.prepareForReuse() +// rulerV.delegate = self +// } + +} + diff --git a/anniversary_Project/Guidepages/V/AV_selectWeightCell.xib b/anniversary_Project/Guidepages/V/AV_selectWeightCell.xib new file mode 100644 index 0000000..0ceaa75 --- /dev/null +++ b/anniversary_Project/Guidepages/V/AV_selectWeightCell.xib @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Home/C/AV_DetalisVC.swift b/anniversary_Project/Home/C/AV_DetalisVC.swift new file mode 100644 index 0000000..00dfec3 --- /dev/null +++ b/anniversary_Project/Home/C/AV_DetalisVC.swift @@ -0,0 +1,341 @@ +// +// AV_DetalisVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/16. +// + +import UIKit +import WCDBSwift +import AppLovinSDK +import Alamofire +import FirebaseRemoteConfig + +class AV_DetalisVC: AV_RootVC { + @IBOutlet weak var imageV: UIImageView! + + @IBOutlet weak var timeLabel: UILabel! + + @IBOutlet weak var contentLabel: UILabel! + + + @IBOutlet weak var wsichsel: UISwitch! + + @IBOutlet weak var bgView: UIView! + + var interstitialAd: MAInterstitialAd! + var remoteConfig: RemoteConfig! + var isadshow:Bool = false + var retryAttempt = 0.0 + + var model:UserModel? + override func viewDidLoad() { + super.viewDidLoad() +// bgView.clipsToBounds = true + bgView.layer.cornerRadius = 20 + imageV.layer.cornerRadius = 20 + // 设置阴影属性 + bgView.layer.shadowColor = UIColor.hexSting(color: "#9ABDE6", alpha: 0.25).cgColor + bgView.layer.shadowOpacity = 0.5 + bgView.layer.shadowOffset = CGSize(width: 0, height: 2) // 设置向下偏移 + bgView.layer.shadowRadius = 4 + + + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.createInterstitialAd() + remoteConfig = RemoteConfig.remoteConfig() + + + + // 设置最小获取间隔(开发期间可以设置较小的值) + let settings = RemoteConfigSettings() + settings.minimumFetchInterval = 0 + remoteConfig.configSettings = settings + // Fetch 配置值 + remoteConfig.setDefaults(fromPlist: "isopen") + fetchRemoteConfig() + self.navigationController?.navigationBar.isHidden = true + let image = model?.getImage() + self.imageV.image = image + self.timeLabel.text = model?.date + self.contentLabel.text = model?.name + self.wsichsel.isOn = ((model?.notificationEnabled) != nil) + + } + + @IBAction func editBtn(_ sender: UIButton) { + let vc = AV_AddVC() + vc.model = self.model + vc.typeedit = 1 + vc.dataUpdateClosure = { [self] updatedModels in + // 在闭包中接收更新的模型数组 + self.model = updatedModels + // 在这里处理接收到的模型数组,例如重新加载数据或者刷新界面 + let image = model!.getImage() + self.imageV.image = image + self.timeLabel.text = model?.date + self.contentLabel.text = model?.name + self.wsichsel.isOn = ((model?.notificationEnabled) != nil) + } + navigationController?.pushViewController(vc, animated: true) + + + } + + + @IBAction func deleteBtn(_ sender: UIButton) { + + if self.isadshow == true{ + DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.5) { + + if self.interstitialAd.isReady { + self.interstitialAd.show() + self.setPostSHOW() + if let uid = self.model?.uid { + // 构建删除条件 + let condition: Condition = UserModel.Properties.uid == uid + + // 调用删除方法 + PrWCDBBaseManager.shared.deleteFromDb(fromTable: userModelTableName, where: condition) + } else { + print("Error: Model UID is nil") + } + + }else{ + if let uid = self.model?.uid { + // 构建删除条件 + let condition: Condition = UserModel.Properties.uid == uid + + // 调用删除方法 + PrWCDBBaseManager.shared.deleteFromDb(fromTable: userModelTableName, where: condition) + } else { + print("Error: Model UID is nil") + } + + self.navigationController?.popViewController(animated: true) + } + } + }else{ + if let uid = model?.uid { + // 构建删除条件 + let condition: Condition = UserModel.Properties.uid == uid + + // 调用删除方法 + PrWCDBBaseManager.shared.deleteFromDb(fromTable: userModelTableName, where: condition) + } else { + print("Error: Model UID is nil") + } + + self.navigationController?.popViewController(animated: true) + } +// navigationController?.popViewController(animated: true) + } + + + @IBAction func back(_ sender: Any) { + if self.isadshow == true{ + DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.5) { + + if self.interstitialAd.isReady { + self.interstitialAd.show() + self.setPostSHOW() + + }else{ + self.navigationController?.popViewController(animated: true) + } + } + }else{ + self.navigationController?.popViewController(animated: true) + } + } + ///是否有广告 + func fetchRemoteConfig() { + let localVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0" + remoteConfig.fetch{ (status, error) -> Void in + if status == .success { + print("Config fetched!") + self.remoteConfig.activate { changed, error in + if error == nil{ + let js = self.remoteConfig.configValue(forKey: "isopen").jsonValue as! [String:Any] + let valueopen = js["isadopen"] as! Bool + let valueversion = js["version"] as! String + DispatchQueue.main.async { + if valueversion == localVersion{ + self.isadshow = false + }else{ + if valueopen { + self.isadshow = true + } else { + self.isadshow = false + } + } + } + + + } + + } + + } else { + print("Config not fetched") + if let error = error { + print("Error: \(error.localizedDescription)") + } + } + } + + } + func setPostload(){ + let url = "http://111.9.47.226:38080/top_selection/save_ad_load_log" + let parameters:[String : Any] = [ + "deviceId": StartManager.shared.devicID ?? "", + "localIp": StartManager.shared.localIP ?? "", + "remoteIp": StartManager.shared.publicIP ?? "", + "linkId": "", + "packageName": "com.countdown.day.daycount", + "gaid": StartManager.shared.idfaid ?? "", + "dataId": "", + "shelfNumber":"日程详情", + "succeed": StartManager.shared.succeed, + "loadTime": "", + "adPlatform": StartManager.shared.adPlatform ?? "", + "countryCode": StartManager.shared.countryCode ?? "", + "adId": StartManager.shared.adId ?? "", + "platformResponseTime": StartManager.shared.platformResponseTime ?? "", + "getIpResponseTime": StartManager.shared.getIpResponseTime ?? "", + "ecpm": StartManager.shared.ecpm ?? "", + "dsp": StartManager.shared.dsp ?? "", + "network": StartManager.shared.network ?? "", + "showStatus": 0, + "washParam": true, + ] + + + let headers: HTTPHeaders = [ + "Content-Type": "application/json" + ] + + NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in + switch result { + case .success(let data): + print("Response:--- \(data)") + case .failure(let error): + print("Error:--- \(error)") + } + } + + } + + + func setPostSHOW(){ + let url = "http://111.9.47.226:38080/top_selection/save_ad_show_log" + let parameters:[String : Any] = [ + "deviceId": StartManager.shared.devicID ?? "", + "localIp": StartManager.shared.localIP ?? "", + "remoteIp": StartManager.shared.publicIP ?? "", + "linkId": "", + "packageName": "com.countdown.day.daycount", + "gaid": StartManager.shared.idfaid ?? "", + "dataId": "", + "shelfNumber":"日程详情", + "succeed": StartManager.shared.succeed, + "loadTime": "", + "adPlatform": StartManager.shared.adPlatform ?? "", + "countryCode": StartManager.shared.countryCode ?? "", + "adId": StartManager.shared.adId ?? "", + "platformResponseTime": StartManager.shared.platformResponseTime ?? "", + "getIpResponseTime": StartManager.shared.getIpResponseTime ?? "", + "ecpm": StartManager.shared.ecpm ?? "", + "dsp": StartManager.shared.dsp ?? "", + "network": StartManager.shared.network ?? "", + ] + + + let headers: HTTPHeaders = [ + "Content-Type": "application/json" + ] + + NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in + switch result { + case .success(let data): + print("Response:--- \(data)") + case .failure(let error): + print("Error:--- \(error)") + } + } + + } + + +} +extension AV_DetalisVC: MAAdDelegate +{ + func createInterstitialAd() + { + interstitialAd = MAInterstitialAd(adUnitIdentifier: "7baed02646413e44") + interstitialAd.delegate = self + + // Load the first ad + interstitialAd.load() + } + + // MARK: MAAdDelegate Protocol + + func didLoad(_ ad: MAAd) + { + // Interstitial ad is ready to be shown. 'interstitialAd.isReady' will now return 'true' + + // Reset retry attempt + retryAttempt = 0 + StartManager.shared.succeed = true +// StartManager.shared.loadTime = self.adLoadTime + StartManager.shared.adPlatform = "MAX" + StartManager.shared.countryCode = ALSdk.shared().configuration.countryCode + StartManager.shared.adId = "7baed02646413e44" + StartManager.shared.platformResponseTime = ad.requestLatency + StartManager.shared.ecpm = Float(ad.revenue) + StartManager.shared.dsp = ad.dspName + StartManager.shared.network = ad.networkName + + + setPostload() + } + + func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError) + { + // Interstitial ad failed to load + // We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds) + + retryAttempt += 1 + let delaySec = pow(2.0, min(6.0, retryAttempt)) + + DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) { + self.interstitialAd.load() + } + } + + func didDisplay(_ ad: MAAd) + { + // Pause your app's background audio + } + + func didClick(_ ad: MAAd) {} + + func didHide(_ ad: MAAd) + { + // Resume your app's background audio + // Interstitial ad is hidden. Pre-load the next ad + interstitialAd.load() + + self.navigationController?.popViewController(animated: true) + } + + func didFail(toDisplay ad: MAAd, withError error: MAError) + { + // Interstitial ad failed to display. We recommend loading the next ad + interstitialAd.load() + } +} diff --git a/anniversary_Project/Home/C/AV_DetalisVC.xib b/anniversary_Project/Home/C/AV_DetalisVC.xib new file mode 100644 index 0000000..56a528b --- /dev/null +++ b/anniversary_Project/Home/C/AV_DetalisVC.xib @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Home/C/AV_HomeVC.swift b/anniversary_Project/Home/C/AV_HomeVC.swift new file mode 100644 index 0000000..0c2b420 --- /dev/null +++ b/anniversary_Project/Home/C/AV_HomeVC.swift @@ -0,0 +1,155 @@ +// +// AV_HomeVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/11. +// + +import UIKit +import SVProgressHUD +import Photos + +class AV_HomeVC: AV_RootVC { + + + @IBOutlet weak var noneImagV: UIImageView! + + + @IBOutlet weak var serchView: UIView! + + + @IBOutlet weak var serchtextF: UITextField! + + + @IBOutlet weak var tableView: UITableView! + + + @IBOutlet weak var titleLabel: UILabel! + + var arr = [UserModel]() + + var searchResults: [UserModel] = [] + + var typesearch:Int = 0 + + override func viewDidLoad() { + super.viewDidLoad() + + serchView.layer.cornerRadius = 25 + setTableViewCell() + PrWCDBBaseManager.shared.createTable(table: "UserModel", of: UserModel.self) + serchtextF.delegate = self +// requestPhotoLibraryPermission() +// setNetwork() + + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.navigationBar.isHidden = true + let users = PrWCDBBaseManager.shared.qureyFromDb(fromTable: userModelTableName, cls: UserModel.self) + if let users = users { + self.arr = users + print("---\(users)") + } else { + + } + + titleLabel.text = "My Task \(self.arr.count)" + // // 更新视图 + updateUI() + } + + + + // 根据输入的文本进行查询 + func search(withText searchText: String) { + // 查询数据库中匹配的用户数据 + let condition = UserModel.Properties.name.like("%\(searchText)%") + let results = PrWCDBBaseManager.shared.qureyFromDb(fromTable: userModelTableName, cls: UserModel.self, where: condition) + + if let results = results { + searchResults = results + // 更新 UI,例如刷新表格视图 + tableView.reloadData() + } + } + + + func setTableViewCell(){ + + tableView.delegate = self + tableView.dataSource = self + tableView.register(UINib(nibName: "AV_TaskCell", bundle: nil), forCellReuseIdentifier: "AV_TaskCell") + + } + + func updateUI() { + if arr.isEmpty { + noneImagV.isHidden = false + } else { + noneImagV.isHidden = true + } + tableView.reloadData() + } + + + + + +} + +extension AV_HomeVC:UITableViewDelegate,UITableViewDataSource{ + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + if self.typesearch == 0{ + return arr.count + }else{ + return searchResults.count + } + + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "AV_TaskCell", for: indexPath) as! AV_TaskCell + // cell.dateLabel.text = "May\n20" + if self.typesearch == 0{ + cell.model = self.arr[indexPath.row] + }else{ + cell.model = self.searchResults[indexPath.row] + } + return cell + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let vc = AV_DetalisVC() + if self.typesearch == 0{ + vc.model = self.arr[indexPath.row] + self.navigationController?.pushViewController(vc, animated: true) + }else{ + vc.model = self.searchResults[indexPath.row] + self.navigationController?.pushViewController(vc, animated: true) + } + } + +} +extension AV_HomeVC: UITextFieldDelegate { + + func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { + // 获取输入的文本 + guard let text = textField.text else { return true } + + // 计算最终输入的文本 + let newText = (text as NSString).replacingCharacters(in: range, with: string) + + if newText.count <= 0 { + self.typesearch = 0 + }else{ + self.typesearch = 1 + } + + // 执行搜索操作 + search(withText: newText) + + return true + } +} diff --git a/anniversary_Project/Home/C/AV_HomeVC.xib b/anniversary_Project/Home/C/AV_HomeVC.xib new file mode 100644 index 0000000..cc4f4a8 --- /dev/null +++ b/anniversary_Project/Home/C/AV_HomeVC.xib @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Home/Drink_water/waterC/AV_AddWaterVC.swift b/anniversary_Project/Home/Drink_water/waterC/AV_AddWaterVC.swift new file mode 100644 index 0000000..2b91c67 --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterC/AV_AddWaterVC.swift @@ -0,0 +1,386 @@ +// +// AV_AddWaterVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/8. +// + +import UIKit +import SVProgressHUD +import AppLovinSDK +import Alamofire +import FirebaseRemoteConfig +class AV_AddWaterVC: AV_RootVC { + + @IBOutlet weak var mcView: UIView! + + @IBOutlet weak var bgView: UIView! + + + @IBOutlet weak var sureBtn: UIButton! + + @IBOutlet weak var mlTextf: UITextField! + + + + @IBOutlet weak var waterImageV: UIImageView! + + @IBOutlet weak var collectionView: UICollectionView! + + + @IBOutlet weak var cupuView: UIView! + + let cellWidth: CGFloat = 71 + let cellHeight: CGFloat = 71 + let cellSpacing: CGFloat = 12 + let dataimag = ["1","2", "3", "4", "5", "6","7","8"] + let databigimag = ["1-1","2-2", "3-3", "4-4", "5-5", "6-6","7-7","8-8"] + let drinkname = ["Water","Milk", "Tea", "Milky tea", "Beer", "Red wine","Fruit juice","Soup"] + + var rulerV = MLSliderRulerView() + + var customView: UIView! + var bottomConstraint: NSLayoutConstraint? + + + var interstitialAd: MAInterstitialAd! + var remoteConfig: RemoteConfig! + var isadshow:Bool = false + var retryAttempt = 0.0 + + override func viewDidLoad() { + super.viewDidLoad() + + + setcollectionV() + rulerV = MLSliderRulerView(frame:cupuView.bounds) + + self.cupuView.addSubview(rulerV) + + sureBtn.layer.cornerRadius = 25 + + self.mcView.isHidden = true + self.bgView.isHidden = true + bgView.layer.cornerRadius = 30 + } + + func setcollectionV(){ + let layout = UICollectionViewFlowLayout() + layout.scrollDirection = .horizontal + collectionView.dataSource = self + collectionView.delegate = self + collectionView.collectionViewLayout = layout + collectionView.register(UINib(nibName: "AV_AddWaterVCCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "AV_AddWaterVCCollectionViewCell") + } + + + @IBAction func back(_ sender: Any) { + self.navigationController?.popViewController(animated: true) + } + + + @IBAction func addml(_ sender: UIButton) { + let currentRulerValue = rulerV.rulerScrollView.currentRulerValue + print("----\(currentRulerValue)") + let defaults = UserDefaults.standard + let answer = defaults.integer(forKey: "waveView") + let neanswer = answer + Int(currentRulerValue) + defaults.set(neanswer, forKey: "waveView") + + SVProgressHUD.showSuccess(withStatus: "Add drinking water successfully") + DispatchQueue.main.asyncAfter(wallDeadline: .now() + 1.5) { + SVProgressHUD.dismiss() + } + + } + + @IBAction func keyBoard(_ sender: Any) { + if self.isadshow == true{ + DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.5) { + + if self.interstitialAd.isReady { + self.interstitialAd.show() + self.setPostSHOW() + + }else{ +// self.navigationController?.popViewController(animated: true) + self.mcView.isHidden = false + self.bgView.isHidden = false + self.mlTextf.becomeFirstResponder() + } + } + }else{ +// self.navigationController?.popViewController(animated: true) + self.mcView.isHidden = false + self.bgView.isHidden = false + self.mlTextf.becomeFirstResponder() + } + + } + + + + @IBAction func deleteBtn(_ sender: Any) { + self.mcView.isHidden = true + self.bgView.isHidden = true + // 示例:关闭键盘 + mlTextf.resignFirstResponder() + } + + + @IBAction func sureBtn(_ sender: UIButton) { + self.mcView.isHidden = true + self.bgView.isHidden = true + // 示例:关闭键盘 + mlTextf.resignFirstResponder() + let defaults = UserDefaults.standard + let answer = defaults.integer(forKey: "waveView") + let neanswer = answer + (Int("\(mlTextf.text ?? "0")") ?? 0) + defaults.set(neanswer, forKey: "waveView") + navigationController?.popViewController(animated: true) + SVProgressHUD.showSuccess(withStatus: "Add drinking water successfully") + DispatchQueue.main.asyncAfter(wallDeadline: .now() + 1.5) { + SVProgressHUD.dismiss() + } + } + + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.navigationBar.isHidden = true + self.createInterstitialAd() + remoteConfig = RemoteConfig.remoteConfig() + + + + // 设置最小获取间隔(开发期间可以设置较小的值) + let settings = RemoteConfigSettings() + settings.minimumFetchInterval = 0 + remoteConfig.configSettings = settings + // Fetch 配置值 + remoteConfig.setDefaults(fromPlist: "isopen") + fetchRemoteConfig() + } + + ///是否有广告 + func fetchRemoteConfig() { + let localVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0" + remoteConfig.fetch{ (status, error) -> Void in + if status == .success { + print("Config fetched!") + self.remoteConfig.activate { changed, error in + if error == nil{ + let js = self.remoteConfig.configValue(forKey: "isopen").jsonValue as! [String:Any] + let valueopen = js["isadopen"] as! Bool + let valueversion = js["version"] as! String + DispatchQueue.main.async { + if valueversion == localVersion{ + self.isadshow = false + }else{ + if valueopen { + self.isadshow = true + } else { + self.isadshow = false + } + } + } + + + } + + } + + } else { + print("Config not fetched") + if let error = error { + print("Error: \(error.localizedDescription)") + } + } + } + + } + func setPostload(){ + let url = "http://111.9.47.226:38080/top_selection/save_ad_load_log" + let parameters:[String : Any] = [ + "deviceId": StartManager.shared.devicID ?? "", + "localIp": StartManager.shared.localIP ?? "", + "remoteIp": StartManager.shared.publicIP ?? "", + "linkId": "", + "packageName": "com.countdown.day.daycount", + "gaid": StartManager.shared.idfaid ?? "", + "dataId": "", + "shelfNumber":"喝水键盘", + "succeed": StartManager.shared.succeed, + "loadTime": "", + "adPlatform": StartManager.shared.adPlatform ?? "", + "countryCode": StartManager.shared.countryCode ?? "", + "adId": StartManager.shared.adId ?? "", + "platformResponseTime": StartManager.shared.platformResponseTime ?? "", + "getIpResponseTime": StartManager.shared.getIpResponseTime ?? "", + "ecpm": StartManager.shared.ecpm ?? "", + "dsp": StartManager.shared.dsp ?? "", + "network": StartManager.shared.network ?? "", + "showStatus": 0, + "washParam": true, + ] + + + let headers: HTTPHeaders = [ + "Content-Type": "application/json" + ] + + NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in + switch result { + case .success(let data): + print("Response:--- \(data)") + case .failure(let error): + print("Error:--- \(error)") + } + } + + } + + + func setPostSHOW(){ + let url = "http://111.9.47.226:38080/top_selection/save_ad_show_log" + let parameters:[String : Any] = [ + "deviceId": StartManager.shared.devicID ?? "", + "localIp": StartManager.shared.localIP ?? "", + "remoteIp": StartManager.shared.publicIP ?? "", + "linkId": "", + "packageName": "com.countdown.day.daycount", + "gaid": StartManager.shared.idfaid ?? "", + "dataId": "", + "shelfNumber":"喝水键盘", + "succeed": StartManager.shared.succeed, + "loadTime": "", + "adPlatform": StartManager.shared.adPlatform ?? "", + "countryCode": StartManager.shared.countryCode ?? "", + "adId": StartManager.shared.adId ?? "", + "platformResponseTime": StartManager.shared.platformResponseTime ?? "", + "getIpResponseTime": StartManager.shared.getIpResponseTime ?? "", + "ecpm": StartManager.shared.ecpm ?? "", + "dsp": StartManager.shared.dsp ?? "", + "network": StartManager.shared.network ?? "", + ] + + + let headers: HTTPHeaders = [ + "Content-Type": "application/json" + ] + + NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in + switch result { + case .success(let data): + print("Response:--- \(data)") + case .failure(let error): + print("Error:--- \(error)") + } + } + + } + +} +extension AV_AddWaterVC: UICollectionViewDelegateFlowLayout,UICollectionViewDataSource,UICollectionViewDelegate{ + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return dataimag.count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AV_AddWaterVCCollectionViewCell", for: indexPath) as! AV_AddWaterVCCollectionViewCell + cell.imageV.image = UIImage(named: "\(self.dataimag[indexPath.row])") + cell.nameLabel.text = self.drinkname[indexPath.row] + return cell + + } + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { + return CGSize(width: cellWidth, height: cellHeight) + } + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { + return cellSpacing + } + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { + return UIEdgeInsets(top: 0, left: cellSpacing, bottom: 0, right: cellSpacing) + } + + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + self.waterImageV.image = UIImage(named: "\(indexPath.row + 1)-\(indexPath.row + 1)") + } + +} +extension AV_AddWaterVC: MAAdDelegate +{ + func createInterstitialAd() + { + interstitialAd = MAInterstitialAd(adUnitIdentifier: "2e66a808a4251e3a") + interstitialAd.delegate = self + + // Load the first ad + interstitialAd.load() + } + + // MARK: MAAdDelegate Protocol + + func didLoad(_ ad: MAAd) + { + // Interstitial ad is ready to be shown. 'interstitialAd.isReady' will now return 'true' + + // Reset retry attempt + retryAttempt = 0 + StartManager.shared.succeed = true +// StartManager.shared.loadTime = self.adLoadTime + StartManager.shared.adPlatform = "MAX" + StartManager.shared.countryCode = ALSdk.shared().configuration.countryCode + StartManager.shared.adId = "2e66a808a4251e3a" + StartManager.shared.platformResponseTime = ad.requestLatency + StartManager.shared.ecpm = Float(ad.revenue) + StartManager.shared.dsp = ad.dspName + StartManager.shared.network = ad.networkName + + + setPostload() + } + + func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError) + { + // Interstitial ad failed to load + // We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds) + + retryAttempt += 1 + let delaySec = pow(2.0, min(6.0, retryAttempt)) + + DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) { + self.interstitialAd.load() + } + } + + func didDisplay(_ ad: MAAd) + { + // Pause your app's background audio + } + + func didClick(_ ad: MAAd) {} + + func didHide(_ ad: MAAd) + { + // Resume your app's background audio + // Interstitial ad is hidden. Pre-load the next ad + interstitialAd.load() +// self.navigationController?.popViewController(animated: true) + self.mcView.isHidden = false + self.bgView.isHidden = false + mlTextf.becomeFirstResponder() + } + + func didFail(toDisplay ad: MAAd, withError error: MAError) + { + // Interstitial ad failed to display. We recommend loading the next ad + interstitialAd.load() + } +} diff --git a/anniversary_Project/Home/Drink_water/waterC/AV_AddWaterVC.xib b/anniversary_Project/Home/Drink_water/waterC/AV_AddWaterVC.xib new file mode 100644 index 0000000..daf91fb --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterC/AV_AddWaterVC.xib @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Home/Drink_water/waterC/AV_WaterHomeVC.swift b/anniversary_Project/Home/Drink_water/waterC/AV_WaterHomeVC.swift new file mode 100644 index 0000000..26ba92c --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterC/AV_WaterHomeVC.swift @@ -0,0 +1,443 @@ +// +// AV_WaterHomeVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/4. +// + +import UIKit +import SVProgressHUD +import Alamofire + +class AV_WaterHomeVC: AV_RootVC { + + @IBOutlet weak var tableView: UITableView! + var arrBirther = [UserModel]() + let colors: [UIColor] = [ + UIColor.hexSting(color: "#D2F0FB", alpha: 1), + UIColor.hexSting(color: "#EDD0FF", alpha: 1), + UIColor.hexSting(color: "#D8F5DF", alpha: 1), + UIColor.hexSting(color: "#FFEDED", alpha: 1) + ] + + let defaults = UserDefaults.standard + let healthManager = HealthManager() + var tagml:Int = 0 + override func viewDidLoad() { + super.viewDidLoad() + + PrWCDBBaseManager.shared.createTable(table: "UserModel", of: UserModel.self) + setTableView() + + scheduleNotifications() + requestTrackingAuthorization { idfa in + if let idfa = idfa { + print("IDFA: \(idfa)") + StartManager.shared.idfaid = idfa + print("Stored IDFA: \(StartManager.shared.idfaid ?? "N/A")") + } else { + print("IDFA is not available or tracking authorization denied.") + } + } + + setPostStar() + + + + } + + func setPostStar(){ + let url = "http://111.9.47.226:38080/top_selection/save_app_start_log" + let parameters:[String : Any] = [ + "deviceId": StartManager.shared.devicID ?? "", + "localIp": StartManager.shared.localIP ?? "", + "remoteIp": StartManager.shared.publicIP ?? "", + "linkId": "", + "packageName": "com.countdown.day.daycount", + "gaid": StartManager.shared.idfaid ?? "", + "dataId": "", + ] + + + let headers: HTTPHeaders = [ + "Content-Type": "application/json" + ] + + NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in + switch result { + case .success(let data): + print("Response:--- \(data)") + case .failure(let error): + print("Error:--- \(error)") + } + } + + } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.navigationBar.isHidden = true + + loadData() + setwaterdrink() + let target = defaults.integer(forKey: "waterml") + self.tagml = Int(target) + } + + func setwaterdrink(){ + if defaults.object(forKey: "waterml") != nil { + if defaults.integer(forKey: "waterml") == 2000{ + let weight = defaults.integer(forKey: "weight") + let jichu = 0.033 * Double(weight) + let exercise = defaults.string(forKey: "sports") + let temp = defaults.string(forKey: "temperature") + if weight != 0, let exercise = exercise, !exercise.isEmpty, let temp = temp, !temp.isEmpty { + var yundong:Double = 0.0 + if exercise == "Exercise regularly"{ + yundong = jichu + 1.0 + }else if exercise == "Occasional exercise"{ + yundong = jichu + 0.5 + }else if exercise == "Almost no exercise"{ + yundong = jichu + 0.2 + } + var zuizhong:Double = 0.0 + if temp == "Heat"{ + zuizhong = yundong + 1.0 + }else if temp == "Warm and warm"{ + zuizhong = yundong + 0.5 + }else if temp == "Comfortable"{ + zuizhong = yundong + 0.22 + }else if temp == "Clod"{ + zuizhong = yundong + 0.0 + } + + defaults.set(zuizhong * 1000, forKey: "waterml") + } else { + + } + }else{ + let weight = defaults.integer(forKey: "weight") + let jichu = 0.033 * Double(weight) + let exercise = defaults.string(forKey: "sports") + let temp = defaults.string(forKey: "temperature") + var yundong:Double = 0.0 + if exercise == "Exercise regularly"{ + yundong = jichu + 1.0 + }else if exercise == "Occasional exercise"{ + yundong = jichu + 0.5 + }else if exercise == "Almost no exercise"{ + yundong = jichu + 0.2 + } + var zuizhong:Double = 0.0 + if temp == "Heat"{ + zuizhong = yundong + 1.0 + }else if temp == "Warm and warm"{ + zuizhong = yundong + 0.5 + }else if temp == "Comfortable"{ + zuizhong = yundong + 0.22 + }else if temp == "Clod"{ + zuizhong = yundong + 0.0 + } + + defaults.set(zuizhong * 1000, forKey: "waterml") + } + + } else { + print("键 'waterml' 不存在") + let weight = defaults.integer(forKey: "weight") + let jichu = 0.033 * Double(weight) + let exercise = defaults.string(forKey: "sports") + let temp = defaults.string(forKey: "temperature") + var yundong:Double = 0.0 + if exercise == "Exercise regularly"{ + yundong = jichu + 1.0 + }else if exercise == "Occasional exercise"{ + yundong = jichu + 0.5 + }else if exercise == "Almost no exercise"{ + yundong = jichu + 0.2 + } + var zuizhong:Double = 0.0 + if temp == "Heat"{ + zuizhong = yundong + 1.0 + }else if temp == "Warm and warm"{ + zuizhong = yundong + 0.5 + }else if temp == "Comfortable"{ + zuizhong = yundong + 0.22 + }else if temp == "Clod"{ + zuizhong = yundong + 0.0 + } + + defaults.set(zuizhong * 1000, forKey: "waterml") + } + } + + func setTableView() { + tableView.delegate = self + tableView.dataSource = self + tableView.register(UINib(nibName: "AV_WaterCell", bundle: nil), forCellReuseIdentifier: "AV_WaterCell") + tableView.register(UINib(nibName: "AV_WaterDayCell", bundle: nil), forCellReuseIdentifier: "AV_WaterDayCell") + tableView.register(UINib(nibName: "AV_BirtherDayTaskCell", bundle: nil), forCellReuseIdentifier: "AV_BirtherDayTaskCell") + tableView.register(UINib(nibName: "AV_NoneCell", bundle: nil), forCellReuseIdentifier: "AV_NoneCell") + + } + + func loadData() { + if let users = PrWCDBBaseManager.shared.qureyFromDb(fromTable: userModelTableName, cls: UserModel.self) { + self.arrBirther = users + print("---\(users)") + } else { + self.arrBirther = [] + } + tableView.reloadData() + } + + func scheduleNotifications() { + scheduleNotification(at: 7, minute: 0, identifier: "morningNotification", title: "Good morning", body: "Let's start with the first glass of water today") + scheduleNotification(at: 10, minute: 0, identifier: "midMorningNotification", title: "It's ten o'clock.", body: "Don't forget to drink water") + scheduleNotification(at: 12, minute: 0, identifier: "noonNotification", title: "lunch time", body: "Drink a glass of water while eating.") + scheduleNotification(at: 15, minute: 0, identifier: "afternoonNotification", title: "It's tea time", body: "Take a break and drink some water.") + scheduleNotification(at: 18, minute: 0, identifier: "eveningNotification", title: "Dinner time", body: "What water should I drink with dinner?") + scheduleNotification(at: 20, minute: 0, identifier: "nightNotification", title: "Bedtime reading time", body: "Don't forget to drink water while studying.") + scheduleNotification(at: 22, minute: 0, identifier: "lateNightNotification", title: "Good night", body: "Drink a glass of milk before going to bed") + } + + +} +extension AV_WaterHomeVC:UITableViewDelegate,UITableViewDataSource{ + func numberOfSections(in tableView: UITableView) -> Int { + return 3 + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + if section == 0 || section == 1 { + return 1 + } else { + if arrBirther.count == 0{ + return 1 + }else{ + return arrBirther.count + } + + } + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + if indexPath.section == 0 { + let cell = tableView.dequeueReusableCell(withIdentifier: "AV_WaterCell", for: indexPath) as! AV_WaterCell + + let waterml = defaults.integer(forKey: "waterml") + cell.waveView.setTotalCapacity(CGFloat(waterml)) + + if let savedDate = defaults.object(forKey: "savedDate") as? Date { + // 获取当前日期 + let currentDate = Date() + + // 创建一个日期格式化器 + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy-MM-dd" // 设置日期格式 + + // 格式化日期为字符串 + let savedDateString = dateFormatter.string(from: savedDate) + let currentDateString = dateFormatter.string(from: currentDate) + + // 比较两个日期字符串 + if savedDateString == currentDateString { + print("同一天") + let answer = defaults.integer(forKey: "waveView") + let waterml = defaults.integer(forKey: "waterml") + + cell.waveView.setCurrentVolume(CGFloat(answer)) + cell.drinkMLLabel.text = "\(answer)ml" + let percentage = (Double(answer) / Double(waterml)) * 100 + cell.drinkb.text = "Progress \(Int(percentage))% · target\(tagml)ml" + // 获取今天的星期几 + let todayWeekday = getTodayWeekday() + defaults.set(percentage, forKey: todayWeekday) + } else { + print("不同天") + cell.waveView.setCurrentVolume(0) + cell.drinkMLLabel.text = "0ml" + cell.drinkb.text = "Progress 0% · target\(tagml)" + defaults.set(0, forKey: "waveView") + let currentDate = Date() + let defaults = UserDefaults.standard + defaults.set(currentDate, forKey: "savedDate") + } + } + + cell.birtherBlock = { + let vc = AV_MineVC() + self.navigationController?.pushViewController(vc, animated: true) + } + cell.setingBlock = { + let vc = AV_WaterSettingVC() + self.navigationController?.pushViewController(vc, animated: true) + } + cell.block150 = { [self] in + cell.waveView.drinkWater(150) + let answer = defaults.integer(forKey: "waveView") + let neanswer = answer + 150 + let waterml = defaults.integer(forKey: "waterml") + let percentage = (Double(neanswer) / Double(waterml)) * 100 + defaults.set(neanswer, forKey: "waveView") + cell.drinkMLLabel.text = "\(neanswer)ml" + cell.drinkb.text = "Progress \(Int(percentage))% · target\(tagml)ml" + // 获取今天的星期几 + let todayWeekday = getTodayWeekday() + defaults.set(percentage, forKey: todayWeekday) + let currentDate = Date() + healthManager.saveWaterIntake(waterQuantity: 0.15, date: currentDate) + tableView.reloadData() + SVProgressHUD.showSuccess(withStatus: "Add drinking water successfully") + DispatchQueue.main.asyncAfter(wallDeadline: .now() + 1.5) { + SVProgressHUD.dismiss() + } + + } + cell.block200 = { [self] in + cell.waveView.drinkWater(200) + let answer = defaults.integer(forKey: "waveView") + let neanswer = answer + 200 + let waterml = defaults.integer(forKey: "waterml") + let percentage = (Double(neanswer) / Double(waterml)) * 100 + defaults.set(neanswer, forKey: "waveView") + cell.drinkMLLabel.text = "\(neanswer)ml" + + cell.drinkb.text = "Progress \(Int(percentage))% · target\(tagml)ml" + // 获取今天的星期几 + let todayWeekday = getTodayWeekday() + defaults.set(percentage, forKey: todayWeekday) + let currentDate = Date() + healthManager.saveWaterIntake(waterQuantity: 0.2, date: currentDate) + tableView.reloadData() + SVProgressHUD.showSuccess(withStatus: "Add drinking water successfully") + DispatchQueue.main.asyncAfter(wallDeadline: .now() + 1.5) { + SVProgressHUD.dismiss() + } + + } + cell.block250 = { [self] in + cell.waveView.drinkWater(250) + let answer = defaults.integer(forKey: "waveView") + let neanswer = answer + 250 + let waterml = defaults.integer(forKey: "waterml") + let percentage = (Double(neanswer) / Double(waterml)) * 100 + defaults.set(neanswer, forKey: "waveView") + + cell.drinkMLLabel.text = "\(neanswer)ml" + + + cell.drinkb.text = "Progress \(Int(percentage))% · target\(tagml)ml" + // 获取今天的星期几 + let todayWeekday = getTodayWeekday() + defaults.set(percentage, forKey: todayWeekday) + let currentDate = Date() + healthManager.saveWaterIntake(waterQuantity: 0.25, date: currentDate) + tableView.reloadData() + SVProgressHUD.showSuccess(withStatus: "Add drinking water successfully") + DispatchQueue.main.asyncAfter(wallDeadline: .now() + 1.5) { + SVProgressHUD.dismiss() + } + } + cell.block300 = { [self] in + cell.waveView.drinkWater(300) + let answer = defaults.integer(forKey: "waveView") + let neanswer = answer + 300 + let waterml = defaults.integer(forKey: "waterml") + let percentage = (Double(neanswer) / Double(waterml)) * 100 + defaults.set(neanswer, forKey: "waveView") + + cell.drinkMLLabel.text = "\(neanswer)ml" + + cell.drinkb.text = "Progress \(Int(percentage))% · target\(tagml)ml" + // 获取今天的星期几 + let todayWeekday = getTodayWeekday() + defaults.set(percentage, forKey: todayWeekday) + let currentDate = Date() + healthManager.saveWaterIntake(waterQuantity: 0.3, date: currentDate) + tableView.reloadData() + SVProgressHUD.showSuccess(withStatus: "Add drinking water successfully") + DispatchQueue.main.asyncAfter(wallDeadline: .now() + 1.5) { + SVProgressHUD.dismiss() + } + } + cell.block350 = { [self] in + cell.waveView.drinkWater(350) + let answer = defaults.integer(forKey: "waveView") + let neanswer = answer + 350 + let waterml = defaults.integer(forKey: "waterml") + let percentage = (Double(neanswer) / Double(waterml)) * 100 + defaults.set(neanswer, forKey: "waveView") + cell.drinkMLLabel.text = "\(neanswer)ml" + + cell.drinkb.text = "Progress \(Int(percentage))% · target\(tagml)ml" + // 获取今天的星期几 + let todayWeekday = getTodayWeekday() + defaults.set(percentage, forKey: todayWeekday) + let currentDate = Date() + healthManager.saveWaterIntake(waterQuantity: 0.35, date: currentDate) + tableView.reloadData() + SVProgressHUD.showSuccess(withStatus: "Add drinking water successfully") + DispatchQueue.main.asyncAfter(wallDeadline: .now() + 1.5) { + SVProgressHUD.dismiss() + } + } + + cell.blockedit = { + let vc = AV_AddWaterVC() + self.navigationController?.pushViewController(vc, animated: true) + } + return cell + } else if indexPath.section == 1 { + let cell = tableView.dequeueReusableCell(withIdentifier: "AV_WaterDayCell", for: indexPath) as! AV_WaterDayCell + +// + cell.day1Label.text = "\(Int(defaults.integer(forKey:"一")))%" + cell.day1cup.image = UIImage(named: getImageName(for: Int(defaults.integer(forKey:"一")))) + + cell.day2Label.text = "\(Int(defaults.integer(forKey:"二")))%" + cell.day2Cup.image = UIImage(named: getImageName(for: Int(defaults.integer(forKey:"二")))) + + cell.day3label.text = "\(Int(defaults.integer(forKey:"三")))%" + cell.day3Cup.image = UIImage(named: getImageName(for: Int(defaults.integer(forKey:"三")))) + + cell.day4Label.text = "\(Int(defaults.integer(forKey:"四")))%" + cell.day4Cup.image = UIImage(named: getImageName(for: Int(defaults.integer(forKey:"四")))) + + cell.day5Label.text = "\(Int(defaults.integer(forKey:"五")))%" + cell.day5Cup.image = UIImage(named: getImageName(for: Int(defaults.integer(forKey:"五")))) + + cell.day6Label.text = "\(Int(defaults.integer(forKey:"六")))%" + cell.day6Cup.image = UIImage(named: getImageName(for: Int(defaults.integer(forKey:"六")))) + + cell.day7Label.text = "\(Int(defaults.integer(forKey:"七")))%" + cell.day7Cup.image = UIImage(named: getImageName(for: Int(defaults.integer(forKey:"七")))) + return cell + } else { + + if self.arrBirther.count == 0 { + let cell = tableView.dequeueReusableCell(withIdentifier: "AV_NoneCell", for: indexPath) as! AV_NoneCell + return cell + }else{ + let cell = tableView.dequeueReusableCell(withIdentifier: "AV_BirtherDayTaskCell", for: indexPath) as! AV_BirtherDayTaskCell + cell.model = arrBirther[indexPath.row] + cell.bgView.backgroundColor = colors.randomElement()! + return cell + } + + + } + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + if indexPath.section == 2 { + if arrBirther.count == 0{ + + }else{ + let vc = AV_DetalisVC() + vc.model = self.arrBirther[indexPath.row] + self.navigationController?.pushViewController(vc, animated: true) + } + + } + } +} diff --git a/anniversary_Project/Home/Drink_water/waterC/AV_WaterHomeVC.xib b/anniversary_Project/Home/Drink_water/waterC/AV_WaterHomeVC.xib new file mode 100644 index 0000000..6018f90 --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterC/AV_WaterHomeVC.xib @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Home/Drink_water/waterC/AV_WaterSettingVC.swift b/anniversary_Project/Home/Drink_water/waterC/AV_WaterSettingVC.swift new file mode 100644 index 0000000..961fb4e --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterC/AV_WaterSettingVC.swift @@ -0,0 +1,103 @@ +// +// AV_WaterSettingVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/9. +// + +import UIKit + +class AV_WaterSettingVC: AV_RootVC { + + @IBOutlet weak var waterprogressView: UIView! + + + @IBOutlet weak var waterbgView: UIView! + + + @IBOutlet weak var clockView: UIView! + + @IBOutlet weak var aboutView: UIView! + + @IBOutlet weak var privaCyView: UIView! + + + @IBOutlet weak var userView: UIView! + + + @IBOutlet weak var targetLabel: UILabel! + + @IBOutlet weak var drinkLabel: UILabel! + + let circularProgressBarView = CircularProgressBarView() + + override func viewDidLoad() { + super.viewDidLoad() + + + waterbgView.layer.cornerRadius = 28 + clockView.layer.cornerRadius = 28 + aboutView.layer.cornerRadius = 28 + privaCyView.layer.cornerRadius = 28 + userView.layer.cornerRadius = 28 + + // 设置 circularProgressBarView 的 frame 或者使用 Auto Layout + circularProgressBarView.frame = waterprogressView.bounds + waterprogressView.addSubview(circularProgressBarView) + + // 设置进度条颜色和轨道颜色 + circularProgressBarView.progressColor = .hexSting(color: "#62BFFF", alpha: 1) + circularProgressBarView.trackColor = .hexSting(color: "#FFFFFF", alpha: 1) + + + + + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.navigationBar.isHidden = true + let defaults = UserDefaults.standard + let drink = Int(defaults.integer(forKey: "waveView")) + drinkLabel.text = "\(drink)" + let target = defaults.integer(forKey: "waterml") + + targetLabel.text = "Target:\(target)ml" + + let percentage = ( Double(drink) / Double(target) ) * 100 + // 设置进度值 + circularProgressBarView.progress = percentage / 100 // 75% progress + + } + + + @IBAction func about(_ sender: Any) { + let vc = AV_AboutVC() + navigationController?.pushViewController(vc, animated: true) + + } + + + @IBAction func privacy(_ sender: Any) { + let vc = AV_PivacyVC() + vc.type = 1 + self.present(vc, animated: true,completion: nil) + } + + @IBAction func editBTn(_ sender: Any) { + let vc = AV_pagesAllVC() + navigationController?.pushViewController(vc, animated: true) + } + + @IBAction func back(_ sender: Any) { + navigationController?.popViewController(animated: true) + } + + + @IBAction func user(_ sender: Any) { + let vc = AV_PivacyVC() + vc.type = 0 + self.present(vc, animated: true,completion: nil) + } + +} diff --git a/anniversary_Project/Home/Drink_water/waterC/AV_WaterSettingVC.xib b/anniversary_Project/Home/Drink_water/waterC/AV_WaterSettingVC.xib new file mode 100644 index 0000000..a0c2119 --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterC/AV_WaterSettingVC.xib @@ -0,0 +1,264 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Home/Drink_water/waterC/AV_pagesAllVC.swift b/anniversary_Project/Home/Drink_water/waterC/AV_pagesAllVC.swift new file mode 100644 index 0000000..c42edd5 --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterC/AV_pagesAllVC.swift @@ -0,0 +1,135 @@ +// +// AV_pagesAllVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/9. +// + +import UIKit +import BRPickerView + +class AV_pagesAllVC: AV_RootVC { + + @IBOutlet weak var genderV: UIView! + + @IBOutlet weak var genderLabel: UILabel! + + + @IBOutlet weak var ageView: UIView! + + @IBOutlet weak var ageLabel: UILabel! + + + @IBOutlet weak var exerciseView: UIView! + + + @IBOutlet weak var exerciseLabel: UILabel! + + @IBOutlet weak var tempView: UIView! + + + @IBOutlet weak var tempLabel: UILabel! + let defaults = UserDefaults.standard + override func viewDidLoad() { + super.viewDidLoad() + + genderV.layer.cornerRadius = 28 + ageView.layer.cornerRadius = 28 + exerciseView.layer.cornerRadius = 28 + tempView.layer.cornerRadius = 28 +// let defaults = UserDefaults.standard + genderLabel.text = defaults.string(forKey: "people") + let age = "\(defaults.integer(forKey: "age"))" + let weight = "\(defaults.integer(forKey: "weight"))" + ageLabel.text = "\(age),\(weight)kg" + exerciseLabel.text = defaults.string(forKey: "sports") + tempLabel.text = defaults.string(forKey: "temperature") + } + + + @IBAction func genderBtn(_ sender: Any) { + let stringPickerView = BRStringPickerView() + stringPickerView.pickerMode = .componentSingle + stringPickerView.title = "Gender" + stringPickerView.dataSourceArr = ["Man", "Woman", "Pregnancy", "Pregnancy"] + stringPickerView.selectIndex = 2 + stringPickerView.resultModelBlock = { [self] resultModel in +// print("选择的值:\(resultModel!.value ?? "")") + defaults.set(resultModel!.value , forKey: "people") + self.genderLabel.text = resultModel!.value + } + + stringPickerView.show() + } + + + @IBAction func agebtn(_ sender: Any) { + let stringPickerView = BRStringPickerView() + stringPickerView.pickerMode = .componentMulti + stringPickerView.title = "Age and weight" + + // 创建两个 0 到 100 的数字数组,并将其转换为字符串数组 + let numberArray1 = (0...100).map { "\($0)" } + let numberArray2 = (0...300).map { "\($0)" } + stringPickerView.dataSourceArr = [numberArray1, numberArray2] + + // 默认选择的索引 + stringPickerView.selectIndexs = [20, 50] + + stringPickerView.resultModelArrayBlock = { [weak self] resultModelArray in + guard let self = self else { return } + + if let resultModelArray = resultModelArray, resultModelArray.count == 2 { + let value1 = resultModelArray[0].value + let value2 = resultModelArray[1].value + let combinedValue = "\(value1 ?? ""),\(value2 ?? "")kg" + self.defaults.set(value1, forKey: "age") + self.defaults.set(value2, forKey: "weight") + + self.ageLabel.text = combinedValue + } + } + + stringPickerView.show() + + } + + + + @IBAction func exerciseBtn(_ sender: Any) { + let stringPickerView = BRStringPickerView() + stringPickerView.pickerMode = .componentSingle + stringPickerView.title = "Amount of exercise" + stringPickerView.dataSourceArr = ["Exercise regularly", "Occasional exercise", "Almost no exercise"] + stringPickerView.selectIndex = 2 + stringPickerView.resultModelBlock = { [self] resultModel in +// print("选择的值:\(resultModel!.value ?? "")") + defaults.set(resultModel!.value , forKey: "sports") + self.exerciseLabel.text = resultModel!.value + } + + stringPickerView.show() + } + + + @IBAction func temperBtn(_ sender: Any) { + let stringPickerView = BRStringPickerView() + stringPickerView.pickerMode = .componentSingle + stringPickerView.title = "Current temperature" + stringPickerView.dataSourceArr = ["Heat", "Warm and warm exercise", "Comfortable","Clod"] + stringPickerView.selectIndex = 2 + stringPickerView.resultModelBlock = { [self] resultModel in +// print("选择的值:\(resultModel!.value ?? "")") + defaults.set(resultModel!.value , forKey: "temperature") + self.tempLabel.text = resultModel!.value + } + + stringPickerView.show() + } + + + @IBAction func back(_ sender: Any) { + navigationController?.popViewController(animated: true) + } + +} diff --git a/anniversary_Project/Home/Drink_water/waterC/AV_pagesAllVC.xib b/anniversary_Project/Home/Drink_water/waterC/AV_pagesAllVC.xib new file mode 100644 index 0000000..0e1aa31 --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterC/AV_pagesAllVC.xib @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Home/Drink_water/waterV/addwater/AV_AddWaterVCCollectionViewCell.swift b/anniversary_Project/Home/Drink_water/waterV/addwater/AV_AddWaterVCCollectionViewCell.swift new file mode 100644 index 0000000..b117a3a --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterV/addwater/AV_AddWaterVCCollectionViewCell.swift @@ -0,0 +1,21 @@ +// +// AV_AddWaterVCCollectionViewCell.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/8. +// + +import UIKit + +class AV_AddWaterVCCollectionViewCell: UICollectionViewCell { + @IBOutlet weak var imageV: UIImageView! + + + @IBOutlet weak var nameLabel: UILabel! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } + +} diff --git a/anniversary_Project/Home/Drink_water/waterV/addwater/AV_AddWaterVCCollectionViewCell.xib b/anniversary_Project/Home/Drink_water/waterV/addwater/AV_AddWaterVCCollectionViewCell.xib new file mode 100644 index 0000000..b922b2c --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterV/addwater/AV_AddWaterVCCollectionViewCell.xib @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Home/Drink_water/waterV/homewater/AV_AddWaterCollectionViewCell.swift b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_AddWaterCollectionViewCell.swift new file mode 100644 index 0000000..62e9944 --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_AddWaterCollectionViewCell.swift @@ -0,0 +1,20 @@ +// +// AV_AddWaterCollectionViewCell.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/4. +// + +import UIKit + +class AV_AddWaterCollectionViewCell: UICollectionViewCell { + @IBOutlet weak var bgImageV: UIImageView! + + @IBOutlet weak var nameLabel: UILabel! + + override func awakeFromNib() { + super.awakeFromNib() + + } + +} diff --git a/anniversary_Project/Home/Drink_water/waterV/homewater/AV_AddWaterCollectionViewCell.xib b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_AddWaterCollectionViewCell.xib new file mode 100644 index 0000000..1e4e8cd --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_AddWaterCollectionViewCell.xib @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Home/Drink_water/waterV/homewater/AV_BirtherDayTaskCell.swift b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_BirtherDayTaskCell.swift new file mode 100644 index 0000000..d10c444 --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_BirtherDayTaskCell.swift @@ -0,0 +1,34 @@ +// +// AV_BirtherDayTaskCell.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/8. +// + +import UIKit + +class AV_BirtherDayTaskCell: UITableViewCell { + @IBOutlet weak var bgView: UIView! + + @IBOutlet weak var headImageV: UIImageView! + + @IBOutlet weak var titleLabel: UILabel! + + @IBOutlet weak var timeLabel: UILabel! + + + override func awakeFromNib() { + super.awakeFromNib() + headImageV.layer.cornerRadius = 30 + bgView.layer.cornerRadius = 28 + } + var model:UserModel?{ + didSet{ + let image = model?.getImage() + self.headImageV.image = image + self.timeLabel.text = model?.date + self.titleLabel.text = model?.name + + } + } +} diff --git a/anniversary_Project/Home/Drink_water/waterV/homewater/AV_BirtherDayTaskCell.xib b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_BirtherDayTaskCell.xib new file mode 100644 index 0000000..1caa91b --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_BirtherDayTaskCell.xib @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Home/Drink_water/waterV/homewater/AV_NoneCell.swift b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_NoneCell.swift new file mode 100644 index 0000000..9b844be --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_NoneCell.swift @@ -0,0 +1,18 @@ +// +// AV_NoneCell.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/10. +// + +import UIKit + +class AV_NoneCell: UITableViewCell { + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } + + +} diff --git a/anniversary_Project/Home/Drink_water/waterV/homewater/AV_NoneCell.xib b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_NoneCell.xib new file mode 100644 index 0000000..f9b359e --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_NoneCell.xib @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Home/Drink_water/waterV/homewater/AV_WaterCell.swift b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_WaterCell.swift new file mode 100644 index 0000000..4bdc685 --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_WaterCell.swift @@ -0,0 +1,147 @@ +// +// AV_WaterCell.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/4. +// + +import UIKit + +class AV_WaterCell: UITableViewCell { + @IBOutlet weak var drinkb: UILabel! + + @IBOutlet weak var drinkMLLabel: UILabel! + + + @IBOutlet weak var waveView: AV_WaveView! + + @IBOutlet weak var collectionView: UICollectionView! + + @IBOutlet weak var bgview: UIView! + + + + + let cellWidth: CGFloat = 76 + let cellHeight: CGFloat = 114 + let cellSpacing: CGFloat = 12 + + let dataimag = ["wateredit","addwater", "milk", "tea", "milkyTea", "beer","redwine","fruitjuice","soup"] + let drinkml = ["0ml","250ml", "300ml", "300ml", "200ml", "350ml","150ml","200ml","250ml"] + + var birtherBlock:(()->())? + var setingBlock:(()->())? + + var blockedit:(()->())? + var block250:(()->())? + var block300:(()->())? + var block200:(()->())? + var block150:(()->())? + var block350:(()->())? + +// var ql:(()->())? + override func awakeFromNib() { + super.awakeFromNib() + setcollectionV() + + + } + + func setcollectionV(){ + let layout = UICollectionViewFlowLayout() + layout.scrollDirection = .horizontal + collectionView.dataSource = self + collectionView.delegate = self + collectionView.collectionViewLayout = layout + collectionView.register(UINib(nibName: "AV_AddWaterCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "AV_AddWaterCollectionViewCell") + } + + + @IBAction func birtherBtn(_ sender: Any) { + if self.birtherBlock != nil{ + self.birtherBlock!() + } + + } + + @IBAction func settingBtn(_ sender: Any) { + + if self.setingBlock != nil{ + self.setingBlock!() + } + } + +// @IBAction func ql(_ sender: Any) { +// if self.ql != nil{ +// self.ql!() +// } +// +// } + + +} +extension AV_WaterCell: UICollectionViewDelegateFlowLayout,UICollectionViewDataSource,UICollectionViewDelegate{ + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return dataimag.count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AV_AddWaterCollectionViewCell", for: indexPath) as! AV_AddWaterCollectionViewCell + cell.bgImageV.image = UIImage(named: "\(self.dataimag[indexPath.row])") + cell.nameLabel.text = self.drinkml[indexPath.row] + return cell + + } + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { + return CGSize(width: cellWidth, height: cellHeight) + } + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { + return cellSpacing + } + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { + return UIEdgeInsets(top: 0, left: cellSpacing, bottom: 0, right: cellSpacing) + } + + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + if indexPath.row == 0 { + + if self.blockedit != nil{ + self.blockedit!() + } + + }else if indexPath.row == 1 || indexPath.row == 8{ + //250ml + if self.block250 != nil{ + self.block250!() + } + }else if indexPath.row == 2 || indexPath.row == 3{ + //300ml + if self.block300 != nil{ + self.block300!() + } + }else if indexPath.row == 4 || indexPath.row == 7{ + //200ml + if self.block200 != nil{ + self.block200!() + } + }else if indexPath.row == 5{ + //350ml + if self.block350 != nil{ + self.block350!() + } + }else{ + //150ml + if self.block150 != nil{ + self.block150!() + } + } + + } + +} diff --git a/anniversary_Project/Home/Drink_water/waterV/homewater/AV_WaterCell.xib b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_WaterCell.xib new file mode 100644 index 0000000..c3995db --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_WaterCell.xib @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Home/Drink_water/waterV/homewater/AV_WaterDayCell.swift b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_WaterDayCell.swift new file mode 100644 index 0000000..5219eb7 --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_WaterDayCell.swift @@ -0,0 +1,45 @@ +// +// AV_WaterDayCell.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/8. +// + +import UIKit + +class AV_WaterDayCell: UITableViewCell { + @IBOutlet weak var bgView: UIStackView! + + @IBOutlet weak var day1cup: UIImageView! + + @IBOutlet weak var day1Label: UILabel! + + @IBOutlet weak var day2Cup: UIImageView! + + @IBOutlet weak var day2Label: UILabel! + + @IBOutlet weak var day3Cup: UIImageView! + + @IBOutlet weak var day3label: UILabel! + + @IBOutlet weak var day4Cup: UIImageView! + + @IBOutlet weak var day4Label: UILabel! + + @IBOutlet weak var day5Cup: UIImageView! + + @IBOutlet weak var day5Label: UILabel! + + @IBOutlet weak var day6Cup: UIImageView! + + @IBOutlet weak var day6Label: UILabel! + + @IBOutlet weak var day7Cup: UIImageView! + + @IBOutlet weak var day7Label: UILabel! + + override func awakeFromNib() { + super.awakeFromNib() + bgView.layer.cornerRadius = 28 + } +} diff --git a/anniversary_Project/Home/Drink_water/waterV/homewater/AV_WaterDayCell.xib b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_WaterDayCell.xib new file mode 100644 index 0000000..724a889 --- /dev/null +++ b/anniversary_Project/Home/Drink_water/waterV/homewater/AV_WaterDayCell.xib @@ -0,0 +1,353 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Home/V/AV_TaskCell.swift b/anniversary_Project/Home/V/AV_TaskCell.swift new file mode 100644 index 0000000..a6c4451 --- /dev/null +++ b/anniversary_Project/Home/V/AV_TaskCell.swift @@ -0,0 +1,52 @@ +// +// AV_TaskCell.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/15. +// + +import UIKit + +class AV_TaskCell: UITableViewCell { + + @IBOutlet weak var dateLabel: UILabel! + + @IBOutlet weak var headImagV: UIImageView! + + @IBOutlet weak var nameLabel: UILabel! + + @IBOutlet weak var timeLabel: UILabel! + + @IBOutlet weak var bgView: UIView! + + override func awakeFromNib() { + super.awakeFromNib() + self.headImagV.layer.cornerRadius = 5 + self.bgView.layer.cornerRadius = 8 + + + } + + var model:UserModel?{ + didSet{ + let image = model?.getImage() + self.headImagV.image = image + self.timeLabel.text = model?.date + self.nameLabel.text = model?.name + let dateString = model?.date + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy-MM-dd" + + if let date = dateFormatter.date(from: dateString!) { + let outputDateFormatter = DateFormatter() + outputDateFormatter.dateFormat = "MMM\ndd" + dateLabel.text = outputDateFormatter.string(from: date) + +// print(formattedDate) // Output: May 20 + } else { + print("Invalid date format") + } + + } + } +} diff --git a/anniversary_Project/Home/V/AV_TaskCell.xib b/anniversary_Project/Home/V/AV_TaskCell.xib new file mode 100644 index 0000000..fb9abd9 --- /dev/null +++ b/anniversary_Project/Home/V/AV_TaskCell.xib @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Info.plist b/anniversary_Project/Info.plist new file mode 100644 index 0000000..4c0e8d3 --- /dev/null +++ b/anniversary_Project/Info.plist @@ -0,0 +1,21 @@ + + + + + NSUserTrackingUsageDescription + "Watermore" needs to request tracking permissions to provide a personalized advertising experience. We respect and protect your privacy and will not sell your data to third parties. + ALSdkInitializationConfiguration + NLQHJDx4rcfd5IqhZf9nad2tIqFSH8SSKP3DXD18sTKUvV6tBfrH9_RPCGb6hvEn3NPXJDmUQCnvnKgHIT7Qn4 + NSHealthShareUsageDescription + When we record drinking water on the home page, we need to read your health data in order to analyze your drinking habits. + NSHealthUpdateUsageDescription + When we record drinking water on the home page, we need to enter your health data to record your water intake + FirebaseAutomaticScreenReportingEnabled + NO + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + + diff --git a/anniversary_Project/Main/AV_CustomTabBar.swift b/anniversary_Project/Main/AV_CustomTabBar.swift new file mode 100644 index 0000000..276c861 --- /dev/null +++ b/anniversary_Project/Main/AV_CustomTabBar.swift @@ -0,0 +1,44 @@ +// +// AV_CustomTabBar.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/15. +// + +import UIKit + +class AV_CustomTabBar: UITabBar { + private var middleButton: UIButton! + + override init(frame: CGRect) { + super.init(frame: frame) + setupMiddleButton() + } + required init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + setupMiddleButton() + } + private func setupMiddleButton() { + middleButton = UIButton(type: .custom) + middleButton.setBackgroundImage(UIImage(named: "add"), for: .normal) + middleButton.adjustsImageWhenHighlighted = false + middleButton.translatesAutoresizingMaskIntoConstraints = false + middleButton.addTarget(self, action: #selector(middleButtonTapped), for: .touchUpInside) + addSubview(middleButton) + + NSLayoutConstraint.activate([ + middleButton.centerXAnchor.constraint(equalTo: centerXAnchor), + middleButton.centerYAnchor.constraint(equalTo: centerYAnchor, constant: -10), // 调整按钮位置 + middleButton.widthAnchor.constraint(equalToConstant: 60), // 调整按钮大小 + middleButton.heightAnchor.constraint(equalToConstant: 60) + ]) + } + + @objc private func middleButtonTapped() { + // 处理中间按钮被点击的事件 + // 例如:present一个新的视图控制器,用于执行中间按钮的操作 + + + } + +} diff --git a/anniversary_Project/Main/AV_LaunchLimitesVC.swift b/anniversary_Project/Main/AV_LaunchLimitesVC.swift new file mode 100644 index 0000000..03a5155 --- /dev/null +++ b/anniversary_Project/Main/AV_LaunchLimitesVC.swift @@ -0,0 +1,365 @@ +// +// AV_LaunchLimitesVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/11. +// + +import UIKit +import SVProgressHUD +import Photos +import Alamofire +import AppLovinSDK +//import FirebaseAnalytics +import FirebaseRemoteConfig + +class AV_LaunchLimitesVC: AV_RootVC { + let activityView = UIActivityIndicatorView() + var interstitialAd: MAInterstitialAd! + var retryAttempt = 0.0 + + var adCheckTimer: Timer? + var adCheckStartTime: Date? + var adLoadTime: Int = 0 + + var idad:String? + var remoteConfig: RemoteConfig! + + var failureCount = 0 + + private var retryTimer: Timer? + private var retryAttempts = 0 + private let maxRetryAttempts = 3 + private let retryInterval: TimeInterval = 3 + override func viewDidLoad() { + super.viewDidLoad() + + remoteConfig = RemoteConfig.remoteConfig() + // 设置最小获取间隔(开发期间可以设置较小的值) + let settings = RemoteConfigSettings() + settings.minimumFetchInterval = 0 + remoteConfig.configSettings = settings + // Fetch 配置值 + remoteConfig.setDefaults(fromPlist: "isopen") + + + + activityView.center = CGPoint(x: self.view.center.x + 10, y: self.view.bounds.size.height - 100 ) + // 停止后,隐藏菊花 + activityView.hidesWhenStopped = true + activityView.color = .black; + activityView.style = UIActivityIndicatorView.Style.whiteLarge + + self.view.addSubview(activityView) + self.activityView.startAnimating() + + fetchRemoteConfig() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + navigationController?.navigationBar.isHidden = true + // createInterstitialAd() + DispatchQueue.main.asyncAfter(deadline: .now() + 3) { + // 请求跟踪授权 + requestTrackingAuthorization { idfa in + if let idfa = idfa { + print("IDFA: \(idfa)") + StartManager.shared.idfaid = idfa + print("Stored IDFA: \(StartManager.shared.idfaid ?? "N/A")") + } else { + print("IDFA is not available or tracking authorization denied.") + } + } + } + + } + func fetchRemoteConfig() { + let localVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0" + print("version ------- \(localVersion)") + + remoteConfig.fetch { [weak self] (status, error) in + guard let self = self else { return } + + if status == .success { + self.retryAttempts = 0 + print("Config fetched!") + self.remoteConfig.activate { changed, error in + if error == nil { + let js = self.remoteConfig.configValue(forKey: "isopen").jsonValue as! [String: Any] + let valueopen = js["isadopen"] as! Bool + let valueversion = js["version"] as! String + + DispatchQueue.main.async { + if valueversion == localVersion { + let appDelegate = UIApplication.shared.delegate + appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC()) + StartManager.shared.superHero = false + } else { + if valueopen { + self.startAdCheck() + StartManager.shared.superHero = true + } else { + let appDelegate = UIApplication.shared.delegate + appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC()) + StartManager.shared.superHero = false + } + } + } + + } + } + + } else { + print("Config not fetched") + if let error = error { + print("Error: \(error.localizedDescription)") + } + + self.retryAttempts += 1 + if self.retryAttempts <= self.maxRetryAttempts { + // 取消之前的定时器 + self.retryTimer?.invalidate() + // 启动新的定时器 + self.retryTimer = Timer.scheduledTimer(withTimeInterval: self.retryInterval, repeats: false) { [weak self] _ in + self?.fetchRemoteConfig() + } + } else { + print("Max retry attempts reached. Stopping retries.") + let appDelegate = UIApplication.shared.delegate + appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC()) + } + } + } + } + + ///定时加载 + func startAdCheck() { + createInterstitialAd() + adCheckStartTime = Date() + adCheckTimer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(checkAdStatus), userInfo: nil, repeats: true) + } + + @objc func checkAdStatus() { + let elapsedTime = Date().timeIntervalSince(adCheckStartTime!) + let elapsedTimeInMilliseconds = Int(elapsedTime * 1000) + + if interstitialAd.isReady { + interstitialAd.show() + adLoadTime = elapsedTimeInMilliseconds // 记录加载 + adCheckTimer?.invalidate() + self.activityView.stopAnimating() + if StartManager.shared.idfaid == ""{ + self.fetchIDFAUntilSuccess() + }else{ + self.setPostSHOW() + } + } else if elapsedTimeInMilliseconds >= 10000 { // 10000 毫秒 = 10 秒 + adCheckTimer?.invalidate() + let appDelegate = UIApplication.shared.delegate + appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC()) + + self.activityView.stopAnimating() + + } else { + print("广告未准备好,继续检查...") + } + } + + func setPostload(){ + let url = "http://111.9.47.226:38080/top_selection/save_ad_load_log" + let parameters:[String : Any] = [ + "deviceId": StartManager.shared.devicID ?? "", + "localIp": StartManager.shared.localIP ?? "", + "remoteIp": StartManager.shared.publicIP ?? "", + "linkId": "", + "packageName": "com.countdown.day.daycount", + "gaid": StartManager.shared.idfaid ?? "", + "dataId": "", + "shelfNumber":"开屏加载", + "succeed": StartManager.shared.succeed, + "loadTime":StartManager.shared.loadTime ?? "", + "adPlatform": StartManager.shared.adPlatform ?? "", + "countryCode": StartManager.shared.countryCode ?? "", + "adId": StartManager.shared.adId ?? "", + "platformResponseTime": StartManager.shared.platformResponseTime ?? "", + "getIpResponseTime": StartManager.shared.getIpResponseTime ?? "", + "ecpm": StartManager.shared.ecpm ?? "", + "dsp": StartManager.shared.dsp ?? "", + "network": StartManager.shared.network ?? "", + "showStatus": 0, + "washParam": true, + ] + + + let headers: HTTPHeaders = [ + "Content-Type": "application/json" + ] + + NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in + switch result { + case .success(let data): + print("Response:--- \(data)") + case .failure(let error): + print("Error:--- \(error)") + } + } + + } + + + func setPostSHOW(){ + let url = "http://111.9.47.226:38080/top_selection/save_ad_show_log" + let parameters:[String : Any] = [ + "deviceId": StartManager.shared.devicID ?? "", + "localIp": StartManager.shared.localIP ?? "", + "remoteIp": StartManager.shared.publicIP ?? "", + "linkId": "", + "packageName": "com.countdown.day.daycount", + "gaid": StartManager.shared.idfaid ?? "", + "dataId": "", + "shelfNumber":"开屏展示", + "succeed": StartManager.shared.succeed, + "loadTime":StartManager.shared.loadTime ?? "", + "adPlatform": StartManager.shared.adPlatform ?? "", + "countryCode": StartManager.shared.countryCode ?? "", + "adId": StartManager.shared.adId ?? "", + "platformResponseTime": StartManager.shared.platformResponseTime ?? "", + "getIpResponseTime": StartManager.shared.getIpResponseTime ?? "", + "ecpm": StartManager.shared.ecpm ?? "", + "dsp": StartManager.shared.dsp ?? "", + "network": StartManager.shared.network ?? "", + ] + + let headers: HTTPHeaders = [ + "Content-Type": "application/json" + ] + + NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in + switch result { + case .success(let data): + print("Response:--- \(data)") + case .failure(let error): + print("Error:--- \(error)") + } + } + + } + + + func fetchIDFAUntilSuccess() { + DispatchQueue.global(qos: .background).async { + var idfaObtained = false + + while !idfaObtained { + let semaphore = DispatchSemaphore(value: 0) + + requestIDFA { idfa in + if let idfa = idfa { + print("Got IDFA: \(idfa)") + // 执行成功获取 IDFA 后的处理方法 + // self.performActionWithIDFA(idfa) + StartManager.shared.idfaid = idfa + self.setPostSHOW() + idfaObtained = true + } else { + print("Failed to get IDFA, retrying...") + DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() + 1.0) { + semaphore.signal() + } + } + } + + semaphore.wait() + } + } + } + +} +extension AV_LaunchLimitesVC: MAAdDelegate +{ + func createInterstitialAd() { + + let randomString = getRandomString() + + if StartManager.shared.adId == nil{ + StartManager.shared.adId = randomString ?? "bee9f7039e56cc7a" + interstitialAd = MAInterstitialAd(adUnitIdentifier: StartManager.shared.adId!) + print("adid-----\(StartManager.shared.adId ?? "gggg")") + }else{ + interstitialAd = MAInterstitialAd(adUnitIdentifier: StartManager.shared.adId!) + print("adid-----\(StartManager.shared.adId ?? "gggg")") + } + + interstitialAd.delegate = self + self.idad = randomString + + // Load the first ad + interstitialAd.load() + } + + + // MARK: MAAdDelegate Protocol + + /// 当广告加载成功时调用的方法 + func didLoad(_ ad: MAAd) { + // 重试尝试次数重置为0 + retryAttempt = 0 + // 记录广告加载成功的相关信息 + // StartManager.shared.shelfNumber = "开屏加载" + StartManager.shared.succeed = true + StartManager.shared.loadTime = self.adLoadTime + StartManager.shared.adPlatform = "MAX" + StartManager.shared.countryCode = ALSdk.shared().configuration.countryCode + StartManager.shared.adId = self.idad + StartManager.shared.platformResponseTime = ad.requestLatency + StartManager.shared.ecpm = Float(ad.revenue) + StartManager.shared.dsp = ad.dspName + StartManager.shared.network = ad.networkName + + self.setPostload() + + } + + /// 当广告加载失败时调用的方法 + func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError) { + // 广告加载失败,建议进行重试 + // 使用指数递增的延迟时间进行重试,最大延迟时间为 64 秒 + retryAttempt += 1 + let delaySec = pow(2.0, min(6.0, retryAttempt)) + DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) { + self.interstitialAd.load() + } + } + + /// 当广告显示时调用的方法 + func didDisplay(_ ad: MAAd) { + // 暂停您的应用的背景音频 + } + + /// 当用户点击广告时调用的方法 + func didClick(_ ad: MAAd) { + // 用户点击广告 + } + + /// 当广告隐藏时调用的方法 + func didHide(_ ad: MAAd) { + // 恢复您的应用的背景音频 + // 广告隐藏后,预加载下一个广告 + interstitialAd.load() + let appDelegate = UIApplication.shared.delegate + appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC()) + } + + + /// 当广告无法显示时调用的方法 + func didFail(toDisplay ad: MAAd, withError error: MAError) { + // 广告无法显示,建议加载下一个广告 + interstitialAd.load() + } + + + + +} + diff --git a/anniversary_Project/Main/AV_LaunchLimitesVC.xib b/anniversary_Project/Main/AV_LaunchLimitesVC.xib new file mode 100644 index 0000000..6ef8637 --- /dev/null +++ b/anniversary_Project/Main/AV_LaunchLimitesVC.xib @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Main/AV_NAVVC.swift b/anniversary_Project/Main/AV_NAVVC.swift new file mode 100644 index 0000000..495e04d --- /dev/null +++ b/anniversary_Project/Main/AV_NAVVC.swift @@ -0,0 +1,65 @@ +// +// AV_NAVVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/11. +// + +import UIKit + +class AV_NAVVC: UINavigationController { + + override func viewDidLoad() { + super.viewDidLoad() + + setbackBtn() + } + + + func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { + if self.viewControllers.count <= 1 { + let viewController = UIViewController() + viewController.hidesBottomBarWhenPushed = true + tabBarController?.tabBar.isHidden = true + return false + } + setbackBtn() + return true + } + + + override func pushViewController(_ viewController: UIViewController, animated: Bool) { + if viewControllers.count > 0 { + // setBackItmer()/ + viewController.hidesBottomBarWhenPushed = true + tabBarController?.tabBar.isHidden = true + } + setbackBtn() + super.pushViewController(viewController, animated: animated) + + } + func setbackBtn(){ + + let backButton = UIButton(type: .custom) + + + backButton.setBackgroundImage(#imageLiteral(resourceName: "add"), for: .normal) + + backButton.addTarget(self, action: #selector(back), for: .touchUpInside) + + + let backView = UIBarButtonItem(customView: backButton) + + let barButtonItem = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) + barButtonItem.width = -5 + + + navigationItem.leftBarButtonItems = [barButtonItem, backView] + + } + + @objc func back(){ + navigationController?.popViewController(animated: true) + + } +} diff --git a/anniversary_Project/Main/AV_RootTabbarVC.swift b/anniversary_Project/Main/AV_RootTabbarVC.swift new file mode 100644 index 0000000..e62b8a3 --- /dev/null +++ b/anniversary_Project/Main/AV_RootTabbarVC.swift @@ -0,0 +1,90 @@ +// +// AV_RootTabbarVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/11. +// + +import UIKit + +class AV_RootTabbarVC: UITabBarController { + private var middleButton: UIButton! + override func viewDidLoad() { + super.viewDidLoad() + + + let firstViewController = AV_HomeVC() + firstViewController.view.backgroundColor = .white + firstViewController.tabBarItem = UITabBarItem(title: "", image: UIImage(named: "home_n"), selectedImage: UIImage(named: "home_s")) + + let secondViewController = AV_MineVC() + secondViewController.view.backgroundColor = .white + secondViewController.tabBarItem = UITabBarItem(title: "", image: UIImage(named: "bir_n"), selectedImage: UIImage(named: "bir_s")) + secondViewController.tabBarItem.imageInsets = UIEdgeInsets.init(top: -3, left: 0, bottom: -3, right: 0) + + + viewControllers = [firstViewController, secondViewController] + setupMiddleButton() + + self.delegate = self + + let tabBarBackgroundImage = UIImage(named: "tabbar") + tabBar.backgroundImage = tabBarBackgroundImage + } + + + + private func setupMiddleButton() { + middleButton = UIButton(type: .custom) + middleButton.setBackgroundImage(UIImage(named: "add"), for: .normal) + middleButton.adjustsImageWhenHighlighted = false + middleButton.translatesAutoresizingMaskIntoConstraints = false + middleButton.addTarget(self, action: #selector(middleButtonTapped), for: .touchUpInside) + view.addSubview(middleButton) + + NSLayoutConstraint.activate([ + middleButton.centerXAnchor.constraint(equalTo: view.centerXAnchor), + middleButton.bottomAnchor.constraint(equalTo: tabBar.topAnchor, constant: 70), // 调整按钮位置 + middleButton.widthAnchor.constraint(equalToConstant: 100), // 调整按钮大小 + middleButton.heightAnchor.constraint(equalToConstant: 100) + ]) + } + + + @objc private func middleButtonTapped() { + // 处理中间按钮被点击的事件 + // 例如:present一个新的视图控制器,用于执行中间按钮的操作 + if let keyWindow = UIApplication.shared.keyWindow, let rootViewController = keyWindow.rootViewController { + let viewControllerToPresent = AV_AddVC() + viewControllerToPresent.modalPresentationStyle = .fullScreen + rootViewController.present(viewControllerToPresent, animated: true, completion: nil) + } + + + } + + +} +extension AV_RootTabbarVC: UITabBarControllerDelegate { + func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { + + if let tabBarItems = tabBarController.tabBar.items, let selectedViewControllerIndex = tabBarController.viewControllers?.firstIndex(of: viewController) { + let selectedItem = tabBarItems[selectedViewControllerIndex] + // Apply scale animation only to the selected item + let scaleAnimation = CABasicAnimation(keyPath: "transform.scale") + scaleAnimation.duration = 0.2 + scaleAnimation.fromValue = 0.9 + scaleAnimation.toValue = 1.1 + scaleAnimation.autoreverses = true + scaleAnimation.repeatCount = 1 + + // Apply animation to the selected item's view + if let selectedView = selectedItem.value(forKey: "view") as? UIView { + selectedView.layer.add(scaleAnimation, forKey: nil) + } + } + return true + } +} + + diff --git a/anniversary_Project/Main/AV_RootVC.swift b/anniversary_Project/Main/AV_RootVC.swift new file mode 100644 index 0000000..5210c09 --- /dev/null +++ b/anniversary_Project/Main/AV_RootVC.swift @@ -0,0 +1,73 @@ +// +// AV_RootVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/11. +// + +import UIKit + +class AV_RootVC: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + setNavigtionContrilerBase() + } + //设置导航栏属性 + func setNavigtionContrilerBase(){ + self.navigationController?.navigationBar.barTintColor = .white + let titleTextAttributes = [ + NSAttributedString.Key.font: UIFont.systemFont(ofSize: 16, weight: .bold), + NSAttributedString.Key.foregroundColor: UIColor.black + ] + + ///控制导航栏的背景颜色和底部线的隐藏 + if #available(iOS 13.0, *) { + let appearance = UINavigationBarAppearance() + appearance.configureWithOpaqueBackground() //重置导航栏背景颜色和阴影 + appearance.backgroundColor = UIColor.white + appearance.shadowImage = UIImage() + appearance.shadowColor = nil + appearance.titleTextAttributes = titleTextAttributes + self.navigationController?.navigationBar.standardAppearance = appearance + self.navigationController?.navigationBar.scrollEdgeAppearance = appearance + } else { + + self.navigationController?.navigationBar.barTintColor = UIColor.white + self.navigationController?.navigationBar.titleTextAttributes = titleTextAttributes + self.navigationController?.navigationBar.shadowImage = UIImage() + self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) + } + + } + + + //设置导航栏透明 + func setNavigationCotrollerHide(){ + // 1.设置导航栏半透明 + self.navigationController?.navigationBar.isTranslucent = false + self.navigationController?.navigationBar.barTintColor = .clear + // 2.设置导航栏背景图片 + self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) + + // 3.设置导航栏阴影图片 + self.navigationController?.navigationBar.shadowImage = UIImage() + } + + override var preferredStatusBarStyle : UIStatusBarStyle { + return .lightContent + } + + func generateRandomString(length: Int) -> String { + let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + var randomString = "" + for _ in 0.. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Me/C/AV_MineVC.swift b/anniversary_Project/Me/C/AV_MineVC.swift new file mode 100644 index 0000000..f25ae5e --- /dev/null +++ b/anniversary_Project/Me/C/AV_MineVC.swift @@ -0,0 +1,471 @@ +// +// AV_MineVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/11. +// + +import UIKit +import FSCalendar +//import FirebaseAnalytics +import AppLovinSDK +import Alamofire +import FirebaseRemoteConfig + +class AV_MineVC: AV_RootVC { + + + + @IBOutlet weak var calendarV: FSCalendar! + + @IBOutlet weak var TitleLabel: UILabel! + + + @IBOutlet weak var tableView: UITableView! + + @IBOutlet weak var countLabel: UILabel! + + + @IBOutlet weak var noneImagV: UIImageView! + + var interstitialAd: MAInterstitialAd! + var remoteConfig: RemoteConfig! + var isadshow:Bool = false + var retryAttempt = 0.0 + + var arr = [UserModel]() + + var arrdate = [UserModel]() + +// var ispushView:Bool = true + + override func viewDidLoad() { + super.viewDidLoad() + setbackBtn() + setTableView() + calendarV.dataSource = self + calendarV.delegate = self + + let currentDate = Date() + let formatter = DateFormatter() + formatter.dateFormat = "MMMM yyyy" + TitleLabel.text = formatter.string(from: currentDate) + + // 添加对currentPage属性的观察者 + calendarV.addObserver(self, forKeyPath: "currentPage", options: .new, context: nil) + + + + } + + // 实现观察者方法,响应currentPage属性的变化 + override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { + if keyPath == "currentPage" { + if let newDate = change?[.newKey] as? Date { + let formatter = DateFormatter() + formatter.dateFormat = "MMMM yyyy" + let monthYearString = formatter.string(from: newDate) + TitleLabel.text = monthYearString + } + } + } + + func setbackBtn(){ + + let backButton = UIButton(type: .custom) + + + backButton.setBackgroundImage(#imageLiteral(resourceName: "back"), for: .normal) + + backButton.addTarget(self, action: #selector(back), for: .touchUpInside) + + + let backView = UIBarButtonItem(customView: backButton) + + let barButtonItem = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil) + barButtonItem.width = -5 + + + navigationItem.leftBarButtonItems = [barButtonItem, backView] + + } + + @objc func back(){ +// navigationController?.popViewController(animated: true) + if self.isadshow == true{ + DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.5) { + + if self.interstitialAd.isReady { + self.interstitialAd.show() + self.setPostSHOW() + + }else{ + self.navigationController?.popViewController(animated: true) + } + } + }else{ + self.navigationController?.popViewController(animated: true) + } + + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.createInterstitialAd() + remoteConfig = RemoteConfig.remoteConfig() + + + + // 设置最小获取间隔(开发期间可以设置较小的值) + let settings = RemoteConfigSettings() + settings.minimumFetchInterval = 0 + remoteConfig.configSettings = settings + // Fetch 配置值 + remoteConfig.setDefaults(fromPlist: "isopen") + fetchRemoteConfig() + self.navigationController?.navigationBar.isHidden = false + calendarV.reloadData() + + let users = PrWCDBBaseManager.shared.qureyFromDb(fromTable: userModelTableName, cls: UserModel.self) + if let users = users { + self.arr = users + print("---\(users)") + } else { + + } + + selectDateManually(Date()) + + self.countLabel.text = "My Task \(self.arrdate.count)" + + updateUI() + + } + + func updateUI() { + if arrdate.isEmpty { + noneImagV.isHidden = false + } else { + noneImagV.isHidden = true + } + tableView.reloadData() + } + + func parseUserModelsFromArray(_ users: [UserModel]) { + // 创建 UserModels 并添加到 arr 中 + for userModel in users { + arr.append(userModel) + } + } + + func selectDateManually(_ date: Date) { + self.calendar(calendarV, didSelect: date, at: .current) + } + + func setTableView(){ + tableView.delegate = self + tableView.dataSource = self + tableView.register(UINib(nibName: "AV_CalenDarcell", bundle: nil), forCellReuseIdentifier: "AV_CalenDarcell") + } + + + @IBAction func moreBtn(_ sender: UIButton) { + + let viewControllerToPresent = AV_AddVC() + viewControllerToPresent.modalPresentationStyle = .fullScreen + self.present(viewControllerToPresent, animated: true, completion: nil) + } + + + @IBAction func left(_ sender: Any) { + let currentMonth = calendarV.currentPage + let previousMonth = Calendar.current.date(byAdding: .month, value: -1, to: currentMonth)! + calendarV.setCurrentPage(previousMonth, animated: true) + } + + + @IBAction func right(_ sender: Any) { + let currentMonth = calendarV.currentPage + let nextMonth = Calendar.current.date(byAdding: .month, value: 1, to: currentMonth)! + calendarV.setCurrentPage(nextMonth, animated: true) + + } + + ///是否有广告 + func fetchRemoteConfig() { + let localVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0" + remoteConfig.fetch{ (status, error) -> Void in + if status == .success { + print("Config fetched!") + self.remoteConfig.activate { changed, error in + if error == nil{ + let js = self.remoteConfig.configValue(forKey: "isopen").jsonValue as! [String:Any] + let valueopen = js["isadopen"] as! Bool + let valueversion = js["version"] as! String + DispatchQueue.main.async { + if valueversion == localVersion{ + self.isadshow = false + }else{ + if valueopen { + self.isadshow = true + } else { + self.isadshow = false + } + } + } + + + } + + } + + } else { + print("Config not fetched") + if let error = error { + print("Error: \(error.localizedDescription)") + } + } + } + + } + func setPostload(){ + let url = "http://111.9.47.226:38080/top_selection/save_ad_load_log" + let parameters:[String : Any] = [ + "deviceId": StartManager.shared.devicID ?? "", + "localIp": StartManager.shared.localIP ?? "", + "remoteIp": StartManager.shared.publicIP ?? "", + "linkId": "", + "packageName": "com.countdown.day.daycount", + "gaid": StartManager.shared.idfaid ?? "", + "dataId": "", + "shelfNumber":"日历页返回", + "succeed": StartManager.shared.succeed, + "loadTime": "", + "adPlatform": StartManager.shared.adPlatform ?? "", + "countryCode": StartManager.shared.countryCode ?? "", + "adId": StartManager.shared.adId ?? "", + "platformResponseTime": StartManager.shared.platformResponseTime ?? "", + "getIpResponseTime": StartManager.shared.getIpResponseTime ?? "", + "ecpm": StartManager.shared.ecpm ?? "", + "dsp": StartManager.shared.dsp ?? "", + "network": StartManager.shared.network ?? "", + "showStatus": 0, + "washParam": true, + ] + + + let headers: HTTPHeaders = [ + "Content-Type": "application/json" + ] + + NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in + switch result { + case .success(let data): + print("Response:--- \(data)") + case .failure(let error): + print("Error:--- \(error)") + } + } + + } + + + func setPostSHOW(){ + let url = "http://111.9.47.226:38080/top_selection/save_ad_show_log" + let parameters:[String : Any] = [ + "deviceId": StartManager.shared.devicID ?? "", + "localIp": StartManager.shared.localIP ?? "", + "remoteIp": StartManager.shared.publicIP ?? "", + "linkId": "", + "packageName": "com.countdown.day.daycount", + "gaid": StartManager.shared.idfaid ?? "", + "dataId": "", + "shelfNumber":"日历页返回", + "succeed": StartManager.shared.succeed, + "loadTime": "", + "adPlatform": StartManager.shared.adPlatform ?? "", + "countryCode": StartManager.shared.countryCode ?? "", + "adId": StartManager.shared.adId ?? "", + "platformResponseTime": StartManager.shared.platformResponseTime ?? "", + "getIpResponseTime": StartManager.shared.getIpResponseTime ?? "", + "ecpm": StartManager.shared.ecpm ?? "", + "dsp": StartManager.shared.dsp ?? "", + "network": StartManager.shared.network ?? "", + ] + + + let headers: HTTPHeaders = [ + "Content-Type": "application/json" + ] + + NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in + switch result { + case .success(let data): + print("Response:--- \(data)") + case .failure(let error): + print("Error:--- \(error)") + } + } + + } + +} + +extension AV_MineVC:FSCalendarDelegate, FSCalendarDataSource, FSCalendarDelegateAppearance { + + + // 设置 "Today" 的边框颜色为红色 + func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, borderDefaultColorFor date: Date) -> UIColor? { + if calendar.today == date { + return UIColor.hexSting(color: "#4B92FE", alpha: 1) + } else { + return nil + } + } + + + + // 当日历滚动到新的月份时调用 + func calendar(_ calendar: FSCalendar, didChange month: Date, by any: Any) { + let formatter = DateFormatter() + formatter.dateFormat = "MMMM yyyy" + let monthYearString = formatter.string(from: month) + print("当前页面的月份和年份:\(monthYearString)") + } + + func calendar(_ calendar: FSCalendar, numberOfEventsFor date: Date) -> Int { + // 将日期转换为字符串,格式为 "yyyy-MM-dd" + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy-MM-dd" + let dateString = dateFormatter.string(from: date) + + // 遍历数组 arr 中的每个元素,检查是否有匹配的日期 + for userModel in arr { + if userModel.date == dateString { + return 1 // 如果有匹配的日期,则返回事件数量为 1 + } + } + + return 0 // 如果没有匹配的日期,则返回事件数量为 0 + } + + + + func calendar(_ calendar: FSCalendar, didSelect date: Date, at monthPosition: FSCalendarMonthPosition) { + // 处理日期选中事件 + // 获取选中日期的数据,并更新 tableView + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy-MM-dd" + let selectedDateString = dateFormatter.string(from: date) + + // 在这里根据选中的日期获取对应的数据 + self.arrdate = arr.filter { $0.date == selectedDateString } + + // 更新 tableView 的数据 + // 这里假设你的 tableView 数据源已经更新为 selectedData + self.countLabel.text = "My Task \(self.arrdate.count)" + tableView.reloadData() + } + + +} +extension AV_MineVC:UITableViewDelegate,UITableViewDataSource{ + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + + return arrdate.count + } + + + + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "AV_CalenDarcell", for: indexPath)as!AV_CalenDarcell + cell.model = arrdate[indexPath.row] + return cell + } + + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let vc = AV_DetalisVC() + vc.model = self.arrdate[indexPath.row] + self.navigationController?.pushViewController(vc, animated: true) + + } +} +extension UIView { + func roundCorners(_ corners: UIRectCorner, radius: CGFloat) { + let maskPath = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) + let maskLayer = CAShapeLayer() + maskLayer.frame = bounds + maskLayer.path = maskPath.cgPath + layer.mask = maskLayer + } +} +extension AV_MineVC: MAAdDelegate +{ + func createInterstitialAd() + { + interstitialAd = MAInterstitialAd(adUnitIdentifier: "bee9f7039e56cc7a") + interstitialAd.delegate = self + + // Load the first ad + interstitialAd.load() + } + + // MARK: MAAdDelegate Protocol + + func didLoad(_ ad: MAAd) + { + // Interstitial ad is ready to be shown. 'interstitialAd.isReady' will now return 'true' + + // Reset retry attempt + retryAttempt = 0 + StartManager.shared.succeed = true +// StartManager.shared.loadTime = self.adLoadTime + StartManager.shared.adPlatform = "MAX" + StartManager.shared.countryCode = ALSdk.shared().configuration.countryCode + StartManager.shared.adId = "bee9f7039e56cc7a" + StartManager.shared.platformResponseTime = ad.requestLatency + StartManager.shared.ecpm = Float(ad.revenue) + StartManager.shared.dsp = ad.dspName + StartManager.shared.network = ad.networkName + + + setPostload() + } + + func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError) + { + // Interstitial ad failed to load + // We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds) + + retryAttempt += 1 + let delaySec = pow(2.0, min(6.0, retryAttempt)) + + DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) { + self.interstitialAd.load() + } + } + + func didDisplay(_ ad: MAAd) + { + // Pause your app's background audio + } + + func didClick(_ ad: MAAd) {} + + func didHide(_ ad: MAAd) + { + // Resume your app's background audio + // Interstitial ad is hidden. Pre-load the next ad + interstitialAd.load() + self.navigationController?.popViewController(animated: true) + } + + func didFail(toDisplay ad: MAAd, withError error: MAError) + { + // Interstitial ad failed to display. We recommend loading the next ad + interstitialAd.load() + } +} diff --git a/anniversary_Project/Me/C/AV_MineVC.xib b/anniversary_Project/Me/C/AV_MineVC.xib new file mode 100644 index 0000000..f145f03 --- /dev/null +++ b/anniversary_Project/Me/C/AV_MineVC.xib @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Me/C/AV_PivacyVC.swift b/anniversary_Project/Me/C/AV_PivacyVC.swift new file mode 100644 index 0000000..ad0a445 --- /dev/null +++ b/anniversary_Project/Me/C/AV_PivacyVC.swift @@ -0,0 +1,36 @@ +// +// AV_PivacyVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/17. +// + +import UIKit +import WebKit +class AV_PivacyVC: AV_RootVC { + + var type:Int = 0 + var webView: WKWebView! + override func viewDidLoad() { + super.viewDidLoad() + webView = WKWebView() + view = webView + + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.navigationBar.isHidden = true + if self.type == 0{ + if let url = URL(string: "https://daycount.bitbucket.io/terms.html") { + let request = URLRequest(url: url) + webView.load(request) + } + }else{ + if let url = URL(string: "https://daycount.bitbucket.io/privacy.html") { + let request = URLRequest(url: url) + webView.load(request) + } + } + } +} diff --git a/anniversary_Project/Me/C/AV_PivacyVC.xib b/anniversary_Project/Me/C/AV_PivacyVC.xib new file mode 100644 index 0000000..364db87 --- /dev/null +++ b/anniversary_Project/Me/C/AV_PivacyVC.xib @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Me/V/AV_CalenDarcell.swift b/anniversary_Project/Me/V/AV_CalenDarcell.swift new file mode 100644 index 0000000..0a85182 --- /dev/null +++ b/anniversary_Project/Me/V/AV_CalenDarcell.swift @@ -0,0 +1,39 @@ +// +// AV_CalenDarcell.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/16. +// + +import UIKit + +class AV_CalenDarcell: UITableViewCell { + @IBOutlet weak var bgView: UIView! + + @IBOutlet weak var typeImageV: UIImageView! + + @IBOutlet weak var titleLabel: UILabel! + + @IBOutlet weak var timeLabel: UILabel! + + override func awakeFromNib() { + super.awakeFromNib() + bgView.layer.cornerRadius = 10 + } + var model:UserModel?{ + didSet{ + titleLabel.text = model?.name + timeLabel.text = model?.date + let typename = model?.type + if typename == "Schedule"{ + self.typeImageV.image = UIImage(named: "schedule_n") + }else if typename == "Birthday"{ + self.typeImageV.image = UIImage(named: "birthday_n") + }else{ + self.typeImageV.image = UIImage(named: "memor_n") + } + } + } + + +} diff --git a/anniversary_Project/Me/V/AV_CalenDarcell.xib b/anniversary_Project/Me/V/AV_CalenDarcell.xib new file mode 100644 index 0000000..99cd7e7 --- /dev/null +++ b/anniversary_Project/Me/V/AV_CalenDarcell.xib @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Tool/AV_ScrollingScaleView.swift b/anniversary_Project/Tool/AV_ScrollingScaleView.swift new file mode 100644 index 0000000..bb2e274 --- /dev/null +++ b/anniversary_Project/Tool/AV_ScrollingScaleView.swift @@ -0,0 +1,51 @@ +// +// AV_ScrollingScaleView.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/8. +// + +import UIKit + +class AV_ScrollingScaleView: UIView { + private let scrollView = UIScrollView() + + override init(frame: CGRect) { + super.init(frame: frame) + setupScrollView() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupScrollView() + } + + private func setupScrollView() { + scrollView.frame = self.bounds + scrollView.backgroundColor = .white + self.addSubview(scrollView) + + // 设置内容大小 + let contentWidth: CGFloat = 4000 // 2000刻度,每个刻度宽度为2个单位 + scrollView.contentSize = CGSize(width: contentWidth, height: self.bounds.height) + + // 添加刻度标签 + for i in 0...2000 { + let xPosition = CGFloat(i) * 2.0 + let label = UILabel(frame: CGRect(x: xPosition, y: self.bounds.midY - 10, width: 50, height: 20)) + label.text = "\(i)ml" + label.textColor = .black + label.textAlignment = .center + + if i % 100 == 0 { // 每100个刻度加一个较大标签 + label.font = UIFont.boldSystemFont(ofSize: 12) + label.frame = CGRect(x: xPosition, y: self.bounds.midY - 10, width: 50, height: 20) + } else { + label.font = UIFont.systemFont(ofSize: 10) + } + + scrollView.addSubview(label) + } + } + +} diff --git a/anniversary_Project/Tool/AV_WaveView.swift b/anniversary_Project/Tool/AV_WaveView.swift new file mode 100644 index 0000000..fc0f6f7 --- /dev/null +++ b/anniversary_Project/Tool/AV_WaveView.swift @@ -0,0 +1,137 @@ +// +// AV_WaveView.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/8. +// + +import UIKit + +class AV_WaveView: UIView { + + private var waveLayers: [CAShapeLayer] = [] + private var waveHeight: CGFloat = 10.0 + private var waveLength: CGFloat = 200.0 + private var waveSpeed: CGFloat = 0.05 + private var waveOffset: CGFloat = 0.0 + private var wavePositionY: CGFloat = 0.0 + private var totalCapacity: CGFloat = 0.0 + private var currentVolume: CGFloat = 0.0 + private var timer: Timer? + + override init(frame: CGRect) { + super.init(frame: frame) + setupWaveLayers() + setupMaskLayer() + startWaveAnimation() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupWaveLayers() + setupMaskLayer() + startWaveAnimation() + } + + private func setupWaveLayers() { + let colors = [UIColor.hexSting(color: "#96D3FF", alpha: 1).cgColor, + UIColor.hexSting(color: "#62BFFF", alpha: 1).cgColor] + for color in colors { + let waveLayer = CAShapeLayer() + waveLayer.fillColor = color + layer.addSublayer(waveLayer) + waveLayers.append(waveLayer) + } + } + + private func setupMaskLayer() { + let maskLayer = CAShapeLayer() + let path = UIBezierPath(rect: bounds) + maskLayer.path = path.cgPath + layer.mask = maskLayer + } + + private func startWaveAnimation() { + timer = Timer.scheduledTimer(timeInterval: 1.0 / 30.0, target: self, selector: #selector(updateWave), userInfo: nil, repeats: true) + } + + @objc private func updateWave() { + waveOffset += waveSpeed + for (index, waveLayer) in waveLayers.enumerated() { + let amplitude = waveHeight * (1.2 - 0.2 * CGFloat(index)) + let path = createWavePath(offset: waveOffset + CGFloat(index) * 0.3, amplitude: amplitude) + waveLayer.path = path.cgPath + } + } + + private func createWavePath(offset: CGFloat, amplitude: CGFloat) -> UIBezierPath { + let path = UIBezierPath() + let width = bounds.width + let height = bounds.height + let midY = height * wavePositionY + path.move(to: CGPoint(x: 0, y: midY)) + + for x in stride(from: 0.0, to: Double(width), by: 1.0) { + let relativeX = CGFloat(x) / waveLength * .pi * 2 + let y = sin(relativeX + offset) * amplitude + midY + path.addLine(to: CGPoint(x: CGFloat(x), y: y)) + } + + path.addLine(to: CGPoint(x: width, y: height)) + path.addLine(to: CGPoint(x: 0, y: height)) + path.close() + + return path + } + + func setTotalCapacity(_ capacity: CGFloat) { + totalCapacity = capacity + currentVolume = 0 + wavePositionY = 1.0 + updateWavePosition(animated: false) + } + + func drinkWater(_ volume: CGFloat) { + currentVolume += volume + if currentVolume > totalCapacity { + currentVolume = totalCapacity + } + + let newPositionY = 1.0 - (currentVolume / totalCapacity) + updateWavePosition(animated: true, targetPositionY: newPositionY) + } + + func setCurrentVolume(_ volume: CGFloat) { + currentVolume = volume + if currentVolume > totalCapacity { + currentVolume = totalCapacity + } else if currentVolume < 0 { + currentVolume = 0 + } + + let newPositionY = 1.0 - (currentVolume / totalCapacity) + updateWavePosition(animated: true, targetPositionY: newPositionY) + } + + private func updateWavePosition(animated: Bool, targetPositionY: CGFloat? = nil) { + let newPositionY = targetPositionY ?? (1.0 - (currentVolume / totalCapacity)) + + if animated { + UIView.animate(withDuration: 3.0, delay: 0, options: [.curveEaseInOut], animations: { + self.wavePositionY = newPositionY + self.layer.setNeedsDisplay() + }, completion: { finished in + if finished { + print("Animation completed.") + } + }) + } else { + wavePositionY = newPositionY + layer.setNeedsDisplay() + } + } + + deinit { + timer?.invalidate() + } +} diff --git a/anniversary_Project/Tool/AV_usermodel.swift b/anniversary_Project/Tool/AV_usermodel.swift new file mode 100644 index 0000000..499a182 --- /dev/null +++ b/anniversary_Project/Tool/AV_usermodel.swift @@ -0,0 +1,67 @@ +// +// AV_usermodel.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/11. +// + +import Foundation +import UIKit +import WCDBSwift + +// 类型绑定 +let userModelTableName = "UserModel" +class UserModel: TableCodable { + /// 主键自增id + var identifier: Int? + + var uid: String = "" + var name: String = "" +// var introduce: String = "" + var date: String = "" + var imageBase64: String? // 用于存储图像的 Base64 字符串 + var notificationEnabled: Bool = false + var type:String = "" + + + enum CodingKeys: String, CodingTableKey { + typealias Root = UserModel + + static let objectRelationalMapping = TableBinding(CodingKeys.self) + + case identifier + case uid + case name +// case introduce + case date + case imageBase64 = "image" // 将图像的 Base64 字符串存储在 imageBase64 属性中 + case notificationEnabled + case type + + // Column constraints for primary key, unique, not null, default value and so on. It is optional. + static var columnConstraintBindings: [UserModel.CodingKeys: ColumnConstraint]? { + return [ + .identifier:ColumnConstraint() + ] + } + } + + // 将 UIImage 转换为 Base64 字符串,并存储在 imageBase64 属性中 + func setImage(image: UIImage) { + if let imageData = image.pngData() { + self.imageBase64 = imageData.base64EncodedString() + } + } + + // 从 imageBase64 属性中读取 Base64 字符串,并转换为 UIImage + func getImage() -> UIImage? { + if let base64String = self.imageBase64, + let imageData = Data(base64Encoded: base64String), + let image = UIImage(data: imageData) { + return image + } + return nil + } + + +} diff --git a/anniversary_Project/Tool/CircularProgressBarView.swift b/anniversary_Project/Tool/CircularProgressBarView.swift new file mode 100644 index 0000000..011c0ff --- /dev/null +++ b/anniversary_Project/Tool/CircularProgressBarView.swift @@ -0,0 +1,107 @@ +// +// CircularProgressBarView.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/10. +// + +import Foundation + + +class CircularProgressBarView: UIView { + + private var progressLayer = CAShapeLayer() + private var trackLayer = CAShapeLayer() + + var progressColor: UIColor = .blue { + didSet { + progressLayer.strokeColor = progressColor.cgColor + } + } + + var trackColor: UIColor = .lightGray { + didSet { + trackLayer.strokeColor = trackColor.cgColor + } + } + + var progress: CGFloat = 0 { + didSet { + progressLayer.strokeEnd = progress + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + setupLayers() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupLayers() + } + + private func setupLayers() { + let circularPath = UIBezierPath(arcCenter: center, radius: bounds.width / 2, startAngle: -CGFloat.pi / 2, endAngle: 3 * CGFloat.pi / 2, clockwise: true) + + trackLayer.path = circularPath.cgPath + trackLayer.fillColor = UIColor.clear.cgColor + trackLayer.strokeColor = trackColor.cgColor + trackLayer.lineWidth = 10 + trackLayer.lineCap = .round + layer.addSublayer(trackLayer) + + progressLayer.path = circularPath.cgPath + progressLayer.fillColor = UIColor.clear.cgColor + progressLayer.strokeColor = progressColor.cgColor + progressLayer.lineWidth = 10 + progressLayer.strokeEnd = progress + progressLayer.lineCap = .round + layer.addSublayer(progressLayer) + } + + override func layoutSubviews() { + super.layoutSubviews() + trackLayer.frame = bounds + progressLayer.frame = bounds + setupLayers() + } +} + +func getTodayWeekday() -> String { + // 获取当前日期 + let currentDate = Date() + + // 获取当前日历 + let calendar = Calendar.current + + // 获取当前日期的星期几(1表示星期日,2表示星期一,以此类推) + let weekday = calendar.component(.weekday, from: currentDate) + + // 将星期几转换为中文 + let weekdays = ["日", "一", "二", "三", "四", "五", "六"] + let weekdayString = weekdays[weekday - 1] + + return "\(weekdayString)" +} + +func getImageName(for value: Int) -> String { + switch value { + case 1...15: + return "15" + case 16...25: + return "25" + case 26...45: + return "45" + case 46...65: + return "65" + case 66...85: + return "85" + case 86...99: + return "90" + case 100...10000000: + return "100" + default: + return "0" + } +} diff --git a/anniversary_Project/Tool/HealthManager.swift b/anniversary_Project/Tool/HealthManager.swift new file mode 100644 index 0000000..6c0df1f --- /dev/null +++ b/anniversary_Project/Tool/HealthManager.swift @@ -0,0 +1,44 @@ +// +// HealthManager.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/10. +// + +import Foundation +import HealthKit + +class HealthManager { + let healthStore = HKHealthStore() + + func requestAuthorization(completion: @escaping (Bool, Error?) -> Void) { + guard HKHealthStore.isHealthDataAvailable() else { + completion(false, nil) + return + } + + let waterType = HKObjectType.quantityType(forIdentifier: .dietaryWater)! + + healthStore.requestAuthorization(toShare: [waterType], read: [waterType]) { (success, error) in + completion(success, error) + } + } + + func saveWaterIntake(waterQuantity: Double, date: Date) { + guard let waterType = HKObjectType.quantityType(forIdentifier: .dietaryWater) else { + return + } + + let waterQuantityUnit = HKUnit.liter() + let waterQuantitySample = HKQuantity(unit: waterQuantityUnit, doubleValue: waterQuantity) + let waterSample = HKQuantitySample(type: waterType, quantity: waterQuantitySample, start: date, end: date) + + healthStore.save(waterSample) { (success, error) in + if success { + print("Successfully saved water intake to HealthKit") + } else if let error = error { + print("Error saving water intake to HealthKit: \(error.localizedDescription)") + } + } + } +} diff --git a/anniversary_Project/Tool/MLSliderRulerScrollView.swift b/anniversary_Project/Tool/MLSliderRulerScrollView.swift new file mode 100644 index 0000000..2bb4f39 --- /dev/null +++ b/anniversary_Project/Tool/MLSliderRulerScrollView.swift @@ -0,0 +1,158 @@ +// +// MLSliderRuler.swift +// MLSilderRulerView +// +// Created by Macro on 2018/1/25. +// Copyright © 2018年 CodeMarco. All rights reserved. +// + +import UIKit + +let DISTANCELEFTANDRIGHT: CGFloat = 8.0 // 标尺左右距离 +let DISTANCEVALUE: CGFloat = 8.0 // 每隔刻度实际长度8个点 +let DISTANCETOPANDBOTTOM: CGFloat = 5.0 // 标尺上下距离 + +class MLSliderRulerScrollView: UIScrollView { + + var maxValue: CGFloat = 2000 + var minValue: CGFloat = 0 + var rulerAverage: CGFloat = 1 + + var rulerCount: Int { + return Int(maxValue - minValue) + } + + var isShowShortSymbol = true + var isSmallModel: Bool = true + + var binary: Int = 10 + var ruleFont = UIFont.systemFont(ofSize: 12) + + var longSymbolColor = UIColor.hexSting(color: "#B6BCC7", alpha: 1) { + didSet { + longSymbol.strokeColor = longSymbolColor.cgColor + } + } + var middleSymbolColor = UIColor.hexSting(color: "#B6BCC7", alpha: 1) { + didSet { + middleSymbol.strokeColor = middleSymbolColor.cgColor + } + } + var shortSymbolColor = UIColor.hexSting(color: "#B6BCC7", alpha: 1) { + didSet { + shortSymbol.strokeColor = shortSymbolColor.cgColor + } + } + + fileprivate lazy var longSymbol: CAShapeLayer = { + let shapeLayer = CAShapeLayer() + shapeLayer.strokeColor = longSymbolColor.cgColor + shapeLayer.fillColor = UIColor.clear.cgColor + shapeLayer.lineWidth = 3 + shapeLayer.lineCap = .round + return shapeLayer + }() + + fileprivate lazy var middleSymbol: CAShapeLayer = { + let shapeLayer = CAShapeLayer() + shapeLayer.strokeColor = middleSymbolColor.cgColor + shapeLayer.fillColor = UIColor.clear.cgColor + shapeLayer.lineWidth = 3 + shapeLayer.lineCap = .round + return shapeLayer + }() + + fileprivate lazy var shortSymbol: CAShapeLayer = { + let shapeLayer = CAShapeLayer() + shapeLayer.strokeColor = shortSymbolColor.cgColor + shapeLayer.fillColor = UIColor.clear.cgColor + shapeLayer.lineWidth = 3 + shapeLayer.lineCap = .round + return shapeLayer + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setupSubviews() + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func setupSubviews() { + layer.addSublayer(shortSymbol) + layer.addSublayer(middleSymbol) + layer.addSublayer(longSymbol) + backgroundColor = UIColor.white + } + + func drawRuler() { + layer.sublayers?.forEach { (sublayer) in + if sublayer.isKind(of: CATextLayer.self) { + sublayer.removeFromSuperlayer() + } + } + + let longPathRef = CGMutablePath() + let middlePathRef = CGMutablePath() + let shortPathRef = CGMutablePath() + + for idx in 0 ... rulerCount { + let i = CGFloat(idx) + + let rule = CATextLayer() + rule.foregroundColor = UIColor.lightGray.cgColor + rule.font = ruleFont + rule.fontSize = ruleFont.pointSize + rule.contentsScale = UIScreen.main.scale + rule.string = String(format: "%.0f", (i + minValue) * rulerAverage) + + let textSize = (rule.string as! NSString).size(withAttributes: [NSAttributedString.Key.font: ruleFont]) + rule.bounds = CGRect(origin: CGPoint.zero, size: textSize) + + let xPos = DISTANCELEFTANDRIGHT + DISTANCEVALUE * i + + if idx % Int(binary) == 0 { + longPathRef.move(to: CGPoint(x: xPos, y: DISTANCETOPANDBOTTOM + textSize.height + 5)) + longPathRef.addLine(to: CGPoint(x: xPos, y: bounds.height - DISTANCETOPANDBOTTOM)) + rule.position = CGPoint(x: xPos, y: 5 + textSize.height / 2) + layer.addSublayer(rule) + + } else if idx % Int(binary / 2) == 0 { + middlePathRef.move(to: CGPoint(x: xPos, y: DISTANCETOPANDBOTTOM + textSize.height + 10)) + middlePathRef.addLine(to: CGPoint(x: xPos, y: bounds.height - DISTANCETOPANDBOTTOM)) + + } else if isShowShortSymbol { + shortPathRef.move(to: CGPoint(x: xPos, y: DISTANCETOPANDBOTTOM + textSize.height + 15)) + shortPathRef.addLine(to: CGPoint(x: xPos, y: bounds.height - DISTANCETOPANDBOTTOM)) + } + } + + longSymbol.path = longPathRef + + let longSymbolFrame = longSymbol.path?.boundingBoxOfPath ?? .zero + let longSymbolCenterY = longSymbolFrame.midY + + middleSymbol.path = middlePathRef + shortSymbol.path = shortPathRef + + middleSymbol.position.y += (longSymbolCenterY - (middlePathRef.boundingBoxOfPath.midY)) + shortSymbol.position.y += (longSymbolCenterY - (shortPathRef.boundingBoxOfPath.midY)) + + if isSmallModel { + contentInset = UIEdgeInsets(top: 0, left: bounds.width / 2 - DISTANCELEFTANDRIGHT, bottom: 0, right: bounds.width / 2 - DISTANCELEFTANDRIGHT) + contentOffset = CGPoint(x: DISTANCEVALUE * ((currentRulerValue - minValue) / rulerAverage) - bounds.width + (bounds.width / 2 + DISTANCELEFTANDRIGHT), y: 0) + } else { + contentOffset = CGPoint(x: DISTANCEVALUE * ((currentRulerValue - minValue) / rulerAverage) - bounds.width / 2.0 + DISTANCELEFTANDRIGHT, y: 0) + } + + contentSize = CGSize(width: CGFloat(rulerCount) * DISTANCEVALUE + DISTANCELEFTANDRIGHT * 2, height: bounds.height) + } + + // Computed property to get the current ruler value based on scroll position + var currentRulerValue: CGFloat { + let offsetX = contentOffset.x + bounds.size.width / 2 - DISTANCELEFTANDRIGHT + return (offsetX / DISTANCEVALUE) * rulerAverage + minValue + } +} diff --git a/anniversary_Project/Tool/MLSliderRulerView.swift b/anniversary_Project/Tool/MLSliderRulerView.swift new file mode 100644 index 0000000..5f9bded --- /dev/null +++ b/anniversary_Project/Tool/MLSliderRulerView.swift @@ -0,0 +1,105 @@ + + + +// +// MLSliderRuler.swift +// MLSilderRulerView +// +// Created by Macro on 2018/1/25. +// Copyright © 2018年 CodeMarco. All rights reserved. +// + +import UIKit + +protocol MLSliderRulerViewDelegate: AnyObject { + func sliderRulerView(ruler: UIView, rulervalue: CGFloat) +} + +class MLSliderRulerView: UIView { + + weak var delegate: MLSliderRulerViewDelegate? + + var valueLabelFont = UIFont.boldSystemFont(ofSize: 14) { + didSet { + valueLabel.font = valueLabelFont + } + } + + var rulerHeight: CGFloat = 50.0 { + didSet { + rulerScrollView.frame = CGRect(x: 0, y: frame.size.height - rulerHeight, width: frame.size.width, height: rulerHeight) + rulerScrollView.drawRuler() + } + } + + public var rulerScrollView = MLSliderRulerScrollView() + public let markLine = CALayer() + public let valueLabel = UILabel() + public let valueImageV = UIImageView() + public let TriangleimagV = UIImageView() + + +// var rulerValue: CGFloat { +// return rulerScrollView.rulerValue +// } + + override init(frame: CGRect) { + super.init(frame: frame) + rulerScrollView.frame = CGRect(x: 0, y: frame.size.height - rulerHeight, width: frame.size.width, height: rulerHeight) + rulerScrollView.showsHorizontalScrollIndicator = false + rulerScrollView.delegate = self + addSubview(rulerScrollView) + + + valueImageV.image = UIImage(named: "valueImagV") + valueImageV.frame = CGRect(x: center.x - 65, y: rulerScrollView.frame.minY - 60, width: 130, height: 62) + addSubview(valueImageV) + + + TriangleimagV.image = UIImage(named: "Triangle") + TriangleimagV.frame = CGRect(x: center.x - 11, y: rulerScrollView.frame.minY + 50, width: 22, height: 12) + addSubview(TriangleimagV) + + valueLabel.font = UIFont.boldSystemFont(ofSize: 24) + valueLabel.textAlignment = .center + valueLabel.textColor = UIColor.hexSting(color: "#62BFFF", alpha: 1) + valueLabel.frame = CGRect(x: 0, y: rulerScrollView.frame.minY - 42, width: bounds.width, height: 20) + valueLabel.text = "160 ml" + addSubview(valueLabel) + + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + rulerScrollView.drawRuler() + } + + func animationRebound() { + // Method intentionally left empty to remove snapping effect + } +} + +extension MLSliderRulerView: UIScrollViewDelegate { + + func scrollViewDidScroll(_ scrollView: UIScrollView) { + + let offSetX = scrollView.contentOffset.x + bounds.size.width / 2 - DISTANCELEFTANDRIGHT + let ruleValue = (offSetX / DISTANCEVALUE) * rulerScrollView.rulerAverage + let valuetext = "\(round(ruleValue) + rulerScrollView.minValue) ml" + if valuetext != valueLabel.text { + valueLabel.text = valuetext + } + } + + func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { + // animationRebound() removed to prevent snapping + } + + func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { + // animationRebound() removed to prevent snapping + } +} diff --git a/anniversary_Project/Tool/NetworkManager.swift b/anniversary_Project/Tool/NetworkManager.swift new file mode 100644 index 0000000..d4704ba --- /dev/null +++ b/anniversary_Project/Tool/NetworkManager.swift @@ -0,0 +1,40 @@ +// +// NetworkManager.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/11. +// + +import Foundation + +import Alamofire + +class NetworkManager { + static let shared = NetworkManager() + + private init() {} + + /// 封装的POST请求 + /// - Parameters: + /// - url: 请求的URL字符串 + /// - parameters: 请求参数 + /// - headers: 请求头 + /// - completion: 请求完成的回调 + func postRequest(url: String, parameters: [String: Any]?, headers: HTTPHeaders?, completion: @escaping (Result) -> Void) { + AF.request(url, + method: .post, + parameters: parameters, + encoding: JSONEncoding.default, + headers: headers) + .validate() + .responseJSON { response in + switch response.result { + case .success(let data): + completion(.success(data)) + case .failure(let error): + completion(.failure(error)) + } + } + } +} + diff --git a/anniversary_Project/Tool/NotificationCenter.swift b/anniversary_Project/Tool/NotificationCenter.swift new file mode 100644 index 0000000..8b022fe --- /dev/null +++ b/anniversary_Project/Tool/NotificationCenter.swift @@ -0,0 +1,33 @@ +// +// NotificationCenter.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/8. +// + +import Foundation +import UserNotifications + + // 请求通知权限 + func scheduleNotification(at hour: Int, minute: Int, identifier: String, title: String, body: String) { + let content = UNMutableNotificationContent() + content.title = title + content.body = body + content.sound = UNNotificationSound.default + + var dateComponents = DateComponents() + dateComponents.hour = hour + dateComponents.minute = minute + + let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true) + + let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger) + + UserNotifications.UNUserNotificationCenter.current().add(request) { error in + if let error = error { + print("Error adding notification: \(error.localizedDescription)") + } + } + } + + diff --git a/anniversary_Project/Tool/WCDB.swift b/anniversary_Project/Tool/WCDB.swift new file mode 100644 index 0000000..8f78159 --- /dev/null +++ b/anniversary_Project/Tool/WCDB.swift @@ -0,0 +1,136 @@ +// +// WCDB.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/11. +// + +import UIKit +import Foundation +import WCDBSwift +/* + 0 + 1、模型 绑定 + 2、 操作数据库 增 删 改 查 + 3、 事务 + 4、 高级功能 加密与配置 + 5、 链式调用 遍历查询 联表查询 核心层接口 + 6、 监控与错误处理 自定义字段映射类型 全文搜索 损坏、备份、修复 + */ + +///数据库路径 +fileprivate struct WCDataBasePath{ + let dbPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! + "/PrWCDB/Test.db" +} + +class PrWCDBBaseManager : NSObject{ + + static let shared = PrWCDBBaseManager() + + let dbPath = URL(fileURLWithPath: WCDataBasePath().dbPath) + + var dataBase : Database? + + private override init() { + super.init() + + dataBase = creteDb() + } + + ///创建数据库 + private func creteDb() -> Database { + return Database(at: dbPath) + } + ///创建数据库表 + func createTable(table: String, of type:T.Type){ + do { + try dataBase?.create(table: table, of: type) + } catch let error { + debugPrint("create table error \(error.localizedDescription)") + } + } + + ///插入 + ///propertyConvertibleList 字段可以指定插入的字段,其它未指定的用默认值代替 + ///插入是最常用且比较容易操作卡顿的操作,因此 WCDB Swift 对其进行了特殊处理。 当插入的对象数大于 1 时,WCDB Swift 会自动开启事务,进行批量化地插入,以获得更新的性能。 + func insertToDb(objects: [T],intoTable table : String) { + do { + try dataBase?.insertOrReplace(objects, intoTable: table) + } catch let error { + debugPrint("insert table error \(error.localizedDescription)") + + } + } + + + /// 修改 propertys 属性 object对象 condition条件 + func updateToDb(table: String, on propertys:[PropertyConvertible],with object:T,where condition: Condition? = nil){ + do { + try dataBase?.update(table: table, on: propertys, with: object, where: condition) + } catch let error { + debugPrint("update table error \(error.localizedDescription)") + } + + } + + + /// 删除操作,按条件删除 + /// - Parameters: + /// - fromTable: 表 + /// - condition: 条件 + func deleteFromDb(fromTable: String, where condition: Condition? = nil){ + do { + try dataBase?.delete(fromTable: fromTable, where:condition) + } catch let error { + debugPrint("delete error \(error.localizedDescription)") + } + } + + + + /// 查询表数据 + /// - Returns: 【T】 + /// WINQ的接口包括但不限于: + /* + 一元操作符:+、-、!等 + + 二元操作符:||、&&、+、-、*、/、|、&、<<、>>、<、<=、==、!=、>、>=等 + + 范围比较:IN、BETWEEN等 + + 字符串匹配:LIKE、GLOB、MATCH、REGEXP等 + + 聚合函数:AVG、COUNT、MAX、MIN、SUM等 + + */ + func qureyFromDb(fromTable: String, cls cName: T.Type, where condition: Condition? = nil, orderBy orderList:[OrderBy]? = nil) -> [T]? { + do { + let allObjects: [T] = try (dataBase?.getObjects(fromTable: fromTable, where:condition, orderBy:orderList))! + debugPrint("\(allObjects)"); + return allObjects + } catch let error { + debugPrint("no data find \(error.localizedDescription)") + } + return nil + } + + ///删除数据表 + func dropTable(table : String) { + do { + try dataBase?.drop(table: table) + } catch let error { + debugPrint("drop table error \(error.localizedDescription)") + } + } + ///删除所有与该数据库相关的文件 + func removeDbFile(){ + do { + try dataBase?.close(onClosed: { + try self.dataBase?.removeFiles() + }) + } catch let error { + debugPrint("not close db \(error.localizedDescription)") + } + } + +} diff --git a/anniversary_Project/Tool/ageView.swift b/anniversary_Project/Tool/ageView.swift new file mode 100644 index 0000000..b99f726 --- /dev/null +++ b/anniversary_Project/Tool/ageView.swift @@ -0,0 +1,107 @@ +// +// ageView.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/9. + +import UIKit + +class AgePickerView: UIView { + + private let pickerView = UIPickerView() + private let ageRange = Array(0...100) + private let leftImageView = UIImageView(image: UIImage(named: "leftImage")) + private let rightImageView = UIImageView(image: UIImage(named: "rightImage")) + + var selectedAge: Int = 0 { + didSet { + pickerView.selectRow(selectedAge, inComponent: 0, animated: true) + } + } + + var onAgeSelected: ((Int) -> Void)? + + override init(frame: CGRect) { + super.init(frame: frame) + setupPickerView() + setupImageViews() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupPickerView() + setupImageViews() + } + + private func setupPickerView() { + pickerView.translatesAutoresizingMaskIntoConstraints = false + pickerView.delegate = self + pickerView.dataSource = self + addSubview(pickerView) + + NSLayoutConstraint.activate([ + pickerView.leadingAnchor.constraint(equalTo: leadingAnchor), + pickerView.trailingAnchor.constraint(equalTo: trailingAnchor), + pickerView.topAnchor.constraint(equalTo: topAnchor), + pickerView.bottomAnchor.constraint(equalTo: bottomAnchor) + ]) + } + + private func setupImageViews() { + leftImageView.translatesAutoresizingMaskIntoConstraints = false + rightImageView.translatesAutoresizingMaskIntoConstraints = false + + addSubview(leftImageView) + addSubview(rightImageView) + + NSLayoutConstraint.activate([ + leftImageView.centerYAnchor.constraint(equalTo: pickerView.centerYAnchor), + leftImageView.trailingAnchor.constraint(equalTo: pickerView.centerXAnchor, constant: -60), + leftImageView.widthAnchor.constraint(equalToConstant: 18), + leftImageView.heightAnchor.constraint(equalToConstant: 18), + + rightImageView.centerYAnchor.constraint(equalTo: pickerView.centerYAnchor), + rightImageView.leadingAnchor.constraint(equalTo: pickerView.centerXAnchor, constant: 60), + rightImageView.widthAnchor.constraint(equalToConstant: 18), + rightImageView.heightAnchor.constraint(equalToConstant: 18) + ]) + } +} + +extension AgePickerView: UIPickerViewDelegate, UIPickerViewDataSource { + func numberOfComponents(in pickerView: UIPickerView) -> Int { + return 1 + } + + func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { + return ageRange.count + } + + func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat { + return 60 + } + + func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView { + let label = UILabel() + label.text = "\(ageRange[row])" + label.textAlignment = .center + + if row == pickerView.selectedRow(inComponent: 0) { + label.font = UIFont.boldSystemFont(ofSize: 36) + label.textColor = .black + } else { + label.font = UIFont.systemFont(ofSize: 36) + label.textColor = .gray + } + + return label + } + + func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { + selectedAge = row + pickerView.reloadAllComponents() + onAgeSelected?(selectedAge) + } +} + + diff --git a/anniversary_Project/Tool/color.swift b/anniversary_Project/Tool/color.swift new file mode 100644 index 0000000..ef75d1b --- /dev/null +++ b/anniversary_Project/Tool/color.swift @@ -0,0 +1,61 @@ +// +// color.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/15. +// + +import Foundation +import UIKit + +extension UIColor{ + + + class func hexSting(color:String,alpha:CGFloat)->UIColor{ + + var cString:String = color.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased() + if cString.count < 6{ + return UIColor.white + } + if cString.hasPrefix("OX") { + let temstr:NSString = cString as NSString + cString = temstr.substring(from: 2)as String + } + if cString.hasPrefix("#") { + let temstr:NSString = cString as NSString + cString = temstr.substring(from: 1) as String + } + if cString.count != 6{ + return UIColor.white + } + var range:NSRange = NSMakeRange(0, 2) + let temstr2:NSString = cString as NSString + let rString = temstr2.substring(with: range)as String + range = NSMakeRange(2, 2) + let gString = temstr2.substring(with: range)as String + range = NSMakeRange(4, 2) + let bString = temstr2.substring(with: range)as String + var r:UInt32 = 0,g:UInt32 = 0,b:UInt32 = 0 + Scanner(string: rString).scanHexInt32(&r) + Scanner(string: gString).scanHexInt32(&g) + Scanner(string: bString).scanHexInt32(&b) + + return self.init(red: CGFloat(r)/255.0, green: CGFloat(g)/255.0, blue: CGFloat(b)/255.0, alpha: alpha) + } + class func colorWithHexString(color:String)->UIColor{ + return hexSting(color: color, alpha: 1.0) + } +} + +func isMidnight() -> Bool { + let calendar = Calendar.current + let now = Date() + + let components = calendar.dateComponents([.hour, .minute], from: now) + + if let hour = components.hour, let minute = components.minute { + return hour == 0 && minute == 0 + } + + return false +} diff --git a/anniversary_Project/Tool/ip+idfa+ADID.swift b/anniversary_Project/Tool/ip+idfa+ADID.swift new file mode 100644 index 0000000..0256cb8 --- /dev/null +++ b/anniversary_Project/Tool/ip+idfa+ADID.swift @@ -0,0 +1,179 @@ +// +// ip+idfa.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/11. +// + +import Foundation +import UIKit +import AdSupport +import AppTrackingTransparency +import SystemConfiguration +class StartManager:NSObject{ + static var shared = StartManager() + + ///本地ip + var localIP:String? + ///远程ip + var publicIP:String? + ///设备ID + var devicID:String? + ///IDFA + var idfaid:String? + ///货架号 + var shelfNumber:String? + ///包名 + var packageName:String = "com.wallpapaer.hd.live.app" + ///广告加载是否成功 + var succeed:Bool = false + ///加载时间 + var loadTime:Int? + ///广告平台 + var adPlatform:String? + ///国家代码 + var countryCode:String? + ///广告Id + var adId:String? + ///平台广告响应时间 + var platformResponseTime:TimeInterval? + ///获取IP响应时间 + var getIpResponseTime:Float? + ///广告单价 + var ecpm:Float? + ///广告售卖平台1 + var dsp:String? + ///广告售卖平台2 + var network:String? + ///superHero + var superHero:Bool = false + + + + private override init() {} + + +} +let strings = ["bee9f7039e56cc7a", "8fccdfa964b52e26", "7baed02646413e44","2e66a808a4251e3a"] + +func getRandomString() -> String? { + return strings.randomElement() +} + +///本地ip +func getLocalIPAddress() -> String? { + var address: String? + var ifaddr: UnsafeMutablePointer? = nil + + if getifaddrs(&ifaddr) == 0 { + var ptr = ifaddr + while ptr != nil { + let interface = ptr?.pointee + let addrFamily = interface?.ifa_addr.pointee.sa_family + + if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) { + if let name = interface?.ifa_name, String(cString: name) == "en0" { + var addr = interface?.ifa_addr.pointee + var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST)) + if getnameinfo(&addr!, socklen_t((interface?.ifa_addr.pointee.sa_len)!), + &hostname, socklen_t(hostname.count), + nil, socklen_t(0), NI_NUMERICHOST) == 0 { + address = String(cString: hostname) + } + } + } + ptr = interface?.ifa_next + } + freeifaddrs(ifaddr) + } + return address +} +///远程ip +func getPublicIPAddress(completion: @escaping (String?) -> Void) { + let url = URL(string: "https://api.ipify.org?format=json")! + + let task = URLSession.shared.dataTask(with: url) { data, response, error in + guard let data = data, error == nil else { + print("Error fetching public IP address: \(error?.localizedDescription ?? "Unknown error")") + completion(nil) + return + } + + if let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any], + let ip = json["ip"] as? String { + completion(ip) + } else { + completion(nil) + } + } + + task.resume() +} + + +func requestTrackingAuthorization(completion: @escaping (String?) -> Void) { + if #available(iOS 14, *) { + var attemptsLeft = 3 + + func requestAuth() { + ATTrackingManager.requestTrackingAuthorization { status in + switch status { + case .authorized: + let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString + print("Authorized: IDFA = \(idfa)") + completion(idfa) + case .denied, .restricted: + print("Denied or Restricted") + completion(nil) + case .notDetermined: + print("Not Determined") + attemptsLeft -= 1 + if attemptsLeft > 0 { + requestAuth() // 继续请求直到达到最大尝试次数 + } else { + print("Reached maximum number of attempts") + completion(nil) + } + @unknown default: + print("Unknown status") + completion(nil) + } + } + } + + requestAuth() // 第一次请求 + } else { + if ASIdentifierManager.shared().isAdvertisingTrackingEnabled { + let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString + print("Tracking enabled: IDFA = \(idfa)") + completion(idfa) + } else { + print("Tracking not enabled") + completion(nil) + } + } +} + + + +func requestIDFA(completion: @escaping (String?) -> Void) { + if #available(iOS 14, *) { + ATTrackingManager.requestTrackingAuthorization { status in + switch status { + case .authorized: + let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString + completion(idfa) + default: + completion(nil) + } + } + } else { + if ASIdentifierManager.shared().isAdvertisingTrackingEnabled { + let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString + completion(idfa) + } else { + completion(nil) + } + } +} + diff --git a/anniversary_Project/Tool/weightView.swift b/anniversary_Project/Tool/weightView.swift new file mode 100644 index 0000000..1f6b207 --- /dev/null +++ b/anniversary_Project/Tool/weightView.swift @@ -0,0 +1,506 @@ +// +// weightView.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/9. +// + +import UIKit + +//let DISTANCELEFTANDRIGHT: CGFloat = 8.0 // 标尺左右距离 +//let DISTANCEVALUE: CGFloat = 8.0 // 每隔刻度实际长度8个点 +//let DISTANCETOPANDBOTTOM: CGFloat = 5.0 // 标尺上下距离 + +//class weightViewScrollView: UIScrollView { +// +// var maxValue: CGFloat = 500 +// var minValue: CGFloat = 0 +// var rulerAverage: CGFloat = 1 +// +// var rulerCount: Int { +// return Int(maxValue - minValue) +// } +// +// var isShowShortSymbol = true +// var isSmallModel: Bool = true +// +// var binary: Int = 10 +// var ruleFont = UIFont.systemFont(ofSize: 12) +// +// var longSymbolColor = UIColor.hexSting(color: "#B6BCC7", alpha: 1) { +// didSet { +// longSymbol.strokeColor = longSymbolColor.cgColor +// } +// } +// var middleSymbolColor = UIColor.hexSting(color: "#B6BCC7", alpha: 1) { +// didSet { +// middleSymbol.strokeColor = middleSymbolColor.cgColor +// } +// } +// var shortSymbolColor = UIColor.hexSting(color: "#B6BCC7", alpha: 1) { +// didSet { +// shortSymbol.strokeColor = shortSymbolColor.cgColor +// } +// } +// +// fileprivate lazy var longSymbol: CAShapeLayer = { +// let shapeLayer = CAShapeLayer() +// shapeLayer.strokeColor = longSymbolColor.cgColor +// shapeLayer.fillColor = UIColor.clear.cgColor +// shapeLayer.lineWidth = 3 +// shapeLayer.lineCap = .round +// return shapeLayer +// }() +// +// fileprivate lazy var middleSymbol: CAShapeLayer = { +// let shapeLayer = CAShapeLayer() +// shapeLayer.strokeColor = middleSymbolColor.cgColor +// shapeLayer.fillColor = UIColor.clear.cgColor +// shapeLayer.lineWidth = 3 +// shapeLayer.lineCap = .round +// return shapeLayer +// }() +// +// fileprivate lazy var shortSymbol: CAShapeLayer = { +// let shapeLayer = CAShapeLayer() +// shapeLayer.strokeColor = shortSymbolColor.cgColor +// shapeLayer.fillColor = UIColor.clear.cgColor +// shapeLayer.lineWidth = 3 +// shapeLayer.lineCap = .round +// return shapeLayer +// }() +// +// override init(frame: CGRect) { +// super.init(frame: frame) +// setupSubviews() +// } +// +// required init?(coder aDecoder: NSCoder) { +// fatalError("init(coder:) has not been implemented") +// } +// +// func setupSubviews() { +// layer.addSublayer(shortSymbol) +// layer.addSublayer(middleSymbol) +// layer.addSublayer(longSymbol) +// backgroundColor = UIColor.white +// } +// +// func drawRuler() { +// layer.sublayers?.forEach { (sublayer) in +// if sublayer.isKind(of: CATextLayer.self) { +// sublayer.removeFromSuperlayer() +// } +// } +// +// let longPathRef = CGMutablePath() +// let middlePathRef = CGMutablePath() +// let shortPathRef = CGMutablePath() +// +// for idx in 0 ... rulerCount { +// let i = CGFloat(idx) +// +// let rule = CATextLayer() +// rule.foregroundColor = UIColor.lightGray.cgColor +// rule.font = ruleFont +// rule.fontSize = ruleFont.pointSize +// rule.contentsScale = UIScreen.main.scale +// rule.string = String(format: "%.0f", (i + minValue) * rulerAverage) +// +// let textSize = (rule.string as! NSString).size(withAttributes: [NSAttributedString.Key.font: ruleFont]) +// rule.bounds = CGRect(origin: CGPoint.zero, size: textSize) +// +// let xPos = DISTANCELEFTANDRIGHT + DISTANCEVALUE * i +// +// if idx % Int(binary) == 0 { +// longPathRef.move(to: CGPoint(x: xPos, y: DISTANCETOPANDBOTTOM + textSize.height + 5)) +// longPathRef.addLine(to: CGPoint(x: xPos, y: bounds.height - DISTANCETOPANDBOTTOM)) +// rule.position = CGPoint(x: xPos, y: 5 + textSize.height / 2) +// layer.addSublayer(rule) +// +// } else if idx % Int(binary / 2) == 0 { +// middlePathRef.move(to: CGPoint(x: xPos, y: DISTANCETOPANDBOTTOM + textSize.height + 10)) +// middlePathRef.addLine(to: CGPoint(x: xPos, y: bounds.height - DISTANCETOPANDBOTTOM)) +// +// } else if isShowShortSymbol { +// shortPathRef.move(to: CGPoint(x: xPos, y: DISTANCETOPANDBOTTOM + textSize.height + 15)) +// shortPathRef.addLine(to: CGPoint(x: xPos, y: bounds.height - DISTANCETOPANDBOTTOM)) +// } +// } +// +// longSymbol.path = longPathRef +// +// let longSymbolFrame = longSymbol.path?.boundingBoxOfPath ?? .zero +// let longSymbolCenterY = longSymbolFrame.midY +// +// middleSymbol.path = middlePathRef +// shortSymbol.path = shortPathRef +// +// middleSymbol.position.y += (longSymbolCenterY - (middlePathRef.boundingBoxOfPath.midY)) +// shortSymbol.position.y += (longSymbolCenterY - (shortPathRef.boundingBoxOfPath.midY)) +// +// if isSmallModel { +// contentInset = UIEdgeInsets(top: 0, left: bounds.width / 2 - DISTANCELEFTANDRIGHT, bottom: 0, right: bounds.width / 2 - DISTANCELEFTANDRIGHT) +// contentOffset = CGPoint(x: DISTANCEVALUE * ((currentRulerValue - minValue) / rulerAverage) - bounds.width + (bounds.width / 2 + DISTANCELEFTANDRIGHT), y: 0) +// } else { +// contentOffset = CGPoint(x: DISTANCEVALUE * ((currentRulerValue - minValue) / rulerAverage) - bounds.width / 2.0 + DISTANCELEFTANDRIGHT, y: 0) +// } +// +// contentSize = CGSize(width: CGFloat(rulerCount) * DISTANCEVALUE + DISTANCELEFTANDRIGHT * 2, height: bounds.height) +// } +// +// // Computed property to get the current ruler value based on scroll position +// var currentRulerValue: CGFloat { +// let offsetX = contentOffset.x + bounds.size.width / 2 - DISTANCELEFTANDRIGHT +// return (offsetX / DISTANCEVALUE) * rulerAverage + minValue +// } +//} +// +//protocol weightViewDelegate: AnyObject { +// func sliderRulerView(ruler: UIView, rulervalue: CGFloat) +// +//} +// +//class weightRulerView: UIView { +// +// weak var delegate: weightViewDelegate? +// +// var valueLabelFont = UIFont.boldSystemFont(ofSize: 14) { +// didSet { +// valueLabel.font = valueLabelFont +// } +// } +// +// var rulerHeight: CGFloat = 50.0 { +// didSet { +// rulerScrollView.frame = CGRect(x: 0, y: frame.size.height - rulerHeight, width: frame.size.width, height: rulerHeight) +// rulerScrollView.drawRuler() +// } +// } +// +// public var rulerScrollView = weightViewScrollView() +// public let markLine = CALayer() +// public let valueLabel = UILabel() +// public let valueImageV = UIImageView() +// public let TriangleimagV = UIImageView() +// public let TriangtopleimagV = UIImageView() +// +//// var rulerValue: CGFloat { +//// return rulerScrollView.rulerValue +//// } +// +// override init(frame: CGRect) { +// super.init(frame: frame) +// rulerScrollView.frame = CGRect(x: 0, y: frame.size.height - rulerHeight, width: frame.size.width, height: rulerHeight) +// rulerScrollView.showsHorizontalScrollIndicator = false +// rulerScrollView.delegate = self +// addSubview(rulerScrollView) +// +// +// valueImageV.image = UIImage(named: "bgkg") +// valueImageV.frame = CGRect(x: center.x - 119.5, y: rulerScrollView.frame.minY - 55, width: 239, height: 46) +// addSubview(valueImageV) +// +// +// TriangleimagV.image = UIImage(named: "buttonTriangle") +// TriangleimagV.frame = CGRect(x: center.x - 11, y: rulerScrollView.frame.minY + 55, width: 22, height: 12) +// addSubview(TriangleimagV) +// +// TriangtopleimagV.image = UIImage(named: "topTriangle") +// TriangtopleimagV.frame = CGRect(x: center.x - 11, y: rulerScrollView.frame.maxY - 55, width: 22, height: 12) +// addSubview(TriangtopleimagV) +// +// valueLabel.font = UIFont.boldSystemFont(ofSize: 24) +// valueLabel.textAlignment = .center +// valueLabel.textColor = UIColor.hexSting(color: "#62BFFF", alpha: 1) +// valueLabel.frame = CGRect(x: 0, y: rulerScrollView.frame.minY - 44, width: bounds.width, height: 25) +// valueLabel.text = "160 kg" +// addSubview(valueLabel) +// +// } +// +// required init?(coder aDecoder: NSCoder) { +// fatalError("init(coder:) has not been implemented") +// } +// +// override func layoutSubviews() { +// super.layoutSubviews() +// rulerScrollView.drawRuler() +// } +// +// func animationRebound() { +// // Method intentionally left empty to remove snapping effect +// } +//} +// +//extension weightRulerView: UIScrollViewDelegate { +// +// func scrollViewDidScroll(_ scrollView: UIScrollView) { +// +// let offSetX = scrollView.contentOffset.x + bounds.size.width / 2 - DISTANCELEFTANDRIGHT +// let ruleValue = (offSetX / DISTANCEVALUE) * rulerScrollView.rulerAverage +// let valuetext = "\(round(ruleValue) + rulerScrollView.minValue) kg" +// if valuetext != valueLabel.text { +// valueLabel.text = valuetext +// +// } +// } +// +// +// func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { +// // animationRebound() removed to prevent snapping +// } +// +// func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { +// // animationRebound() removed to prevent snapping +// } +//} + +import UIKit + +class weightViewScrollView: UIScrollView { + +// var onweightSelected: ((Int) -> Void)? + var maxValue: CGFloat = 500 + var minValue: CGFloat = 0 + var rulerAverage: CGFloat = 1 + + var rulerCount: Int { + return Int(maxValue - minValue) + } + + var isShowShortSymbol = true + var isSmallModel: Bool = true + + var binary: Int = 10 + var ruleFont = UIFont.systemFont(ofSize: 12) + + var longSymbolColor = UIColor.hexSting(color: "#B6BCC7", alpha: 1) { + didSet { + longSymbol.strokeColor = longSymbolColor.cgColor + } + } + var middleSymbolColor = UIColor.hexSting(color: "#B6BCC7", alpha: 1) { + didSet { + middleSymbol.strokeColor = middleSymbolColor.cgColor + } + } + var shortSymbolColor = UIColor.hexSting(color: "#B6BCC7", alpha: 1) { + didSet { + shortSymbol.strokeColor = shortSymbolColor.cgColor + } + } + + fileprivate lazy var longSymbol: CAShapeLayer = { + let shapeLayer = CAShapeLayer() + shapeLayer.strokeColor = longSymbolColor.cgColor + shapeLayer.fillColor = UIColor.clear.cgColor + shapeLayer.lineWidth = 3 + shapeLayer.lineCap = .round + return shapeLayer + }() + + fileprivate lazy var middleSymbol: CAShapeLayer = { + let shapeLayer = CAShapeLayer() + shapeLayer.strokeColor = middleSymbolColor.cgColor + shapeLayer.fillColor = UIColor.clear.cgColor + shapeLayer.lineWidth = 3 + shapeLayer.lineCap = .round + return shapeLayer + }() + + fileprivate lazy var shortSymbol: CAShapeLayer = { + let shapeLayer = CAShapeLayer() + shapeLayer.strokeColor = shortSymbolColor.cgColor + shapeLayer.fillColor = UIColor.clear.cgColor + shapeLayer.lineWidth = 3 + shapeLayer.lineCap = .round + return shapeLayer + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setupSubviews() + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func setupSubviews() { + layer.addSublayer(shortSymbol) + layer.addSublayer(middleSymbol) + layer.addSublayer(longSymbol) + backgroundColor = UIColor.white + } + + func drawRuler() { + layer.sublayers?.forEach { (sublayer) in + if sublayer.isKind(of: CATextLayer.self) { + sublayer.removeFromSuperlayer() + } + } + + let longPathRef = CGMutablePath() + let middlePathRef = CGMutablePath() + let shortPathRef = CGMutablePath() + + for idx in 0 ... rulerCount { + let i = CGFloat(idx) + + let rule = CATextLayer() + rule.foregroundColor = UIColor.lightGray.cgColor + rule.font = ruleFont + rule.fontSize = ruleFont.pointSize + rule.contentsScale = UIScreen.main.scale + rule.string = String(format: "%.0f", (i + minValue) * rulerAverage) + + let textSize = (rule.string as! NSString).size(withAttributes: [NSAttributedString.Key.font: ruleFont]) + rule.bounds = CGRect(origin: CGPoint.zero, size: textSize) + + let xPos = DISTANCELEFTANDRIGHT + DISTANCEVALUE * i + + if idx % Int(binary) == 0 { + longPathRef.move(to: CGPoint(x: xPos, y: DISTANCETOPANDBOTTOM + textSize.height + 5)) + longPathRef.addLine(to: CGPoint(x: xPos, y: bounds.height - DISTANCETOPANDBOTTOM)) + rule.position = CGPoint(x: xPos, y: 5 + textSize.height / 2) + layer.addSublayer(rule) + + } else if idx % Int(binary / 2) == 0 { + middlePathRef.move(to: CGPoint(x: xPos, y: DISTANCETOPANDBOTTOM + textSize.height + 10)) + middlePathRef.addLine(to: CGPoint(x: xPos, y: bounds.height - DISTANCETOPANDBOTTOM)) + + } else if isShowShortSymbol { + shortPathRef.move(to: CGPoint(x: xPos, y: DISTANCETOPANDBOTTOM + textSize.height + 15)) + shortPathRef.addLine(to: CGPoint(x: xPos, y: bounds.height - DISTANCETOPANDBOTTOM)) + } + } + + longSymbol.path = longPathRef + + let longSymbolFrame = longSymbol.path?.boundingBoxOfPath ?? .zero + let longSymbolCenterY = longSymbolFrame.midY + + middleSymbol.path = middlePathRef + shortSymbol.path = shortPathRef + + middleSymbol.position.y += (longSymbolCenterY - (middlePathRef.boundingBoxOfPath.midY)) + shortSymbol.position.y += (longSymbolCenterY - (shortPathRef.boundingBoxOfPath.midY)) + + if isSmallModel { + contentInset = UIEdgeInsets(top: 0, left: bounds.width / 2 - DISTANCELEFTANDRIGHT, bottom: 0, right: bounds.width / 2 - DISTANCELEFTANDRIGHT) + contentOffset = CGPoint(x: DISTANCEVALUE * ((currentRulerValue - minValue) / rulerAverage) - bounds.width + (bounds.width / 2 + DISTANCELEFTANDRIGHT), y: 0) + } else { + contentOffset = CGPoint(x: DISTANCEVALUE * ((currentRulerValue - minValue) / rulerAverage) - bounds.width / 2.0 + DISTANCELEFTANDRIGHT, y: 0) + } + + contentSize = CGSize(width: CGFloat(rulerCount) * DISTANCEVALUE + DISTANCELEFTANDRIGHT * 2, height: bounds.height) + } + + var currentRulerValue: CGFloat { + let offsetX = contentOffset.x + bounds.size.width / 2 - DISTANCELEFTANDRIGHT +// onweightSelected?(Int((offsetX / DISTANCEVALUE) * rulerAverage + minValue)) + return (offsetX / DISTANCEVALUE) * rulerAverage + minValue + + } +} + +protocol weightViewDelegate: AnyObject { + func sliderRulerView(ruler: weightRulerView, rulervalue: CGFloat) +} + +class weightRulerView: UIView { +// var onweightSelected: ((Int) -> Void)? + weak var delegate: weightViewDelegate? + + var valueLabelFont = UIFont.boldSystemFont(ofSize: 14) { + didSet { + valueLabel.font = valueLabelFont + } + } + + var rulerHeight: CGFloat = 50.0 { + didSet { + rulerScrollView.frame = CGRect(x: 0, y: frame.size.height - rulerHeight, width: frame.size.width, height: rulerHeight) + rulerScrollView.drawRuler() + } + } + + public var rulerScrollView = weightViewScrollView() + public let markLine = CALayer() + public let valueLabel = UILabel() + public let valueImageV = UIImageView() + public let TriangleimagV = UIImageView() + public let TriangtopleimagV = UIImageView() + + override init(frame: CGRect) { + super.init(frame: frame) + rulerScrollView.frame = CGRect(x: 0, y: frame.size.height - rulerHeight, width: frame.size.width, height: rulerHeight) + rulerScrollView.showsHorizontalScrollIndicator = false + rulerScrollView.delegate = self + addSubview(rulerScrollView) + + valueImageV.image = UIImage(named: "bgkg") + valueImageV.frame = CGRect(x: center.x - 119.5, y: rulerScrollView.frame.minY - 55, width: 239, height: 46) + addSubview(valueImageV) + + TriangleimagV.image = UIImage(named: "buttonTriangle") + TriangleimagV.frame = CGRect(x: center.x - 11, y: rulerScrollView.frame.minY + 55, width: 22, height: 12) + addSubview(TriangleimagV) + + TriangtopleimagV.image = UIImage(named: "topTriangle") + TriangtopleimagV.frame = CGRect(x: center.x - 11, y: rulerScrollView.frame.maxY - 55, width: 22, height: 12) + addSubview(TriangtopleimagV) + + valueLabel.font = UIFont.boldSystemFont(ofSize: 24) + valueLabel.textAlignment = .center + valueLabel.textColor = UIColor.hexSting(color: "#62BFFF", alpha: 1) + valueLabel.frame = CGRect(x: 0, y: rulerScrollView.frame.minY - 44, width: bounds.width, height: 25) + valueLabel.text = "160 kg" + addSubview(valueLabel) + let defaults = UserDefaults.standard + let weightint = Int(valueLabel.text!) + defaults.set(weightint, forKey: "weight") + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + rulerScrollView.drawRuler() + } + + func animationRebound() { + // Method intentionally left empty to remove snapping effect + } +} + +extension weightRulerView: UIScrollViewDelegate { + func scrollViewDidScroll(_ scrollView: UIScrollView) { + print("ScrollView did scroll") + let offSetX = scrollView.contentOffset.x + bounds.size.width / 2 - DISTANCELEFTANDRIGHT + let ruleValue = (offSetX / DISTANCEVALUE) * rulerScrollView.rulerAverage + let valueText = "\(round(ruleValue) + rulerScrollView.minValue) kg" + + if valueText != valueLabel.text { + valueLabel.text = valueText + delegate?.sliderRulerView(ruler: self, rulervalue: ruleValue + rulerScrollView.minValue) + } +// onweightSelected?(Int(valueText) ?? 0) + let defaults = UserDefaults.standard + let currentRulerValue = rulerScrollView.currentRulerValue + print("----\(currentRulerValue)") + let weightint = Int(currentRulerValue) + defaults.set(weightint, forKey: "weight") + } + + func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { + // animationRebound() removed to prevent snapping + } + + func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { + // animationRebound() removed to prevent snapping + } +} diff --git a/anniversary_Project/ViewController.swift b/anniversary_Project/ViewController.swift new file mode 100644 index 0000000..cbd3b56 --- /dev/null +++ b/anniversary_Project/ViewController.swift @@ -0,0 +1,19 @@ +// +// ViewController.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/4/11. +// + +import UIKit + +class ViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + } + + +} + diff --git a/anniversary_Project/anniversary_Project.entitlements b/anniversary_Project/anniversary_Project.entitlements new file mode 100644 index 0000000..dab226c --- /dev/null +++ b/anniversary_Project/anniversary_Project.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.developer.healthkit + + com.apple.developer.healthkit.access + + com.apple.developer.healthkit.background-delivery + + + diff --git a/anniversary_Project/header/AV_header.h b/anniversary_Project/header/AV_header.h new file mode 100644 index 0000000..08c09e5 --- /dev/null +++ b/anniversary_Project/header/AV_header.h @@ -0,0 +1,13 @@ +// +// AV_header.h +// anniversary_Project +// +// Created by 忆海16 on 2024/4/15. +// + +#ifndef AV_header_h +#define AV_header_h + +#import + +#endif /* AV_header_h */ diff --git a/anniversary_ProjectTests/anniversary_ProjectTests.swift b/anniversary_ProjectTests/anniversary_ProjectTests.swift new file mode 100644 index 0000000..3b93fb6 --- /dev/null +++ b/anniversary_ProjectTests/anniversary_ProjectTests.swift @@ -0,0 +1,36 @@ +// +// anniversary_ProjectTests.swift +// anniversary_ProjectTests +// +// Created by 忆海16 on 2024/4/11. +// + +import XCTest +@testable import anniversary_Project + +final class anniversary_ProjectTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + // Any test you write for XCTest can be annotated as throws and async. + // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. + // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + } + + func testPerformanceExample() throws { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + +} diff --git a/anniversary_ProjectUITests/anniversary_ProjectUITests.swift b/anniversary_ProjectUITests/anniversary_ProjectUITests.swift new file mode 100644 index 0000000..e55ac59 --- /dev/null +++ b/anniversary_ProjectUITests/anniversary_ProjectUITests.swift @@ -0,0 +1,41 @@ +// +// anniversary_ProjectUITests.swift +// anniversary_ProjectUITests +// +// Created by 忆海16 on 2024/4/11. +// + +import XCTest + +final class anniversary_ProjectUITests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + + // In UI tests it is usually best to stop immediately when a failure occurs. + continueAfterFailure = false + + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() throws { + // UI tests must launch the application that they test. + let app = XCUIApplication() + app.launch() + + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testLaunchPerformance() throws { + if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { + // This measures how long it takes to launch your application. + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } + } +} diff --git a/anniversary_ProjectUITests/anniversary_ProjectUITestsLaunchTests.swift b/anniversary_ProjectUITests/anniversary_ProjectUITestsLaunchTests.swift new file mode 100644 index 0000000..db33de8 --- /dev/null +++ b/anniversary_ProjectUITests/anniversary_ProjectUITestsLaunchTests.swift @@ -0,0 +1,32 @@ +// +// anniversary_ProjectUITestsLaunchTests.swift +// anniversary_ProjectUITests +// +// Created by 忆海16 on 2024/4/11. +// + +import XCTest + +final class anniversary_ProjectUITestsLaunchTests: XCTestCase { + + override class var runsForEachTargetApplicationUIConfiguration: Bool { + true + } + + override func setUpWithError() throws { + continueAfterFailure = false + } + + func testLaunch() throws { + let app = XCUIApplication() + app.launch() + + // Insert steps here to perform after app launch but before taking a screenshot, + // such as logging into a test account or navigating somewhere in the app + + let attachment = XCTAttachment(screenshot: app.screenshot()) + attachment.name = "Launch Screen" + attachment.lifetime = .keepAlways + add(attachment) + } +}