DolphinEnglishLearnStudent.xcodeproj/project.pbxproj
@@ -51,7 +51,11 @@ 130278992BFD9FBF00DDCE81 /* Home_1_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278932BFD9FBF00DDCE81 /* Home_1_TCell.swift */; }; 1302789A2BFD9FBF00DDCE81 /* AddressManageTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278942BFD9FBF00DDCE81 /* AddressManageTCell.swift */; }; 1302789B2BFD9FBF00DDCE81 /* GoodsItemTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130278952BFD9FBF00DDCE81 /* GoodsItemTCell.swift */; }; 1316A22E2C05CE5900BE6CAA /* GameBeginTipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1316A22D2C05CE5900BE6CAA /* GameBeginTipView.swift */; }; 1316A2302C05CE6100BE6CAA /* GameBeginTipView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1316A22F2C05CE6100BE6CAA /* GameBeginTipView.xib */; }; 133386382C007E91002EE788 /* HomeListenFight_lesson_2_VC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133386372C007E91002EE788 /* HomeListenFight_lesson_2_VC.swift */; }; 13397D962C05EA9D003440F9 /* ListenFight_Game_CCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13397D942C05EA9D003440F9 /* ListenFight_Game_CCell.swift */; }; 13397D972C05EA9D003440F9 /* ListenFight_Game_CCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13397D952C05EA9D003440F9 /* ListenFight_Game_CCell.xib */; }; 1362C75F2BFF4BA900BD7F73 /* StudyHandleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1362C75E2BFF4BA900BD7F73 /* StudyHandleView.swift */; }; 1362C7612BFF4BB100BD7F73 /* StudyHandleView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1362C7602BFF4BB100BD7F73 /* StudyHandleView.xib */; }; 13649E982C002534001B04E2 /* HomeListenFight_lesson_1_VC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13649E972C002534001B04E2 /* HomeListenFight_lesson_1_VC.swift */; }; @@ -60,8 +64,23 @@ 137CB4292BFF505800D32862 /* HomeListenFightVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 137CB4282BFF505800D32862 /* HomeListenFightVC.swift */; }; 138964002BFDF98200AEDCD9 /* StudyVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 138963FE2BFDF98200AEDCD9 /* StudyVC.swift */; }; 138964012BFDF98200AEDCD9 /* StudyVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 138963FF2BFDF98200AEDCD9 /* StudyVC.xib */; }; 13A049FF2C058B1400F1F52E /* HomeListenFight_lesson_5_VC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13A049FE2C058B1400F1F52E /* HomeListenFight_lesson_5_VC.swift */; }; 13A04A012C05BFCE00F1F52E /* HomeListenGame_1_VC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13A04A002C05BFCE00F1F52E /* HomeListenGame_1_VC.swift */; }; 13A04A032C05BFDC00F1F52E /* HomeListenGame_2_VC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13A04A022C05BFDC00F1F52E /* HomeListenGame_2_VC.swift */; }; 13A04A052C05C29300F1F52E /* ChooseLevelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13A04A042C05C29300F1F52E /* ChooseLevelView.swift */; }; 13A04A072C05C29D00F1F52E /* ChooseLevelView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13A04A062C05C29D00F1F52E /* ChooseLevelView.xib */; }; 13A830F12C04196400BB2F23 /* HomeListenFight_lesson_3_VC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13A830F02C04196400BB2F23 /* HomeListenFight_lesson_3_VC.swift */; }; 13A830F42C041B4400BB2F23 /* ListenFight_lesson_3_CCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13A830F32C041B4400BB2F23 /* ListenFight_lesson_3_CCell.xib */; }; 13A830F52C041B4400BB2F23 /* ListenFight_lesson_3_CCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13A830F22C041B4400BB2F23 /* ListenFight_lesson_3_CCell.swift */; }; 13A830F82C043A0000BB2F23 /* Lesson_3_AnswerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13A830F72C043A0000BB2F23 /* Lesson_3_AnswerView.swift */; }; 13A830FA2C043A0600BB2F23 /* Lesson_3_AnswerView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13A830F92C043A0600BB2F23 /* Lesson_3_AnswerView.xib */; }; 13AA25392C00759600F075B3 /* HomeStudyCompleteVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AA25372C00759600F075B3 /* HomeStudyCompleteVC.swift */; }; 13AA253A2C00759600F075B3 /* HomeStudyCompleteVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13AA25382C00759600F075B3 /* HomeStudyCompleteVC.xib */; }; 13CDF4492C0566E400E8D4FD /* HomeListenFight_lesson_4_VC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CDF4482C0566E400E8D4FD /* HomeListenFight_lesson_4_VC.swift */; }; 13CDF44C2C056A6900E8D4FD /* ListenFight_lesson_4_CCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13CDF44B2C056A6900E8D4FD /* ListenFight_lesson_4_CCell.xib */; }; 13CDF44D2C056A6900E8D4FD /* ListenFight_lesson_4_CCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CDF44A2C056A6900E8D4FD /* ListenFight_lesson_4_CCell.swift */; }; 13CDF44F2C05756C00E8D4FD /* Lesson_4_AnswerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CDF44E2C05756C00E8D4FD /* Lesson_4_AnswerView.swift */; }; 13CDF4512C05757400E8D4FD /* Lesson_4_AnswerView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13CDF4502C05757400E8D4FD /* Lesson_4_AnswerView.xib */; }; 13E07DF12BFDF1E600B7F5FB /* ExchangeRecordHistoryVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13E07DF02BFDF1E600B7F5FB /* ExchangeRecordHistoryVC.swift */; }; 13EEB8912BFED3F3002996FC /* AwardListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13EEB8902BFED3F3002996FC /* AwardListView.swift */; }; 13EEB8932BFED3FA002996FC /* AwardListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13EEB8922BFED3FA002996FC /* AwardListView.xib */; }; @@ -126,7 +145,11 @@ 130278932BFD9FBF00DDCE81 /* Home_1_TCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Home_1_TCell.swift; sourceTree = "<group>"; }; 130278942BFD9FBF00DDCE81 /* AddressManageTCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddressManageTCell.swift; sourceTree = "<group>"; }; 130278952BFD9FBF00DDCE81 /* GoodsItemTCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GoodsItemTCell.swift; sourceTree = "<group>"; }; 1316A22D2C05CE5900BE6CAA /* GameBeginTipView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameBeginTipView.swift; sourceTree = "<group>"; }; 1316A22F2C05CE6100BE6CAA /* GameBeginTipView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GameBeginTipView.xib; sourceTree = "<group>"; }; 133386372C007E91002EE788 /* HomeListenFight_lesson_2_VC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListenFight_lesson_2_VC.swift; sourceTree = "<group>"; }; 13397D942C05EA9D003440F9 /* ListenFight_Game_CCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListenFight_Game_CCell.swift; sourceTree = "<group>"; }; 13397D952C05EA9D003440F9 /* ListenFight_Game_CCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ListenFight_Game_CCell.xib; sourceTree = "<group>"; }; 1362C75E2BFF4BA900BD7F73 /* StudyHandleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudyHandleView.swift; sourceTree = "<group>"; }; 1362C7602BFF4BB100BD7F73 /* StudyHandleView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StudyHandleView.xib; sourceTree = "<group>"; }; 13649E972C002534001B04E2 /* HomeListenFight_lesson_1_VC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HomeListenFight_lesson_1_VC.swift; path = DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift; sourceTree = SOURCE_ROOT; }; @@ -135,8 +158,23 @@ 137CB4282BFF505800D32862 /* HomeListenFightVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListenFightVC.swift; sourceTree = "<group>"; }; 138963FE2BFDF98200AEDCD9 /* StudyVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudyVC.swift; sourceTree = "<group>"; }; 138963FF2BFDF98200AEDCD9 /* StudyVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StudyVC.xib; sourceTree = "<group>"; }; 13A049FE2C058B1400F1F52E /* HomeListenFight_lesson_5_VC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListenFight_lesson_5_VC.swift; sourceTree = "<group>"; }; 13A04A002C05BFCE00F1F52E /* HomeListenGame_1_VC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListenGame_1_VC.swift; sourceTree = "<group>"; }; 13A04A022C05BFDC00F1F52E /* HomeListenGame_2_VC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListenGame_2_VC.swift; sourceTree = "<group>"; }; 13A04A042C05C29300F1F52E /* ChooseLevelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChooseLevelView.swift; sourceTree = "<group>"; }; 13A04A062C05C29D00F1F52E /* ChooseLevelView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ChooseLevelView.xib; sourceTree = "<group>"; }; 13A830F02C04196400BB2F23 /* HomeListenFight_lesson_3_VC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListenFight_lesson_3_VC.swift; sourceTree = "<group>"; }; 13A830F22C041B4400BB2F23 /* ListenFight_lesson_3_CCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListenFight_lesson_3_CCell.swift; sourceTree = "<group>"; }; 13A830F32C041B4400BB2F23 /* ListenFight_lesson_3_CCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ListenFight_lesson_3_CCell.xib; sourceTree = "<group>"; }; 13A830F72C043A0000BB2F23 /* Lesson_3_AnswerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Lesson_3_AnswerView.swift; sourceTree = "<group>"; }; 13A830F92C043A0600BB2F23 /* Lesson_3_AnswerView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = Lesson_3_AnswerView.xib; sourceTree = "<group>"; }; 13AA25372C00759600F075B3 /* HomeStudyCompleteVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeStudyCompleteVC.swift; sourceTree = "<group>"; }; 13AA25382C00759600F075B3 /* HomeStudyCompleteVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeStudyCompleteVC.xib; sourceTree = "<group>"; }; 13CDF4482C0566E400E8D4FD /* HomeListenFight_lesson_4_VC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListenFight_lesson_4_VC.swift; sourceTree = "<group>"; }; 13CDF44A2C056A6900E8D4FD /* ListenFight_lesson_4_CCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListenFight_lesson_4_CCell.swift; sourceTree = "<group>"; }; 13CDF44B2C056A6900E8D4FD /* ListenFight_lesson_4_CCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ListenFight_lesson_4_CCell.xib; sourceTree = "<group>"; }; 13CDF44E2C05756C00E8D4FD /* Lesson_4_AnswerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Lesson_4_AnswerView.swift; sourceTree = "<group>"; }; 13CDF4502C05757400E8D4FD /* Lesson_4_AnswerView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = Lesson_4_AnswerView.xib; sourceTree = "<group>"; }; 13E07DF02BFDF1E600B7F5FB /* ExchangeRecordHistoryVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExchangeRecordHistoryVC.swift; sourceTree = "<group>"; }; 13EEB8902BFED3F3002996FC /* AwardListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AwardListView.swift; sourceTree = "<group>"; }; 13EEB8922BFED3FA002996FC /* AwardListView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AwardListView.xib; sourceTree = "<group>"; }; @@ -354,6 +392,12 @@ children = ( 13649E9A2C00304C001B04E2 /* ListenFight_lesson_1_CCell.swift */, 13649E9B2C00304C001B04E2 /* ListenFight_lesson_1_CCell.xib */, 13A830F22C041B4400BB2F23 /* ListenFight_lesson_3_CCell.swift */, 13A830F32C041B4400BB2F23 /* ListenFight_lesson_3_CCell.xib */, 13CDF44A2C056A6900E8D4FD /* ListenFight_lesson_4_CCell.swift */, 13CDF44B2C056A6900E8D4FD /* ListenFight_lesson_4_CCell.xib */, 13397D942C05EA9D003440F9 /* ListenFight_Game_CCell.swift */, 13397D952C05EA9D003440F9 /* ListenFight_Game_CCell.xib */, ); path = CCell; sourceTree = "<group>"; @@ -368,8 +412,28 @@ 137CB4282BFF505800D32862 /* HomeListenFightVC.swift */, 13649E972C002534001B04E2 /* HomeListenFight_lesson_1_VC.swift */, 133386372C007E91002EE788 /* HomeListenFight_lesson_2_VC.swift */, 13A830F02C04196400BB2F23 /* HomeListenFight_lesson_3_VC.swift */, 13CDF4482C0566E400E8D4FD /* HomeListenFight_lesson_4_VC.swift */, 13A049FE2C058B1400F1F52E /* HomeListenFight_lesson_5_VC.swift */, 13A04A002C05BFCE00F1F52E /* HomeListenGame_1_VC.swift */, 13A04A022C05BFDC00F1F52E /* HomeListenGame_2_VC.swift */, ); path = VC; sourceTree = "<group>"; }; 13A830F62C0439C300BB2F23 /* View */ = { isa = PBXGroup; children = ( 13A830F72C043A0000BB2F23 /* Lesson_3_AnswerView.swift */, 13A830F92C043A0600BB2F23 /* Lesson_3_AnswerView.xib */, 13CDF44E2C05756C00E8D4FD /* Lesson_4_AnswerView.swift */, 13CDF4502C05757400E8D4FD /* Lesson_4_AnswerView.xib */, 13A04A042C05C29300F1F52E /* ChooseLevelView.swift */, 13A04A062C05C29D00F1F52E /* ChooseLevelView.xib */, 1316A22D2C05CE5900BE6CAA /* GameBeginTipView.swift */, 1316A22F2C05CE6100BE6CAA /* GameBeginTipView.xib */, ); path = View; sourceTree = "<group>"; }; 13AA25362C00757300F075B3 /* VC */ = { @@ -402,6 +466,7 @@ 13EEB89E2BFF2853002996FC /* Listen */ = { isa = PBXGroup; children = ( 13A830F62C0439C300BB2F23 /* View */, 13649E992C002FDF001B04E2 /* CCell */, 137CB4272BFF500700D32862 /* VC */, 13EEB8A12BFF3507002996FC /* TCell */, @@ -504,23 +569,30 @@ 130278612BFD999200DDCE81 /* LoginVC.xib in Resources */, 13EEB8982BFF1531002996FC /* AwardListCCell.xib in Resources */, 13AA253A2C00759600F075B3 /* HomeStudyCompleteVC.xib in Resources */, 13A830F42C041B4400BB2F23 /* ListenFight_lesson_3_CCell.xib in Resources */, 1302785B2BFD985E00DDCE81 /* CommonAlertView.xib in Resources */, 130278972BFD9FBF00DDCE81 /* AddressManageTCell.xib in Resources */, 1302787C2BFD9ED600DDCE81 /* MarketContentVC.xib in Resources */, 130278332BFD957300DDCE81 /* Assets.xcassets in Resources */, 130278822BFD9F0700DDCE81 /* MeVC.xib in Resources */, 1316A2302C05CE6100BE6CAA /* GameBeginTipView.xib in Resources */, 13EEB8A52BFF353C002996FC /* HomeListen_process_TCell.xib in Resources */, 13A830FA2C043A0600BB2F23 /* Lesson_3_AnswerView.xib in Resources */, 1302785D2BFD985E00DDCE81 /* CommonInputView.xib in Resources */, 1302787A2BFD9ED600DDCE81 /* ExchangeResultVC.xib in Resources */, 130278362BFD957300DDCE81 /* Base in Resources */, 13397D972C05EA9D003440F9 /* ListenFight_Game_CCell.xib in Resources */, 1302788E2BFD9F4200DDCE81 /* CoinRecordHistoryVC.xib in Resources */, 130278312BFD957100DDCE81 /* Base in Resources */, 1362C7612BFF4BB100BD7F73 /* StudyHandleView.xib in Resources */, 138964012BFDF98200AEDCD9 /* StudyVC.xib in Resources */, 130278662BFD9E8C00DDCE81 /* HomeVC.xib in Resources */, 130278772BFD9ED600DDCE81 /* MarketCCell.xib in Resources */, 13A04A072C05C29D00F1F52E /* ChooseLevelView.xib in Resources */, 13EEB8A92BFF354B002996FC /* HomeListen_item_TCell.xib in Resources */, 13CDF4512C05757400E8D4FD /* Lesson_4_AnswerView.xib in Resources */, 130278982BFD9FBF00DDCE81 /* GoodsItemTCell.xib in Resources */, 13CDF44C2C056A6900E8D4FD /* ListenFight_lesson_4_CCell.xib in Resources */, 130278962BFD9FBF00DDCE81 /* Home_1_TCell.xib in Resources */, 1302787F2BFD9ED600DDCE81 /* MarketVC.xib in Resources */, 1302787E2BFD9ED600DDCE81 /* MarketExchangeVC.xib in Resources */, @@ -580,28 +652,38 @@ 130278832BFD9F0700DDCE81 /* MeVC.swift in Sources */, 130278992BFD9FBF00DDCE81 /* Home_1_TCell.swift in Sources */, 1302784B2BFD979200DDCE81 /* TapBtn.swift in Sources */, 13CDF44F2C05756C00E8D4FD /* Lesson_4_AnswerView.swift in Sources */, 13EEB8A82BFF354B002996FC /* HomeListen_item_TCell.swift in Sources */, 13A830F12C04196400BB2F23 /* HomeListenFight_lesson_3_VC.swift in Sources */, 13CDF44D2C056A6900E8D4FD /* ListenFight_lesson_4_CCell.swift in Sources */, 1362C75F2BFF4BA900BD7F73 /* StudyHandleView.swift in Sources */, 130278672BFD9E8C00DDCE81 /* HomeVC.swift in Sources */, 130278482BFD979200DDCE81 /* BaseNav.swift in Sources */, 130278622BFD999200DDCE81 /* LoginVC.swift in Sources */, 13EEB89C2BFF1C35002996FC /* HomeListenMenuVC.swift in Sources */, 13CDF4492C0566E400E8D4FD /* HomeListenFight_lesson_4_VC.swift in Sources */, 13A04A012C05BFCE00F1F52E /* HomeListenGame_1_VC.swift in Sources */, 138964002BFDF98200AEDCD9 /* StudyVC.swift in Sources */, 13EEB8972BFF1531002996FC /* AwardListCCell.swift in Sources */, 13649E982C002534001B04E2 /* HomeListenFight_lesson_1_VC.swift in Sources */, 1302782A2BFD957100DDCE81 /* AppDelegate.swift in Sources */, 130278762BFD9ED600DDCE81 /* MarketCCell.swift in Sources */, 1316A22E2C05CE5900BE6CAA /* GameBeginTipView.swift in Sources */, 13397D962C05EA9D003440F9 /* ListenFight_Game_CCell.swift in Sources */, 13EEB8A42BFF353C002996FC /* HomeListen_process_TCell.swift in Sources */, 130278782BFD9ED600DDCE81 /* MarketVC.swift in Sources */, 1302785E2BFD985E00DDCE81 /* CommonWebVC.swift in Sources */, 13EEB8AB2BFF36E0002996FC /* HomeListenSubVC.swift in Sources */, 13A830F82C043A0000BB2F23 /* Lesson_3_AnswerView.swift in Sources */, 1302789B2BFD9FBF00DDCE81 /* GoodsItemTCell.swift in Sources */, 13E07DF12BFDF1E600B7F5FB /* ExchangeRecordHistoryVC.swift in Sources */, 130278872BFD9F2A00DDCE81 /* AddressManageHandleVC.swift in Sources */, 130278892BFD9F2A00DDCE81 /* AddressManageVC.swift in Sources */, 1302785C2BFD985E00DDCE81 /* CommonInputView.swift in Sources */, 13A04A052C05C29300F1F52E /* ChooseLevelView.swift in Sources */, 130278792BFD9ED600DDCE81 /* ExchangeResultVC.swift in Sources */, 1302788D2BFD9F4200DDCE81 /* CoinRecordHistoryVC.swift in Sources */, 13A049FF2C058B1400F1F52E /* HomeListenFight_lesson_5_VC.swift in Sources */, 1302785A2BFD985E00DDCE81 /* CommonAlertView.swift in Sources */, 1302782C2BFD957100DDCE81 /* SceneDelegate.swift in Sources */, 1302787D2BFD9ED600DDCE81 /* MarketExchangeVC.swift in Sources */, @@ -610,7 +692,9 @@ 13EEB8912BFED3F3002996FC /* AwardListView.swift in Sources */, 130278412BFD978900DDCE81 /* Config.swift in Sources */, 1302784A2BFD979200DDCE81 /* BaseVC.swift in Sources */, 13A830F52C041B4400BB2F23 /* ListenFight_lesson_3_CCell.swift in Sources */, 137CB4292BFF505800D32862 /* HomeListenFightVC.swift in Sources */, 13A04A032C05BFDC00F1F52E /* HomeListenGame_2_VC.swift in Sources */, 130278592BFD985E00DDCE81 /* BitrhdayPickerView.swift in Sources */, 133386382C007E91002EE788 /* HomeListenFight_lesson_2_VC.swift in Sources */, 1302787B2BFD9ED600DDCE81 /* MarketContentVC.swift in Sources */, @@ -784,7 +868,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.sinata.dolphinEnLearn.student.DolphinEnglishLearnStudent; PRODUCT_BUNDLE_IDENTIFIER = com.sinata.dollearn.test; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; @@ -820,7 +904,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.sinata.dolphinEnLearn.student.DolphinEnglishLearnStudent; PRODUCT_BUNDLE_IDENTIFIER = com.sinata.dollearn; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; DolphinEnglishLearnStudent/AppDelegate.swift
@@ -8,6 +8,7 @@ import UIKit @main class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio_cir.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "filename" : "btn_radio.png", "idiom" : "universal", "scale" : "1x" }, { "filename" : "btn_radio@2x.png", "idiom" : "universal", "scale" : "2x" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio_cir.imageset/btn_radio.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio_cir.imageset/btn_radio@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio_u_cir.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "filename" : "btn_radio_u.png", "idiom" : "universal", "scale" : "1x" }, { "filename" : "btn_radio_u@2x.png", "idiom" : "universal", "scale" : "2x" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio_u_cir.imageset/btn_radio_u.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio_u_cir.imageset/btn_radio_u@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_fullScreen.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "filename" : "icon_fullScreen.png", "idiom" : "universal", "scale" : "1x" }, { "filename" : "icon_fullScreen@2x.png", "idiom" : "universal", "scale" : "2x" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_fullScreen.imageset/icon_fullScreen.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_fullScreen.imageset/icon_fullScreen@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_question.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "filename" : "icon_question.png", "idiom" : "universal", "scale" : "1x" }, { "filename" : "icon_question@2x.png", "idiom" : "universal", "scale" : "2x" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_question.imageset/icon_question.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_question.imageset/icon_question@2x.png
DolphinEnglishLearnStudent/Base/BaseVC.swift
@@ -60,7 +60,7 @@ navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backButton) } if !self.isKind(of: HomeVC.self) && !self.isKind(of: HomeListenSubVC.self) && !self.isKind(of: HomeListenFight_lesson_1_VC.self) && !self.isKind(of: HomeListenFight_lesson_2_VC.self){ if !self.isKind(of: HomeVC.self) && !self.isKind(of: HomeListenSubVC.self) && !self.isKind(of: HomeListenFight_lesson_1_VC.self) && !self.isKind(of: HomeListenFight_lesson_2_VC.self) && !self.isKind(of: HomeListenFight_lesson_3_VC.self) && !self.isKind(of: HomeListenFight_lesson_4_VC.self) && !self.isKind(of: HomeListenFight_lesson_5_VC.self) && !self.isKind(of: HomeListenGame_1_VC.self) && !self.isKind(of: HomeListenGame_2_VC.self){ let titleV = UIView() titleV.bounds = CGRect(x: 0, y: 0, width: 156, height: 63) titleV.sizeToFit() DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift
@@ -61,7 +61,7 @@ make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(24) make.centerX.equalToSuperview() make.height.equalTo(52) make.width.equalTo(159) make.width.equalTo(199) } } @@ -99,7 +99,7 @@ self.menuView.snp.updateConstraints { make in make.top.equalTo(self.view).offset(v.origin.y + UIDevice.jq_safeEdges.top + 101 + 50) make.left.equalToSuperview().offset(v.origin.x + 194) make.width.equalTo(v.size.width - 10) make.width.equalTo(v.size.width + 50) make.height.equalTo(40) } self.view.layoutIfNeeded() DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_CCell.swift
New file @@ -0,0 +1,17 @@ // // ListenFight_Game_CCell.swift // DolphinEnglishLearnStudent // // Created by 无故事王国 on 2024/5/28. // import UIKit class ListenFight_Game_CCell: UICollectionViewCell { override func awakeFromNib() { super.awakeFromNib() // Initialization code } } DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_Game_CCell.xib
New file @@ -0,0 +1,24 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="ipad10_9rounded" orientation="portrait" layout="fullscreen" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="_ListenFight_Game_CCell" id="gTV-IL-0wX" customClass="ListenFight_Game_CCell" customModule="DolphinEnglishLearnStudent" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="50" height="50"/> <autoresizingMask key="autoresizingMask"/> <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> <rect key="frame" x="0.0" y="0.0" width="50" height="50"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> </view> <viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/> <point key="canvasLocation" x="61" y="20"/> </collectionViewCell> </objects> </document> DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_3_CCell.swift
New file @@ -0,0 +1,19 @@ // // ListenFight_lesson_3_CCell.swift // DolphinEnglishLearnStudent // // Created by 无故事王国 on 2024/5/27. // import UIKit import JQTools class ListenFight_lesson_3_CCell: UICollectionViewCell { @IBOutlet weak var img_cover: UIImageView! @IBOutlet weak var view_container: UIView! override func awakeFromNib() { super.awakeFromNib() view_container.jq_addShadows(shadowColor: .black.withAlphaComponent(0.31), corner: 8, radius: 3, offset: CGSize(width: 0, height: 1), opacity: 1) } } DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_3_CCell.xib
New file @@ -0,0 +1,91 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="ipad10_9rounded" orientation="portrait" layout="fullscreen" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="ListenFight_lesson_3_CCell" customModule="DolphinEnglishLearnStudent" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="630" height="554"/> <autoresizingMask key="autoresizingMask"/> <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> <rect key="frame" x="0.0" y="0.0" width="630" height="554"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vtr-2e-B5C"> <rect key="frame" x="0.0" y="33" width="159" height="52"/> <subviews> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7yc-PU-RgV"> <rect key="frame" x="104" y="10" width="32" height="32"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="icon_play"/> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9Dc-Ns-SMP"> <rect key="frame" x="25" y="12.5" width="27" height="27"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="icon_play_1"/> </button> </subviews> <color key="backgroundColor" red="0.25490196078431371" green="0.63529411764705879" blue="0.92156862745098034" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstItem="9Dc-Ns-SMP" firstAttribute="centerY" secondItem="vtr-2e-B5C" secondAttribute="centerY" id="C8e-Iq-OaB"/> <constraint firstItem="7yc-PU-RgV" firstAttribute="centerY" secondItem="vtr-2e-B5C" secondAttribute="centerY" id="EUe-pu-sAP"/> <constraint firstAttribute="trailing" secondItem="7yc-PU-RgV" secondAttribute="trailing" constant="23" id="Rms-9S-fkG"/> <constraint firstAttribute="height" constant="52" id="Y2Z-EL-K2n"/> <constraint firstAttribute="width" constant="159" id="oI7-Oh-ubD"/> <constraint firstItem="9Dc-Ns-SMP" firstAttribute="leading" secondItem="vtr-2e-B5C" secondAttribute="leading" constant="25" id="xRi-cc-X9V"/> </constraints> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="8"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qxz-6s-e5b"> <rect key="frame" x="0.0" y="110" width="630" height="434"/> <subviews> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="n5n-eb-5xI"> <rect key="frame" x="5" y="5" width="620" height="424"/> <color key="backgroundColor" red="0.94509803921568625" green="0.94509803921568625" blue="0.94509803921568625" alpha="0.84999999999999998" colorSpace="custom" customColorSpace="sRGB"/> </imageView> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="bottom" secondItem="n5n-eb-5xI" secondAttribute="bottom" constant="5" id="ksf-ST-JbM"/> <constraint firstItem="n5n-eb-5xI" firstAttribute="top" secondItem="qxz-6s-e5b" secondAttribute="top" constant="5" id="tyC-6a-6Sp"/> <constraint firstItem="n5n-eb-5xI" firstAttribute="leading" secondItem="qxz-6s-e5b" secondAttribute="leading" constant="5" id="vnP-H4-REp"/> <constraint firstAttribute="trailing" secondItem="n5n-eb-5xI" secondAttribute="trailing" constant="5" id="yjy-hO-zxo"/> </constraints> </view> </subviews> </view> <constraints> <constraint firstAttribute="trailing" secondItem="qxz-6s-e5b" secondAttribute="trailing" id="HMD-Sa-FHB"/> <constraint firstItem="qxz-6s-e5b" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="SLN-pI-I4q"/> <constraint firstItem="vtr-2e-B5C" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="enY-sX-Oib"/> <constraint firstItem="qxz-6s-e5b" firstAttribute="top" secondItem="vtr-2e-B5C" secondAttribute="bottom" constant="25" id="iLs-4C-NaW"/> <constraint firstItem="vtr-2e-B5C" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="33" id="jbw-ZJ-YrV"/> <constraint firstAttribute="bottom" secondItem="qxz-6s-e5b" secondAttribute="bottom" constant="10" id="msT-T9-1c4"/> </constraints> <size key="customSize" width="630" height="554"/> <connections> <outlet property="img_cover" destination="n5n-eb-5xI" id="Wk5-s2-MQj"/> <outlet property="view_container" destination="qxz-6s-e5b" id="Ikx-kW-UkZ"/> </connections> <point key="canvasLocation" x="352.6829268292683" y="263.38983050847457"/> </collectionViewCell> </objects> <resources> <image name="icon_play" width="32" height="32"/> <image name="icon_play_1" width="27" height="27"/> <systemColor name="systemBackgroundColor"> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> </resources> </document> DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_4_CCell.swift
New file @@ -0,0 +1,21 @@ // // ListenFight_lesson_4_CCell.swift // DolphinEnglishLearnStudent // // Created by 无故事王国 on 2024/5/28. // import UIKit class ListenFight_lesson_4_CCell: UICollectionViewCell { @IBOutlet weak var view_handle: UIView! @IBOutlet weak var img_cover: UIImageView! @IBOutlet weak var view_container: UIView! @IBOutlet weak var img_state: UIImageView! override func awakeFromNib() { super.awakeFromNib() view_container.jq_addShadows(shadowColor: .black.withAlphaComponent(0.31), corner: 8, radius: 3, offset: CGSize(width: 0, height: 1), opacity: 1) } } DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_4_CCell.xib
New file @@ -0,0 +1,109 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="ipad10_9rounded" orientation="portrait" layout="fullscreen" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="_ListenFight_lesson_4_CCell" id="gTV-IL-0wX" customClass="ListenFight_lesson_4_CCell" customModule="DolphinEnglishLearnStudent" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="597" height="510"/> <autoresizingMask key="autoresizingMask"/> <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> <rect key="frame" x="0.0" y="0.0" width="597" height="510"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Xjz-V8-keG"> <rect key="frame" x="0.0" y="0.0" width="159" height="52"/> <subviews> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LLy-9v-eQJ"> <rect key="frame" x="104" y="10" width="32" height="32"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="icon_play"/> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kgj-Ss-D90"> <rect key="frame" x="65" y="12.5" width="27" height="27"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="icon_play_1"/> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZuK-r9-26C"> <rect key="frame" x="14" y="9.5" width="33" height="33"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="icon_question"/> </button> </subviews> <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="width" constant="159" id="7Mr-KM-NTE"/> <constraint firstAttribute="trailing" secondItem="LLy-9v-eQJ" secondAttribute="trailing" constant="23" id="9dR-Nl-sPa"/> <constraint firstItem="ZuK-r9-26C" firstAttribute="centerY" secondItem="Xjz-V8-keG" secondAttribute="centerY" id="Erm-17-erv"/> <constraint firstItem="LLy-9v-eQJ" firstAttribute="centerY" secondItem="Xjz-V8-keG" secondAttribute="centerY" id="FB0-fx-81Z"/> <constraint firstItem="LLy-9v-eQJ" firstAttribute="leading" secondItem="kgj-Ss-D90" secondAttribute="trailing" constant="12" id="MoJ-Ne-mlq"/> <constraint firstAttribute="height" constant="52" id="gfp-ph-1NP"/> <constraint firstItem="kgj-Ss-D90" firstAttribute="leading" secondItem="ZuK-r9-26C" secondAttribute="trailing" constant="18" id="qM1-Yp-Nha"/> <constraint firstItem="kgj-Ss-D90" firstAttribute="centerY" secondItem="Xjz-V8-keG" secondAttribute="centerY" id="zxl-IP-PhN"/> </constraints> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="8"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="OJ6-0b-fVC"> <rect key="frame" x="0.0" y="77" width="597" height="423"/> <subviews> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="XW5-ds-CXG"> <rect key="frame" x="5" y="5" width="587" height="413"/> <color key="backgroundColor" red="0.94509803920000002" green="0.94509803920000002" blue="0.94509803920000002" alpha="0.84999999999999998" colorSpace="custom" customColorSpace="sRGB"/> </imageView> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_success" translatesAutoresizingMaskIntoConstraints="NO" id="eyJ-Qy-E0w"> <rect key="frame" x="258.5" y="171" width="80" height="81"/> </imageView> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="eyJ-Qy-E0w" firstAttribute="centerY" secondItem="XW5-ds-CXG" secondAttribute="centerY" id="Ik1-E3-TsU"/> <constraint firstItem="eyJ-Qy-E0w" firstAttribute="centerX" secondItem="XW5-ds-CXG" secondAttribute="centerX" id="dXx-99-JQ1"/> <constraint firstItem="XW5-ds-CXG" firstAttribute="leading" secondItem="OJ6-0b-fVC" secondAttribute="leading" constant="5" id="dvd-Mt-moN"/> <constraint firstAttribute="bottom" secondItem="XW5-ds-CXG" secondAttribute="bottom" constant="5" id="hB3-8N-tDw"/> <constraint firstItem="XW5-ds-CXG" firstAttribute="top" secondItem="OJ6-0b-fVC" secondAttribute="top" constant="5" id="hyd-FZ-pb6"/> <constraint firstAttribute="trailing" secondItem="XW5-ds-CXG" secondAttribute="trailing" constant="5" id="iFL-yH-aeG"/> </constraints> </view> </subviews> </view> <viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/> <constraints> <constraint firstItem="Xjz-V8-keG" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="3SB-P6-hOR"/> <constraint firstItem="Xjz-V8-keG" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="5Iq-AY-uUK"/> <constraint firstItem="OJ6-0b-fVC" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="6p8-30-BD6"/> <constraint firstAttribute="trailing" secondItem="OJ6-0b-fVC" secondAttribute="trailing" id="EAu-4C-peY"/> <constraint firstItem="OJ6-0b-fVC" firstAttribute="top" secondItem="Xjz-V8-keG" secondAttribute="bottom" constant="25" id="YpO-u8-Uyg"/> <constraint firstAttribute="bottom" secondItem="OJ6-0b-fVC" secondAttribute="bottom" constant="10" id="m6e-nJ-ukf"/> </constraints> <size key="customSize" width="597" height="510"/> <connections> <outlet property="img_cover" destination="XW5-ds-CXG" id="yuo-h2-TG8"/> <outlet property="img_state" destination="eyJ-Qy-E0w" id="6YM-Di-5yt"/> <outlet property="view_container" destination="OJ6-0b-fVC" id="4Y2-jo-yTH"/> <outlet property="view_handle" destination="Xjz-V8-keG" id="XGi-ed-WJo"/> </connections> <point key="canvasLocation" x="339.8780487804878" y="136.77966101694915"/> </collectionViewCell> </objects> <resources> <image name="icon_play" width="32" height="32"/> <image name="icon_play_1" width="27" height="27"/> <image name="icon_question" width="33" height="33"/> <image name="icon_success" width="80" height="81"/> <systemColor name="systemBackgroundColor"> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> </resources> </document> DolphinEnglishLearnStudent/Moudle/Home/Listen/TCell/HomeListen_item_TCell.swift
@@ -8,7 +8,8 @@ import UIKit class HomeListen_item_TCell: UITableViewCell { @IBOutlet weak var label_title: UILabel! override func awakeFromNib() { super.awakeFromNib() backgroundColor = .clear DolphinEnglishLearnStudent/Moudle/Home/Listen/TCell/HomeListen_item_TCell.xib
@@ -138,6 +138,9 @@ <constraint firstAttribute="trailing" secondItem="Guy-ui-ByM" secondAttribute="trailing" id="Z4n-MP-9SL"/> </constraints> </tableViewCellContentView> <connections> <outlet property="label_title" destination="28J-ZC-IiE" id="kDk-K7-10L"/> </connections> <point key="canvasLocation" x="282.80487804878049" y="47.033898305084747"/> </tableViewCell> </objects> DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift
@@ -14,6 +14,11 @@ enum ListenType{ case lesson1 //自主学习-听音选图 case lesson2 //自主学习-看图选音 case lesson3 //自主学习-归纳排除 case lesson4 //自主学习-有问有答 case lesson5 //自主学习-音图相配 case game1 //游戏类型-超级听力 case game2 //游戏类型-超级记忆 } class HomeListenFightViewModel{ @@ -86,6 +91,13 @@ btn_exit.addTarget(self, action: #selector(quitAction), for: .touchUpInside) btn_forward.addTarget(self, action: #selector(beforeAction), for: .touchUpInside) if viewModel.listenType.value == .game1 || viewModel.listenType.value == .game2{ btn_forward.isHidden = true label_pageNum.isHidden = true } } override func setUI() { @@ -97,7 +109,11 @@ pageVC.view.snp.makeConstraints { make in make.left.right.equalToSuperview() make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top) make.bottom.equalTo(self.label_pageNum.snp.top).offset(-32) if self.viewModel.listenType.value == .lesson3 || self.viewModel.listenType.value == .lesson4{ make.bottom.equalTo(self.label_pageNum.snp.top).offset(-18) }else{ make.bottom.equalTo(self.label_pageNum.snp.top).offset(-32) } } } @@ -187,6 +203,32 @@ return vc } if viewModel.listenType.value == .lesson3{ let vc = HomeListenFight_lesson_3_VC() return vc } if viewModel.listenType.value == .lesson4{ let vc = HomeListenFight_lesson_4_VC() return vc } if viewModel.listenType.value == .lesson5{ let vc = HomeListenFight_lesson_5_VC() return vc } if viewModel.listenType.value == .game1{ let vc = HomeListenGame_1_VC() return vc } if viewModel.listenType.value == .game2{ let vc = HomeListenGame_2_VC() return vc } let vc = UIViewController() return vc } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_3_VC.swift
New file @@ -0,0 +1,212 @@ // // HomeListenFight_lesson_3_VC.swift // DolphinEnglishLearnStudent // // Created by 无故事王国 on 2024/5/27. // import UIKit class HomeListenFight_lesson_3_VC: BaseVC { private var viewModel = FightAnswerViewModel() private lazy var collectionView:UICollectionView = { let flowLayout = UICollectionViewFlowLayout() let w = (JQ_ScreenW - 97 - 54 - 36) / 3.0 flowLayout.itemSize = CGSize(width: w, height: w * 0.947) flowLayout.minimumInteritemSpacing = 18 flowLayout.scrollDirection = .vertical let collection = UICollectionView(frame: .zero, collectionViewLayout: flowLayout) collection.register(UINib(nibName: "ListenFight_lesson_3_CCell", bundle: nil), forCellWithReuseIdentifier: "_ListenFight_lesson_3_CCell") collection.register(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "header") return collection }() private lazy var stackView:UIStackView = { let sta = UIStackView() sta.spacing = 5 sta.distribution = .equalSpacing sta.axis = .horizontal return sta }() override func viewDidLoad() { super.viewDidLoad() navigationItem.titleView = UIView() viewModel.selectIndex.accept(IndexPath(row: 0, section: 0)) } override func setUI() { super.setUI() collectionView.delegate = self collectionView.dataSource = self collectionView.showsVerticalScrollIndicator = false collectionView.backgroundColor = .clear view.addSubview(collectionView) collectionView.snp.makeConstraints { make in make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(0) make.left.equalTo(97) make.right.equalTo(-54) make.bottom.equalToSuperview() } } private func answerSuccess(_ cell:ListenFight_lesson_1_CCell,index:Int){ } private func resetStackView(){ } override func setRx() { viewModel.selectIndex.subscribe(onNext: {[weak self] index in guard let index = index else { return } //判断选中是否正确逻辑 if let cell = self?.collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_3_CCell", for: index) as? ListenFight_lesson_1_CCell{ var answerType:Fight_lessonType = .none answerType = .success switch answerType { case .success: self?.viewModel.answerType.accept(.success) case .fail: self?.viewModel.answerType.accept(.fail) default:break } } }).disposed(by: disposeBag) } private func setAnswerStackView(){ for subView in stackView.arrangedSubviews{ subView.removeFromSuperview() } view.addSubview(stackView) stackView.snp.makeConstraints { make in make.right.equalToSuperview().offset(-82) make.centerY.equalToSuperview() make.height.equalTo(52) } for i in 0...2{ let answerView = Lesson_3_AnswerView.jq_loadNibView() answerView.alpha = 0 answerView.btn_choose.addTarget(self, action: #selector(chooseAnswerAction), for: .touchUpInside) answerView.btn_fullscreen.addTarget(self, action: #selector(fullscreenAction), for: .touchUpInside) answerView.btn_choose.tag = 10+i answerView.btn_fullscreen.tag = 20+i answerView.snp.makeConstraints { make in make.width.equalTo(85) make.height.equalTo(52) } UIView.animate(withDuration: 0.05 + Double(i)) { answerView.alpha = 1 } stackView.insertArrangedSubview(answerView, at: 0) } } @objc private func chooseAnswerAction(btn:UIButton){ let index = btn.tag - 10 var subV:Lesson_3_AnswerView? for (i,v) in stackView.arrangedSubviews.reversed().enumerated(){ if index == i{subV = v as? Lesson_3_AnswerView;break} } var answerType:Fight_lessonType = .none answerType = .success switch answerType { case .success: viewModel.answerType.accept(.success) let copyViewFrame = subV?.convert(subV!.bounds, to: self.view) let copyView = subV?.copyView() copyView?.frame = copyViewFrame! copyView?.backgroundColor = .red self.view.addSubview(copyView!) copyView?.layoutIfNeeded() if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_3_CCell", for: viewModel.selectIndex.value!) as? ListenFight_lesson_3_CCell{ cell.layoutIfNeeded() var newFrame = cell.img_cover.convert(cell.img_cover.bounds, to: self.view) copyView?.img_cover.image = cell.img_cover.image newFrame.origin.x += 97 newFrame.origin.y += (JQ_NavBarHeight - 15) UIView.animate(withDuration: 0.4) { copyView?.frame = newFrame } completion: { _ in for subView in self.stackView.arrangedSubviews{ subView.removeFromSuperview() } } } case .fail: viewModel.answerType.accept(.fail) UIView.animate(withDuration: 0.4) { subV?.img_state.alpha = 1 subV?.btn_fullscreen.alpha = 0 }completion: { _ in DispatchQueue.main.asyncAfter(deadline: .now()+1.5) { self.setAnswerStackView() } } default:break } } @objc private func fullscreenAction(btn:UIButton){ print("全屏:\(btn.tag)") } } extension HomeListenFight_lesson_3_VC:UICollectionViewDelegate{ func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { viewModel.selectIndex.accept(indexPath) setAnswerStackView() } } extension HomeListenFight_lesson_3_VC:UICollectionViewDelegateFlowLayout{ func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize { if section == 0{ return CGSize.zero } return CGSizeMake(JQ_ScreenW, 100) } } extension HomeListenFight_lesson_3_VC:UICollectionViewDataSource{ func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_3_CCell", for: indexPath) as! ListenFight_lesson_3_CCell cell.backgroundColor = .clear cell.contentView.backgroundColor = .clear return cell } func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { let reusableView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "header", for: indexPath) return reusableView } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 3 } func numberOfSections(in collectionView: UICollectionView) -> Int { return 2 } } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_4_VC.swift
New file @@ -0,0 +1,201 @@ // // HomeListenFight_lesson_4_VC.swift // DolphinEnglishLearnStudent // // Created by 无故事王国 on 2024/5/28. // import UIKit class HomeListenFight_lesson_4_VC: BaseVC { private var viewModel = FightAnswerViewModel() private lazy var stackView:UIStackView = { let sta = UIStackView() sta.spacing = 41 sta.distribution = .equalSpacing sta.axis = .vertical return sta }() private lazy var collectionView:UICollectionView = { let flowLayout = UICollectionViewFlowLayout() let w = (JQ_ScreenW - 164 * 2 - 62) / 2.0 flowLayout.itemSize = CGSize(width: w, height: w * 0.842) flowLayout.minimumInteritemSpacing = 0 flowLayout.scrollDirection = .vertical let collection = UICollectionView(frame: .zero, collectionViewLayout: flowLayout) collection.contentInset = UIEdgeInsets(top: 33, left: 0, bottom: 0, right: 0) collection.register(UINib(nibName: "ListenFight_lesson_4_CCell", bundle: nil), forCellWithReuseIdentifier: "_ListenFight_lesson_4_CCell") collection.register(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "header") return collection }() override func viewDidLoad() { super.viewDidLoad() } override func setUI() { super.setUI() collectionView.delegate = self collectionView.dataSource = self collectionView.showsVerticalScrollIndicator = false collectionView.backgroundColor = .clear view.addSubview(collectionView) collectionView.snp.makeConstraints { make in make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(0) make.left.equalTo(164) make.width.equalTo(JQ_ScreenW - 164 * 2) make.bottom.equalToSuperview() } } private func setAnswerStackView(){ for subView in stackView.arrangedSubviews{ subView.removeFromSuperview() } if !view.subviews.contains(stackView){ view.addSubview(stackView) stackView.snp.makeConstraints { make in make.right.equalToSuperview().offset(-14) make.centerY.equalToSuperview() } } for i in 0...2{ let answerView = Lesson_4_AnswerView.jq_loadNibView() answerView.btn_choose.tag = 10 + i answerView.btn_choose.addTarget(self, action: #selector(answerAction), for: .touchUpInside) answerView.alpha = 0 answerView.snp.makeConstraints { make in make.width.equalTo(221) make.height.equalTo(52) } UIView.animate(withDuration: 0.05 + Double(i)) { answerView.alpha = 1 } stackView.insertArrangedSubview(answerView, at: 0) } } @objc func answerAction(btn:UIButton){ var tempSubV:Lesson_4_AnswerView? for subV in stackView.arrangedSubviews{ if let s = subV as? Lesson_4_AnswerView{ s.btn_choose.isSelected = btn.tag == s.btn_choose.tag if s.btn_choose.isSelected{tempSubV = s} } } var answerType:Fight_lessonType = .none answerType = .success switch answerType { case .success: DispatchQueue.main.asyncAfter(deadline: .now()+0.4) { if let copyView = tempSubV?.copyView(){ tempSubV?.alpha = 0 let newRect = tempSubV!.view_handle.convert(tempSubV!.bounds, to: self.view) copyView.frame = CGRect(origin: newRect.origin, size: CGSize(width: 152, height: 52)) copyView.view_state.isHidden = true self.view.addSubview(copyView) self.view.layoutIfNeeded() //获取Cell的顶部试图 if let cell = self.collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_4_CCell", for: self.viewModel.selectIndex.value!) as? ListenFight_lesson_4_CCell{ var newRect1 = cell.convert(cell.bounds, to: self.collectionView) newRect1.origin.x += 76 newRect1.origin.y += 33 self.collectionView.reloadData() UIView.animate(withDuration: 0.4) { copyView.frame = CGRect(origin: newRect1.origin, size: CGSize(width: 152, height: 52)) } completion: { _ in self.setAnswerStackView() } } } } case .fail: UIView.animate(withDuration: 0.4) { tempSubV?.img_state.alpha = 1 }completion: { _ in DispatchQueue.main.asyncAfter(deadline: .now()+3) { self.setAnswerStackView() } } case .none: break } } } extension HomeListenFight_lesson_4_VC:UICollectionViewDelegate{ func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { viewModel.selectIndex.accept(indexPath) UIView.animate(withDuration: 0.5) { self.collectionView.snp.remakeConstraints { make in make.left.equalTo(76) make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(0) make.width.equalTo(JQ_ScreenW - 164 * 2) make.bottom.equalToSuperview() } self.view.layoutIfNeeded() } self.setAnswerStackView() } } extension HomeListenFight_lesson_4_VC:UICollectionViewDelegateFlowLayout{ func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize { return CGSize.zero } } extension HomeListenFight_lesson_4_VC:UICollectionViewDataSource{ func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_4_CCell", for: indexPath) as! ListenFight_lesson_4_CCell cell.backgroundColor = .clear cell.contentView.backgroundColor = .clear if indexPath == viewModel.selectIndex.value{ UIView.animate(withDuration: 0.4, delay: 0, usingSpringWithDamping: 0.4, initialSpringVelocity: 0.4,options: .layoutSubviews) { cell.img_state.alpha = 1 cell.img_state.transform = .init(scaleX: 1.0, y: 1.0) } }else{ cell.img_state.alpha = 0 cell.img_state.transform = .init(scaleX: 0.1, y: 0.1) } return cell } func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { let reusableView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "header", for: indexPath) return reusableView } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 2 } func numberOfSections(in collectionView: UICollectionView) -> Int { return 2 } } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_5_VC.swift
New file @@ -0,0 +1,173 @@ // // HomeListenFight_lesson_5_VC.swift // DolphinEnglishLearnStudent // // Created by 无故事王国 on 2024/5/28. // import UIKit class HomeListenFight_lesson_5_VC: BaseVC { private var viewModel = FightAnswerViewModel() private lazy var collectionView:UICollectionView = { let flowLayout = UICollectionViewFlowLayout() let w = (JQ_ScreenW - 189 * 2 - 18) / 2.0 flowLayout.itemSize = CGSize(width: w, height: w * 0.75) flowLayout.minimumInteritemSpacing = 15 flowLayout.minimumLineSpacing = 15 flowLayout.scrollDirection = .vertical let collection = UICollectionView(frame: .zero, collectionViewLayout: flowLayout) collection.register(UINib(nibName: "ListenFight_lesson_1_CCell", bundle: nil), forCellWithReuseIdentifier: "_ListenFight_lesson_1_CCell") collection.register(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "header") return collection }() private lazy var stackView:UIStackView = { let sta = UIStackView() sta.spacing = 89 sta.distribution = .equalSpacing sta.axis = .horizontal return sta }() override func viewDidLoad() { super.viewDidLoad() } override func setUI() { super.setUI() collectionView.delegate = self collectionView.dataSource = self collectionView.showsVerticalScrollIndicator = false collectionView.backgroundColor = .clear view.addSubview(collectionView) collectionView.snp.makeConstraints { make in make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(89) make.left.equalTo(189) make.width.equalTo(JQ_ScreenW - 189 * 2) make.bottom.equalToSuperview() } view.addSubview(stackView) stackView.snp.makeConstraints { make in make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(19) make.centerX.equalToSuperview() make.height.equalTo(52) } setAnswerStackView() } private func setAnswerStackView(){ for subView in stackView.arrangedSubviews{ subView.removeFromSuperview() } if !view.subviews.contains(stackView){ view.addSubview(stackView) stackView.snp.makeConstraints { make in make.right.equalToSuperview().offset(-14) make.centerY.equalToSuperview() } } for i in 0...3{ let answerView = StudyHandleView.jq_loadNibView() answerView.view_choose.isHidden = true answerView.snp.makeConstraints { make in make.width.equalTo(159) make.height.equalTo(52) } UIView.animate(withDuration: 0.05 + Double(i)) { answerView.alpha = 1 } stackView.insertArrangedSubview(answerView, at: 0) } } } extension HomeListenFight_lesson_5_VC:UICollectionViewDelegate{ func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { viewModel.selectIndex.accept(indexPath) var answerType:Fight_lessonType = .none answerType = .success let tempSubV = stackView.arrangedSubviews[indexPath.row] as! StudyHandleView switch answerType { case .success: DispatchQueue.main.asyncAfter(deadline: .now()+0.4) { let copyView = tempSubV.copyView() copyView.view_choose.isHidden = true tempSubV.alpha = 0 let newRect = tempSubV.convert(tempSubV.bounds, to: self.view) copyView.frame = CGRect(origin: newRect.origin, size: CGSize(width: 159, height: 52)) self.view.addSubview(copyView) //获取Cell的顶部试图 let flowLayout = self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout if let cell = self.collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_1_CCell", for: self.viewModel.selectIndex.value!) as? ListenFight_lesson_1_CCell{ var newRect1 = cell.convert(cell.bounds, to: self.collectionView) newRect1.origin.x += (collectionView.frame.origin.x + 5) newRect1.origin.y += 94 UIView.animateKeyframes(withDuration: 0.4, delay: 0,options: .calculationModeLinear) { copyView.frame = CGRect(origin: newRect1.origin, size: CGSize(width: flowLayout.itemSize.width - 10 , height: 40)) }completion: { _ in } } } case .fail: collectionView.reloadData() case .none: break } } } extension HomeListenFight_lesson_5_VC:UICollectionViewDelegateFlowLayout{ func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize { return CGSize.zero } } extension HomeListenFight_lesson_5_VC:UICollectionViewDataSource{ func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_1_CCell", for: indexPath) as! ListenFight_lesson_1_CCell cell.jq_addShadows(shadowColor: .black.withAlphaComponent(0.31), corner: 8, radius: 3, offset: CGSize(width: 0, height: 1), opacity: 1) if viewModel.selectIndex.value == indexPath{ cell.setState(state: .success) }else{ cell.setState(state: .none) } return cell } func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { let reusableView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "header", for: indexPath) return reusableView } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 4 } func numberOfSections(in collectionView: UICollectionView) -> Int { return 1 } } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_1_VC.swift
New file @@ -0,0 +1,72 @@ // // HomeListenGame_1_VC.swift // DolphinEnglishLearnStudent // // Created by 无故事王国 on 2024/5/28. // import UIKit class HomeListenGame_1_VC: BaseVC { private var viewModel = FightAnswerViewModel() private lazy var collectionView:UICollectionView = { let flowLayout = UICollectionViewFlowLayout() let w = (JQ_ScreenW - 35 * 2 - 12) / 4.0 flowLayout.itemSize = CGSize(width: w, height: w * 0.73) flowLayout.minimumInteritemSpacing = 3 flowLayout.minimumLineSpacing = 13 flowLayout.scrollDirection = .vertical let collection = UICollectionView(frame: .zero, collectionViewLayout: flowLayout) collection.contentInset = UIEdgeInsets(top: 0, left: 35, bottom: 0, right: 35) collection.register(UINib(nibName: "ListenFight_Game_CCell", bundle: nil), forCellWithReuseIdentifier: "_ListenFight_Game_CCell") return collection }() override func viewDidLoad() { super.viewDidLoad() ChooseLevelView.show { level in GameBeginTipView.show { } } } override func setUI() { super.setUI() collectionView.delegate = self collectionView.dataSource = self collectionView.showsVerticalScrollIndicator = false collectionView.backgroundColor = .clear view.addSubview(collectionView) collectionView.snp.makeConstraints { make in make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(99) make.left.right.equalToSuperview() make.bottom.equalToSuperview() } } } extension HomeListenGame_1_VC:UICollectionViewDelegate{ func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { viewModel.selectIndex.accept(indexPath) } } extension HomeListenGame_1_VC:UICollectionViewDataSource{ func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_Game_CCell", for: indexPath) as! ListenFight_Game_CCell cell.backgroundColor = .jq_randomColor cell.contentView.backgroundColor = .jq_randomColor return cell } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 12 } } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenGame_2_VC.swift
New file @@ -0,0 +1,19 @@ // // HomeListenGame_2_VC.swift // DolphinEnglishLearnStudent // // Created by 无故事王国 on 2024/5/28. // import UIKit class HomeListenGame_2_VC: BaseVC { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift
@@ -53,6 +53,25 @@ if indexPath.row == 1{ JQ_currentViewController().jq_push(vc: HomeListenFightVC(listenType: .lesson2)) } if indexPath.row == 2{ JQ_currentViewController().jq_push(vc: HomeListenFightVC(listenType: .lesson3)) } if indexPath.row == 3{ JQ_currentViewController().jq_push(vc: HomeListenFightVC(listenType: .lesson4)) } if indexPath.row == 4{ JQ_currentViewController().jq_push(vc: HomeListenFightVC(listenType: .lesson5)) } if indexPath.row == 5{ JQ_currentViewController().jq_push(vc: HomeListenFightVC(listenType: .game1)) } if indexPath.row == 6{ JQ_currentViewController().jq_push(vc: HomeListenFightVC(listenType: .game2)) } } } } @@ -62,11 +81,11 @@ if section == 0{ return 1 } return 5 return 8 } func numberOfSections(in tableView: UITableView) -> Int { if page <= 5{ if page <= 6{ return 2 } return 1 @@ -78,6 +97,7 @@ return cell }else{ let cell = tableView.dequeueReusableCell(withIdentifier: "_HomeListen_item_TCell", for: indexPath) as! HomeListen_item_TCell cell.label_title.text = "\(indexPath.row + 1)" return cell } } DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenVC.swift
@@ -12,7 +12,7 @@ class HomeListenVC: BaseVC { //限制后面的点击:天数(1开始) private var limitDay = 5 private var limitDay = 7 private lazy var menu:SPPageMenu = { let menu = SPPageMenu(frame: .zero, trackerStyle: .line) DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.swift
New file @@ -0,0 +1,66 @@ // // ChooseLevelView.swift // DolphinEnglishLearnStudent // // Created by 无故事王国 on 2024/5/28. // import UIKit import JQTools import QMUIKit class ChooseLevelView: UIView,JQNibView{ @IBOutlet weak var view_container: UIView! @IBOutlet weak var tackView_level: UIStackView! private var clouseLevel:((Int)->Void)! private var level:Int = 1 override func awakeFromNib() { super.awakeFromNib() alpha = 0 transform = .init(scaleX: 0.1, y: 0.1) layoutIfNeeded() } static func show(clouse:@escaping (Int)->Void){ let levelView = ChooseLevelView.jq_loadNibView() levelView.clouseLevel = clouse sceneDelegate?.window?.addSubview(levelView) levelView.frame = sceneDelegate?.window?.frame ?? .zero UIView.animate(withDuration: 0.4) { levelView.transform = .init(scaleX: 1.0, y: 1.0) levelView.alpha = 1 } completion: { _ in } } @IBAction func chooseAction(_ sender: QMUIButton) { level = sender.tag - 9 for subView in tackView_level.arrangedSubviews as! [QMUIButton]{ subView.isSelected = sender.tag == subView.tag } } @IBAction func closeAction(_ sender: UIButton) { UIView.animate(withDuration: 0.4) { self.transform = .init(scaleX: 0.1, y: 0.1) self.alpha = 0 } completion: { _ in self.removeFromSuperview() } } @IBAction func completeAction(_ sender: UIButton) { UIView.animate(withDuration: 0.4) { self.transform = .init(scaleX: 0.1, y: 0.1) self.alpha = 0 } completion: { _ in self.removeFromSuperview() self.clouseLevel(self.level) } } } DolphinEnglishLearnStudent/Moudle/Home/Listen/View/ChooseLevelView.xib
New file @@ -0,0 +1,187 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="ipad10_9rounded" orientation="portrait" layout="fullscreen" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="ChooseLevelView" customModule="DolphinEnglishLearnStudent" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="820" height="1180"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="x4l-72-4Ul"> <rect key="frame" x="206" y="469.5" width="408" height="245"/> <subviews> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="提示" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HNc-nA-rkX"> <rect key="frame" x="185.5" y="32" width="37" height="18"/> <constraints> <constraint firstAttribute="height" constant="18" id="rha-Hn-Pf2"/> </constraints> <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="请选择难度:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SZ9-8L-wUx"> <rect key="frame" x="47" y="96" width="90" height="19.5"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.81000000000000005" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="16" translatesAutoresizingMaskIntoConstraints="NO" id="5Gu-z5-bpP"> <rect key="frame" x="145" y="95.5" width="224" height="21"/> <subviews> <button opaque="NO" tag="10" contentMode="scaleToFill" selected="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="90w-7c-Frs" customClass="QMUIButton"> <rect key="frame" x="0.0" y="0.0" width="64" height="21"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="入门级" image="btn_radio_u_cir"> <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> </state> <state key="selected" image="btn_radio_cir"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="number" keyPath="spacingBetweenImageAndTitle"> <real key="value" value="7"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="chooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="3VF-Iw-62q"/> </connections> </button> <button opaque="NO" tag="11" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="GxK-lP-67f" customClass="QMUIButton"> <rect key="frame" x="80" y="0.0" width="64" height="21"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="中级" image="btn_radio_u_cir"> <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> </state> <state key="selected" image="btn_radio_cir"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="number" keyPath="spacingBetweenImageAndTitle"> <real key="value" value="7"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="chooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="qgs-B5-ekd"/> </connections> </button> <button opaque="NO" tag="12" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="JeY-VZ-dhW" customClass="QMUIButton"> <rect key="frame" x="160" y="0.0" width="64" height="21"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="高级" image="btn_radio_u_cir"> <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> </state> <state key="selected" image="btn_radio_cir"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="number" keyPath="spacingBetweenImageAndTitle"> <real key="value" value="7"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="chooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="eeg-bM-Nja"/> </connections> </button> </subviews> </stackView> <stackView opaque="NO" contentMode="scaleToFill" spacing="27" translatesAutoresizingMaskIntoConstraints="NO" id="Wkm-Kk-HI1"> <rect key="frame" x="66.5" y="179" width="275" height="40"/> <subviews> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="CV9-Xp-hsa"> <rect key="frame" x="0.0" y="0.0" width="124" height="40"/> <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <constraints> <constraint firstAttribute="width" constant="124" id="Czz-hv-Fc1"/> <constraint firstAttribute="height" constant="40" id="wSs-0H-v3Q"/> </constraints> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="关闭"> <color key="titleColor" red="0.31764705879999999" green="0.66666666669999997" blue="0.92941176469999998" alpha="1" colorSpace="calibratedRGB"/> </state> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="4"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB"> <color key="value" red="0.31764705879999999" green="0.66666666669999997" blue="0.92941176469999998" alpha="1" colorSpace="calibratedRGB"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB"> <real key="value" value="1"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="closeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="NAe-Wr-co7"/> </connections> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jOc-UA-Yvr"> <rect key="frame" x="151" y="0.0" width="124" height="40"/> <color key="backgroundColor" red="0.31764705879999999" green="0.66666666669999997" blue="0.92941176469999998" alpha="1" colorSpace="calibratedRGB"/> <constraints> <constraint firstAttribute="height" constant="40" id="3Z5-80-z2X"/> <constraint firstAttribute="width" constant="124" id="EST-fQ-jxE"/> </constraints> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="确认"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="4"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="completeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="Xu6-7d-ghE"/> </connections> </button> </subviews> </stackView> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="width" secondItem="x4l-72-4Ul" secondAttribute="height" multiplier="1:0.6" id="5H7-3R-Ce4"/> <constraint firstAttribute="bottom" secondItem="Wkm-Kk-HI1" secondAttribute="bottom" constant="26" id="HBo-2R-Igz"/> <constraint firstItem="SZ9-8L-wUx" firstAttribute="leading" secondItem="x4l-72-4Ul" secondAttribute="leading" constant="47" id="WrE-t4-mO9"/> <constraint firstItem="HNc-nA-rkX" firstAttribute="top" secondItem="x4l-72-4Ul" secondAttribute="top" constant="32" id="Yux-eq-vs6"/> <constraint firstItem="Wkm-Kk-HI1" firstAttribute="centerX" secondItem="x4l-72-4Ul" secondAttribute="centerX" id="gzz-BE-KXu"/> <constraint firstItem="SZ9-8L-wUx" firstAttribute="top" secondItem="x4l-72-4Ul" secondAttribute="top" constant="96" id="kED-7u-3TD"/> <constraint firstItem="HNc-nA-rkX" firstAttribute="centerX" secondItem="x4l-72-4Ul" secondAttribute="centerX" id="rh3-JQ-Fem"/> <constraint firstItem="5Gu-z5-bpP" firstAttribute="leading" secondItem="SZ9-8L-wUx" secondAttribute="trailing" constant="8" id="tfL-t0-6rJ"/> <constraint firstItem="5Gu-z5-bpP" firstAttribute="centerY" secondItem="SZ9-8L-wUx" secondAttribute="centerY" id="twO-ly-hUx"/> <constraint firstAttribute="height" constant="245" id="uGV-vZ-dDD"/> </constraints> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="10"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> </userDefinedRuntimeAttributes> </view> </subviews> <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/> <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstItem="x4l-72-4Ul" firstAttribute="centerX" secondItem="vUN-kp-3ea" secondAttribute="centerX" id="qUX-A9-fAd"/> <constraint firstItem="x4l-72-4Ul" firstAttribute="centerY" secondItem="vUN-kp-3ea" secondAttribute="centerY" id="vBn-p9-1pN"/> </constraints> <connections> <outlet property="tackView_level" destination="5Gu-z5-bpP" id="mpe-aW-FdQ"/> <outlet property="view_container" destination="x4l-72-4Ul" id="twD-2O-23d"/> </connections> <point key="canvasLocation" x="61" y="20"/> </view> </objects> <resources> <image name="btn_radio_cir" width="21" height="21"/> <image name="btn_radio_u_cir" width="21" height="20"/> <systemColor name="systemBackgroundColor"> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> </resources> </document> DolphinEnglishLearnStudent/Moudle/Home/Listen/View/GameBeginTipView.swift
New file @@ -0,0 +1,88 @@ // // GameBeginTipView.swift // DolphinEnglishLearnStudent // // Created by 无故事王国 on 2024/5/28. // import UIKit import JQTools import QMUIKit class GameBeginTipView: UIView,JQNibView{ @IBOutlet weak var view_container: UIView! @IBOutlet weak var label_time: UILabel! private var completeClouse:(()->Void)! override func awakeFromNib() { super.awakeFromNib() alpha = 0 transform = .init(scaleX: 0.1, y: 0.1) layoutIfNeeded() } static func show(clouse:@escaping ()->Void){ let levelView = GameBeginTipView.jq_loadNibView() levelView.completeClouse = clouse sceneDelegate?.window?.addSubview(levelView) levelView.frame = sceneDelegate?.window?.frame ?? .zero UIView.animate(withDuration: 0.4) { levelView.transform = .init(scaleX: 1.0, y: 1.0) levelView.alpha = 1 } completion: { _ in levelView.layoutIfNeeded() var time:Int = 5 Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in time -= 1 levelView.label_time.text = "\(time)" levelView.animation() if time <= 0{ timer.invalidate() UIView.animate(withDuration: 0.4) { levelView.transform = .init(scaleX: 0.1, y: 0.1) levelView.alpha = 0 } completion: { _ in levelView.removeFromSuperview() levelView.completeClouse() } } } } } private func animation(){ let aniLabel = label_time.customCopy() aniLabel.frame = label_time.frame self.view_container.addSubview(aniLabel) UIView.animate(withDuration: 1.0) { aniLabel.alpha = 0 aniLabel.transform = .init(scaleX: 2.5, y: 2.5) }completion: { _ in aniLabel.removeFromSuperview() } } @IBAction func completeAction(_ sender: UIButton) { UIView.animate(withDuration: 0.4) { self.transform = .init(scaleX: 0.1, y: 0.1) self.alpha = 0 } completion: { _ in self.removeFromSuperview() self.completeClouse() } } } private extension UILabel{ func customCopy()->UILabel{ let copyLabel = UILabel() copyLabel.font = self.font copyLabel.alpha = 1 copyLabel.text = self.text copyLabel.textColor = self.textColor copyLabel.textAlignment = .center return copyLabel } } DolphinEnglishLearnStudent/Moudle/Home/Listen/View/GameBeginTipView.xib
New file @@ -0,0 +1,108 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="ipad10_9rounded" orientation="landscape" layout="fullscreen" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="GameBeginTipView" customModule="DolphinEnglishLearnStudent" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="1180" height="820"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="V8a-Jc-oJ6"> <rect key="frame" x="385.5" y="289.5" width="409" height="245"/> <subviews> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="提示" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rb4-KR-EuP"> <rect key="frame" x="186" y="32" width="37" height="18"/> <constraints> <constraint firstAttribute="height" constant="18" id="boa-7C-lYw"/> </constraints> <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="游戏将在倒计时结束后开始,请注意听题!" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CFF-3K-SiP"> <rect key="frame" x="53.5" y="67" width="302.5" height="20"/> <constraints> <constraint firstAttribute="height" constant="20" id="eWP-cM-3cB"/> </constraints> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.58999999999999997" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="5" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5e5-ea-cUc"> <rect key="frame" x="0.0" y="92" width="409" height="88"/> <fontDescription key="fontDescription" name="Impact" family="Impact" pointSize="72"/> <color key="textColor" red="0.25490196078431371" green="0.63529411764705879" blue="0.92156862745098034" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xBM-3M-8RU"> <rect key="frame" x="94" y="189" width="221" height="40"/> <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="40" id="dCN-yv-6rA"/> </constraints> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" title="立即开始"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="4"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="completeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="0fJ-wl-fg2"/> </connections> </button> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="xBM-3M-8RU" firstAttribute="leading" secondItem="V8a-Jc-oJ6" secondAttribute="leading" constant="94" id="6Zf-39-taQ"/> <constraint firstItem="CFF-3K-SiP" firstAttribute="centerX" secondItem="rb4-KR-EuP" secondAttribute="centerX" id="8Oa-Tq-x1T"/> <constraint firstItem="xBM-3M-8RU" firstAttribute="centerX" secondItem="rb4-KR-EuP" secondAttribute="centerX" id="BTj-EW-az2"/> <constraint firstItem="5e5-ea-cUc" firstAttribute="leading" secondItem="V8a-Jc-oJ6" secondAttribute="leading" id="CxO-Qq-ZlR"/> <constraint firstAttribute="trailing" secondItem="xBM-3M-8RU" secondAttribute="trailing" constant="94" id="ECx-y1-EW7"/> <constraint firstAttribute="width" secondItem="V8a-Jc-oJ6" secondAttribute="height" multiplier="1:0.5994" id="EUj-h8-jXt"/> <constraint firstItem="5e5-ea-cUc" firstAttribute="top" secondItem="CFF-3K-SiP" secondAttribute="bottom" constant="5" id="IkZ-q9-lUa"/> <constraint firstAttribute="trailing" secondItem="5e5-ea-cUc" secondAttribute="trailing" id="Rct-zJ-FRC"/> <constraint firstItem="CFF-3K-SiP" firstAttribute="top" secondItem="rb4-KR-EuP" secondAttribute="bottom" constant="17" id="ekD-DV-h2c"/> <constraint firstItem="5e5-ea-cUc" firstAttribute="centerX" secondItem="rb4-KR-EuP" secondAttribute="centerX" id="fst-vW-9Bb"/> <constraint firstAttribute="bottom" secondItem="xBM-3M-8RU" secondAttribute="bottom" constant="16" id="mt1-ua-8HO"/> <constraint firstItem="rb4-KR-EuP" firstAttribute="top" secondItem="V8a-Jc-oJ6" secondAttribute="top" constant="32" id="qOG-CC-CG4"/> <constraint firstAttribute="height" constant="245" id="qUC-hS-Nzw"/> <constraint firstItem="rb4-KR-EuP" firstAttribute="centerX" secondItem="V8a-Jc-oJ6" secondAttribute="centerX" id="wfs-hz-nxT"/> </constraints> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="10"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </view> </subviews> <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/> <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstItem="V8a-Jc-oJ6" firstAttribute="centerY" secondItem="vUN-kp-3ea" secondAttribute="centerY" id="WYo-2n-d4F"/> <constraint firstItem="V8a-Jc-oJ6" firstAttribute="centerX" secondItem="vUN-kp-3ea" secondAttribute="centerX" id="yPy-6D-xcr"/> </constraints> <connections> <outlet property="label_time" destination="5e5-ea-cUc" id="XRc-Ez-qeG"/> <outlet property="view_container" destination="V8a-Jc-oJ6" id="Rb2-y4-qeK"/> </connections> <point key="canvasLocation" x="61" y="20"/> </view> </objects> <resources> <systemColor name="systemBackgroundColor"> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> </resources> </document> DolphinEnglishLearnStudent/Moudle/Home/Listen/View/Lesson_3_AnswerView.swift
New file @@ -0,0 +1,32 @@ // // Lesson_3_AnswerView.swift // DolphinEnglishLearnStudent // // Created by 无故事王国 on 2024/5/27. // import UIKit import JQTools class Lesson_3_AnswerView: UIView,JQNibView{ @IBOutlet weak var img_state: UIImageView! @IBOutlet weak var btn_choose: UIButton! @IBOutlet weak var btn_fullscreen: UIButton! @IBOutlet weak var img_cover: UIImageView! override func awakeFromNib() { super.awakeFromNib() img_state.alpha = 0 } @IBAction func fullscreenAction(_ sender: UIButton) { } func copyView()->Lesson_3_AnswerView{ let copyV = Lesson_3_AnswerView.jq_loadNibView() copyV.bounds = self.bounds return copyV } } DolphinEnglishLearnStudent/Moudle/Home/Listen/View/Lesson_3_AnswerView.xib
New file @@ -0,0 +1,78 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="ipad10_9rounded" orientation="portrait" layout="fullscreen" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="Lesson_3_AnswerView" customModule="DolphinEnglishLearnStudent" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="109" height="52"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="CCd-CG-c2c"> <rect key="frame" x="0.0" y="0.0" width="109" height="52"/> </imageView> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_fail" translatesAutoresizingMaskIntoConstraints="NO" id="5f1-hr-qeo"> <rect key="frame" x="34.5" y="6" width="40" height="40"/> <constraints> <constraint firstAttribute="width" constant="40" id="kVm-un-uT2"/> <constraint firstAttribute="height" constant="40" id="x1u-18-WvZ"/> </constraints> </imageView> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="HEL-Qx-AZ6"> <rect key="frame" x="0.0" y="0.0" width="109" height="52"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="lsC-KD-Ubq"> <rect key="frame" x="79" y="-4" width="34" height="34"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="icon_fullScreen"/> <connections> <action selector="fullscreenAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="Uc9-lH-7i1"/> </connections> </button> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="CCd-CG-c2c" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="0lR-wa-kf0"/> <constraint firstAttribute="trailing" secondItem="CCd-CG-c2c" secondAttribute="trailing" id="6mx-m0-SBM"/> <constraint firstAttribute="bottom" secondItem="CCd-CG-c2c" secondAttribute="bottom" id="8BN-vk-9Ex"/> <constraint firstItem="HEL-Qx-AZ6" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="92l-QJ-G0c"/> <constraint firstItem="HEL-Qx-AZ6" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="UeJ-VW-jKb"/> <constraint firstAttribute="bottom" secondItem="HEL-Qx-AZ6" secondAttribute="bottom" id="ZmM-zn-mIT"/> <constraint firstItem="CCd-CG-c2c" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="c6t-Hh-BhR"/> <constraint firstItem="5f1-hr-qeo" firstAttribute="centerX" secondItem="CCd-CG-c2c" secondAttribute="centerX" id="j25-sz-lbO"/> <constraint firstItem="5f1-hr-qeo" firstAttribute="centerY" secondItem="CCd-CG-c2c" secondAttribute="centerY" id="qFU-Vr-9X5"/> <constraint firstAttribute="trailing" secondItem="HEL-Qx-AZ6" secondAttribute="trailing" id="so9-ay-EmQ"/> <constraint firstAttribute="trailing" secondItem="lsC-KD-Ubq" secondAttribute="trailing" constant="-4" id="wb6-UI-mdg"/> <constraint firstItem="lsC-KD-Ubq" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="-4" id="xzn-fY-YTT"/> </constraints> <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="8"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <outlet property="btn_choose" destination="HEL-Qx-AZ6" id="1JV-QC-IUY"/> <outlet property="btn_fullscreen" destination="lsC-KD-Ubq" id="1rA-Ol-u91"/> <outlet property="img_cover" destination="CCd-CG-c2c" id="3XA-hS-oxl"/> <outlet property="img_state" destination="5f1-hr-qeo" id="7li-fQ-6OE"/> </connections> <point key="canvasLocation" x="-167.19512195121951" y="-253.22033898305085"/> </view> </objects> <resources> <image name="icon_fail" width="80" height="80"/> <image name="icon_fullScreen" width="34" height="34"/> <systemColor name="systemBackgroundColor"> <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> </resources> </document> DolphinEnglishLearnStudent/Moudle/Home/Listen/View/Lesson_4_AnswerView.swift
New file @@ -0,0 +1,32 @@ // // Lesson_4_AnswerView.swift // DolphinEnglishLearnStudent // // Created by 无故事王国 on 2024/5/28. // import UIKit import JQTools class Lesson_4_AnswerView: UIView,JQNibView{ @IBOutlet weak var img_state: UIImageView! @IBOutlet weak var btn_choose: UIButton! @IBOutlet weak var view_state: UIView! @IBOutlet weak var view_handle: UIView! override func awakeFromNib() { super.awakeFromNib() img_state.alpha = 0 } func copyView()->Lesson_4_AnswerView{ let copyV = Lesson_4_AnswerView.jq_loadNibView() copyV.bounds = self.bounds return copyV } } DolphinEnglishLearnStudent/Moudle/Home/Listen/View/Lesson_4_AnswerView.xib
New file @@ -0,0 +1,101 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="ipad10_9rounded" orientation="portrait" layout="fullscreen" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="Lesson_4_AnswerView" customModule="DolphinEnglishLearnStudent" customModuleProvider="target"> <rect key="frame" x="0.0" y="0.0" width="234" height="52"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <stackView opaque="NO" contentMode="scaleToFill" distribution="equalSpacing" spacing="17" translatesAutoresizingMaskIntoConstraints="NO" id="ubz-gZ-9yW"> <rect key="frame" x="0.0" y="0.0" width="234" height="52"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qsr-6I-w3R"> <rect key="frame" x="0.0" y="0.0" width="152" height="52"/> <subviews> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="otl-1Z-qED"> <rect key="frame" x="18" y="9.5" width="33" height="33"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="icon_question"/> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="mba-RI-50M"> <rect key="frame" x="70" y="12.5" width="27" height="27"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="icon_play_1"/> </button> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_fail" translatesAutoresizingMaskIntoConstraints="NO" id="mkh-g4-79e"> <rect key="frame" x="108" y="10" width="32" height="32"/> <constraints> <constraint firstAttribute="height" constant="32" id="unt-83-tZW"/> <constraint firstAttribute="width" constant="32" id="yDR-8r-kHx"/> </constraints> </imageView> </subviews> <color key="backgroundColor" red="0.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstItem="mba-RI-50M" firstAttribute="leading" secondItem="otl-1Z-qED" secondAttribute="trailing" constant="19" id="0nx-t9-1zV"/> <constraint firstAttribute="width" constant="152" id="3Zx-vg-H2U"/> <constraint firstItem="otl-1Z-qED" firstAttribute="leading" secondItem="qsr-6I-w3R" secondAttribute="leading" constant="18" id="6CA-c8-Zr7"/> <constraint firstItem="mba-RI-50M" firstAttribute="centerY" secondItem="otl-1Z-qED" secondAttribute="centerY" id="FTc-eb-PWk"/> <constraint firstItem="mkh-g4-79e" firstAttribute="centerY" secondItem="otl-1Z-qED" secondAttribute="centerY" id="N6f-d4-80e"/> <constraint firstItem="mkh-g4-79e" firstAttribute="leading" secondItem="mba-RI-50M" secondAttribute="trailing" constant="11" id="a9o-Lq-9SP"/> <constraint firstItem="otl-1Z-qED" firstAttribute="centerY" secondItem="qsr-6I-w3R" secondAttribute="centerY" id="v0P-gn-zbN"/> </constraints> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="8"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Gbs-f8-132"> <rect key="frame" x="182" y="0.0" width="52" height="52"/> <subviews> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="v7f-gv-EWR"> <rect key="frame" x="0.0" y="0.0" width="52" height="52"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="btn_radio_u"/> <state key="selected" image="btn_radio"/> </button> </subviews> <constraints> <constraint firstAttribute="trailing" secondItem="v7f-gv-EWR" secondAttribute="trailing" id="1hR-5c-llk"/> <constraint firstItem="v7f-gv-EWR" firstAttribute="leading" secondItem="Gbs-f8-132" secondAttribute="leading" id="3wJ-TQ-8uq"/> <constraint firstAttribute="bottom" secondItem="v7f-gv-EWR" secondAttribute="bottom" id="GCe-Zk-vfw"/> <constraint firstItem="v7f-gv-EWR" firstAttribute="top" secondItem="Gbs-f8-132" secondAttribute="top" id="Uzt-W1-9lA"/> <constraint firstAttribute="width" constant="52" id="qf4-74-pQq"/> </constraints> </view> </subviews> </stackView> </subviews> <constraints> <constraint firstAttribute="trailing" secondItem="ubz-gZ-9yW" secondAttribute="trailing" id="2hW-IR-BhV"/> <constraint firstItem="ubz-gZ-9yW" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="HeQ-EX-wTa"/> <constraint firstItem="ubz-gZ-9yW" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="OkT-RW-3Kx"/> <constraint firstAttribute="bottom" secondItem="ubz-gZ-9yW" secondAttribute="bottom" id="iFU-tb-Rgx"/> </constraints> <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> <connections> <outlet property="btn_choose" destination="v7f-gv-EWR" id="wFE-Gp-xAd"/> <outlet property="img_state" destination="mkh-g4-79e" id="IzD-w8-jjK"/> <outlet property="view_handle" destination="qsr-6I-w3R" id="ptU-09-NIc"/> <outlet property="view_state" destination="Gbs-f8-132" id="Swt-nY-Bpv"/> </connections> <point key="canvasLocation" x="-163.17073170731706" y="-245.08474576271189"/> </view> </objects> <resources> <image name="btn_radio" width="52" height="52"/> <image name="btn_radio_u" width="52" height="52"/> <image name="icon_fail" width="80" height="80"/> <image name="icon_play_1" width="27" height="27"/> <image name="icon_question" width="33" height="33"/> </resources> </document>