fix
无故事王国
2024-05-24 b4f2c5448230917b1f5002f7f18ff3de8a2c5be8
fix
4 文件已重命名
2个文件已修改
29个文件已添加
1234 ■■■■■ 已修改文件
DolphinEnglishLearnStudent.xcodeproj/project.pbxproj 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio.imageset/btn_radio.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio.imageset/btn_radio@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio_u.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio_u.imageset/btn_radio_u.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio_u.imageset/btn_radio_u@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_play.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_play.imageset/icon_play.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_play.imageset/icon_play@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_play_1.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_play_1.imageset/icon_play_1.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_play_1.imageset/icon_play_1@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_playing.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_playing.imageset/icon_playing.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_playing.imageset/icon_playing@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_success_small.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_success_small.imageset/icon_success_small.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_success_small.imageset/icon_success_small@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_waring_small.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_waring_small.imageset/icon_waring_small.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_waring_small.imageset/icon_waring_small@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Base/BaseVC.swift 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_1_CCell.swift 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_1_CCell.xib 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenMenuVC.swift 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenMenuVC.xib 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenVC.swift 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/VC/HomeStudyCompleteVC.swift 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Moudle/Home/VC/HomeStudyCompleteVC.xib 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent/Other/UIView/StudyHandleView.xib 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DolphinEnglishLearnStudent.xcodeproj/project.pbxproj
@@ -51,8 +51,17 @@
        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 */; };
        133386382C007E91002EE788 /* HomeListenFight_lesson_2_VC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133386372C007E91002EE788 /* HomeListenFight_lesson_2_VC.swift */; };
        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 */; };
        13649E9C2C00304C001B04E2 /* ListenFight_lesson_1_CCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13649E9A2C00304C001B04E2 /* ListenFight_lesson_1_CCell.swift */; };
        13649E9D2C00304C001B04E2 /* ListenFight_lesson_1_CCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13649E9B2C00304C001B04E2 /* ListenFight_lesson_1_CCell.xib */; };
        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 */; };
        13AA25392C00759600F075B3 /* HomeStudyCompleteVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13AA25372C00759600F075B3 /* HomeStudyCompleteVC.swift */; };
        13AA253A2C00759600F075B3 /* HomeStudyCompleteVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13AA25382C00759600F075B3 /* HomeStudyCompleteVC.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 */; };
@@ -117,8 +126,17 @@
        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>"; };
        133386372C007E91002EE788 /* HomeListenFight_lesson_2_VC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeListenFight_lesson_2_VC.swift; 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; };
        13649E9A2C00304C001B04E2 /* ListenFight_lesson_1_CCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListenFight_lesson_1_CCell.swift; sourceTree = "<group>"; };
        13649E9B2C00304C001B04E2 /* ListenFight_lesson_1_CCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ListenFight_lesson_1_CCell.xib; sourceTree = "<group>"; };
        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>"; };
        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>"; };
        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>"; };
@@ -187,6 +205,7 @@
        1302783D2BFD973F00DDCE81 /* Home */ = {
            isa = PBXGroup;
            children = (
                13AA25362C00757300F075B3 /* VC */,
                13EEB89E2BFF2853002996FC /* Listen */,
                13EEB8942BFF1519002996FC /* CCell */,
                13EEB88F2BFED3C6002996FC /* View */,
@@ -233,6 +252,8 @@
                130278532BFD985E00DDCE81 /* CommonAlertView.xib */,
                130278542BFD985E00DDCE81 /* CommonInputView.swift */,
                130278552BFD985E00DDCE81 /* CommonInputView.xib */,
                1362C75E2BFF4BA900BD7F73 /* StudyHandleView.swift */,
                1362C7602BFF4BB100BD7F73 /* StudyHandleView.xib */,
            );
            path = UIView;
            sourceTree = "<group>";
@@ -328,6 +349,38 @@
            path = TCell;
            sourceTree = "<group>";
        };
        13649E992C002FDF001B04E2 /* CCell */ = {
            isa = PBXGroup;
            children = (
                13649E9A2C00304C001B04E2 /* ListenFight_lesson_1_CCell.swift */,
                13649E9B2C00304C001B04E2 /* ListenFight_lesson_1_CCell.xib */,
            );
            path = CCell;
            sourceTree = "<group>";
        };
        137CB4272BFF500700D32862 /* VC */ = {
            isa = PBXGroup;
            children = (
                13EEB89A2BFF1C35002996FC /* HomeListenMenuVC.swift */,
                13EEB89B2BFF1C35002996FC /* HomeListenMenuVC.xib */,
                13EEB89F2BFF28A7002996FC /* HomeListenVC.swift */,
                13EEB8AA2BFF36E0002996FC /* HomeListenSubVC.swift */,
                137CB4282BFF505800D32862 /* HomeListenFightVC.swift */,
                13649E972C002534001B04E2 /* HomeListenFight_lesson_1_VC.swift */,
                133386372C007E91002EE788 /* HomeListenFight_lesson_2_VC.swift */,
            );
            path = VC;
            sourceTree = "<group>";
        };
        13AA25362C00757300F075B3 /* VC */ = {
            isa = PBXGroup;
            children = (
                13AA25372C00759600F075B3 /* HomeStudyCompleteVC.swift */,
                13AA25382C00759600F075B3 /* HomeStudyCompleteVC.xib */,
            );
            path = VC;
            sourceTree = "<group>";
        };
        13EEB88F2BFED3C6002996FC /* View */ = {
            isa = PBXGroup;
            children = (
@@ -349,11 +402,9 @@
        13EEB89E2BFF2853002996FC /* Listen */ = {
            isa = PBXGroup;
            children = (
                13649E992C002FDF001B04E2 /* CCell */,
                137CB4272BFF500700D32862 /* VC */,
                13EEB8A12BFF3507002996FC /* TCell */,
                13EEB89A2BFF1C35002996FC /* HomeListenMenuVC.swift */,
                13EEB89B2BFF1C35002996FC /* HomeListenMenuVC.xib */,
                13EEB89F2BFF28A7002996FC /* HomeListenVC.swift */,
                13EEB8AA2BFF36E0002996FC /* HomeListenSubVC.swift */,
            );
            path = Listen;
            sourceTree = "<group>";
@@ -447,10 +498,12 @@
            buildActionMask = 2147483647;
            files = (
                13EEB8932BFED3FA002996FC /* AwardListView.xib in Resources */,
                13649E9D2C00304C001B04E2 /* ListenFight_lesson_1_CCell.xib in Resources */,
                13EEB89D2BFF1C35002996FC /* HomeListenMenuVC.xib in Resources */,
                130278882BFD9F2A00DDCE81 /* AddressManageHandleVC.xib in Resources */,
                130278612BFD999200DDCE81 /* LoginVC.xib in Resources */,
                13EEB8982BFF1531002996FC /* AwardListCCell.xib in Resources */,
                13AA253A2C00759600F075B3 /* HomeStudyCompleteVC.xib in Resources */,
                1302785B2BFD985E00DDCE81 /* CommonAlertView.xib in Resources */,
                130278972BFD9FBF00DDCE81 /* AddressManageTCell.xib in Resources */,
                1302787C2BFD9ED600DDCE81 /* MarketContentVC.xib in Resources */,
@@ -462,6 +515,7 @@
                130278362BFD957300DDCE81 /* Base 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 */,
@@ -522,16 +576,19 @@
            isa = PBXSourcesBuildPhase;
            buildActionMask = 2147483647;
            files = (
                13AA25392C00759600F075B3 /* HomeStudyCompleteVC.swift in Sources */,
                130278832BFD9F0700DDCE81 /* MeVC.swift in Sources */,
                130278992BFD9FBF00DDCE81 /* Home_1_TCell.swift in Sources */,
                1302784B2BFD979200DDCE81 /* TapBtn.swift in Sources */,
                13EEB8A82BFF354B002996FC /* HomeListen_item_TCell.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 */,
                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 */,
                13EEB8A42BFF353C002996FC /* HomeListen_process_TCell.swift in Sources */,
@@ -553,8 +610,11 @@
                13EEB8912BFED3F3002996FC /* AwardListView.swift in Sources */,
                130278412BFD978900DDCE81 /* Config.swift in Sources */,
                1302784A2BFD979200DDCE81 /* BaseVC.swift in Sources */,
                137CB4292BFF505800D32862 /* HomeListenFightVC.swift in Sources */,
                130278592BFD985E00DDCE81 /* BitrhdayPickerView.swift in Sources */,
                133386382C007E91002EE788 /* HomeListenFight_lesson_2_VC.swift in Sources */,
                1302787B2BFD9ED600DDCE81 /* MarketContentVC.swift in Sources */,
                13649E9C2C00304C001B04E2 /* ListenFight_lesson_1_CCell.swift in Sources */,
                13EEB8A02BFF28A7002996FC /* HomeListenVC.swift in Sources */,
                130278492BFD979200DDCE81 /* BaseTabBarVC.swift in Sources */,
            );
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio.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.imageset/btn_radio.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio.imageset/btn_radio@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio_u.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.imageset/btn_radio_u.png
DolphinEnglishLearnStudent/Assets.xcassets/Btn/btn_radio_u.imageset/btn_radio_u@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_play.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "icon_play.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_play@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_play.imageset/icon_play.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_play.imageset/icon_play@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_play_1.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "icon_play_1.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_play_1@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_play_1.imageset/icon_play_1.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_play_1.imageset/icon_play_1@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_playing.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "icon_playing.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_playing@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_playing.imageset/icon_playing.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_playing.imageset/icon_playing@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_success_small.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "icon_success_small.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_success_small@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_success_small.imageset/icon_success_small.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_success_small.imageset/icon_success_small@2x.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_waring_small.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "filename" : "icon_waring_small.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_waring_small@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_waring_small.imageset/icon_waring_small.png
DolphinEnglishLearnStudent/Assets.xcassets/Icon/icon_waring_small.imageset/icon_waring_small@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){
                                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){
                                                let titleV = UIView()
                                                titleV.bounds = CGRect(x: 0, y: 0, width: 156, height: 63)
                                                titleV.sizeToFit()
DolphinEnglishLearnStudent/Moudle/Home/HomeListenFight_lesson_1_VC.swift
New file
@@ -0,0 +1,145 @@
//
//  HomeListenFight_lesson_1_VC.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/24.
//
import UIKit
import JQTools
import RxRelay
class FightAnswerViewModel{
                var selectIndex = BehaviorRelay<IndexPath?>(value: nil)
                var answerType = BehaviorRelay<Fight_lessonType>(value: .none)
}
/// 题目类型一
class HomeListenFight_lesson_1_VC: BaseVC {
                private var viewModel = FightAnswerViewModel()
                private lazy var menuView:StudyHandleView = {
                                let menu = StudyHandleView.jq_loadNibView()
                                menu.listenType = .lesson1
                                return menu
                }()
                private lazy var collectionView:UICollectionView = {
                                let flowLayout = UICollectionViewFlowLayout()
                                let w = (JQ_ScreenW - 194 * 2 - 25) / 2
                                flowLayout.itemSize = CGSize(width: w, height: w * 0.745)
                                flowLayout.minimumLineSpacing = 25
                                flowLayout.minimumInteritemSpacing = 25
                                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")
                                return collection
                }()
                override func viewDidLoad() {
                                super.viewDidLoad()
                                navigationItem.titleView = UIView()
                }
                override func setUI() {
                                super.setUI()
                                collectionView.delegate = self
                                collectionView.dataSource = self
                                collectionView.backgroundColor = UIColor(hexStr: "#C3BFB3")
                                view.addSubview(collectionView)
                                collectionView.snp.makeConstraints { make in
                                                make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(101)
                                                make.left.equalTo(194)
                                                make.right.equalTo(-194)
                                                make.bottom.equalToSuperview()
                                }
                                view.addSubview(menuView)
                                menuView.snp.makeConstraints { make in
                                                make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(24)
                                                make.centerX.equalToSuperview()
                                                make.height.equalTo(52)
                                                make.width.equalTo(159)
                                }
                }
                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_1_CCell", for: index) as? ListenFight_lesson_1_CCell{
                                                                var answer:Fight_lessonType = .none
                                                                answer = .success
                                                                switch answer {
                                                                                case .success:
                                                                                                self?.viewModel.answerType.accept(.success)
                                                                                                self?.answerSuccess(cell)
                                                                                case .fail:
                                                                                                self?.viewModel.answerType.accept(.fail)
                                                                                                self?.answerFail()
                                                                                default:break
                                                                }
                                                }
                                }).disposed(by: disposeBag)
                }
                //回答正确
                private func answerSuccess(_ cell:ListenFight_lesson_1_CCell){
                                menuView.snp.removeConstraints()
                                collectionView.isUserInteractionEnabled = false
                                let v = cell.view_topHandle.convert(cell.bounds, to: self.view)
                                UIView.animate(withDuration: 0.3) {
                                                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.height.equalTo(40)
                                                }
                                                self.view.layoutIfNeeded()
                                }completion: { _ in
                                                self.collectionView.reloadData()
                                                DispatchQueue.main.asyncAfter(deadline: .now()+2){
                                                                NotificationCenter.default.post(name: NextLession_Noti, object: nil)
                                                                self.collectionView.isUserInteractionEnabled = true
                                                                self.viewModel.answerType.accept(.none)
                                                                self.viewModel.selectIndex.accept(nil)
                                                }
                                }
                }
                private func answerFail(){
                                self.collectionView.reloadData()
                }
}
extension HomeListenFight_lesson_1_VC:UICollectionViewDelegate{
                func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
                                viewModel.selectIndex.accept(indexPath)
                }
}
extension HomeListenFight_lesson_1_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: 5, radius: 5, offset: CGSize(width: 0, height: 1), opacity: 1)
                                cell.backgroundColor = .white
                                if viewModel.selectIndex.value == indexPath{
                                                cell.setState(state: viewModel.answerType.value)
                                }else{
                                                cell.setState(state: .none)
                                }
                                return cell
                }
                func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                                return 4
                }
}
DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_1_CCell.swift
New file
@@ -0,0 +1,46 @@
//
//  ListenFight_lesson_1_CCell.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/24.
//
import UIKit
enum Fight_lessonType {
                case success
                case fail
                case none
}
class ListenFight_lesson_1_CCell: UICollectionViewCell {
                @IBOutlet weak var image_state: UIImageView!
                @IBOutlet weak var view_topHandle: UIView!
                override func awakeFromNib() {
                                super.awakeFromNib()
                                image_state.alpha = 0
                                image_state.transform = .init(scaleX: 0.1, y: 0.1)
                }
                func setState(state:Fight_lessonType){
                                switch state {
                                                case .success:
                                                                image_state.image = UIImage(named: "icon_success")
                                                                UIView.animate(withDuration: 0.6, delay: 0, usingSpringWithDamping: 0.3, initialSpringVelocity: 0.4, options: .layoutSubviews) {
                                                                                self.image_state.alpha = 1
                                                                                self.image_state.transform = .init(scaleX: 1, y: 1)
                                                                }
                                                case .fail:
                                                                image_state.image = UIImage(named: "icon_fail")
                                                                UIView.animate(withDuration: 0.6, delay: 0, usingSpringWithDamping: 0.3, initialSpringVelocity: 0.4, options: .layoutSubviews) {
                                                                                self.image_state.alpha = 1
                                                                                self.image_state.transform = .init(scaleX: 1, y: 1)
                                                                }
                                                case .none:
                                                                image_state.alpha = 0
                                                                image_state.transform = .init(scaleX: 0.1, y: 0.1)
                                }
                }
}
DolphinEnglishLearnStudent/Moudle/Home/Listen/CCell/ListenFight_lesson_1_CCell.xib
New file
@@ -0,0 +1,60 @@
<?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_lesson_1_CCell" id="gTV-IL-0wX" customClass="ListenFight_lesson_1_CCell" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="445" height="379"/>
            <autoresizingMask key="autoresizingMask"/>
            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
                <rect key="frame" x="0.0" y="0.0" width="445" height="379"/>
                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                <subviews>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="JdK-rh-KJI">
                        <rect key="frame" x="5" y="5" width="435" height="40"/>
                        <color key="backgroundColor" red="0.83137254900000002" green="0.82352941180000006" blue="0.80392156859999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstAttribute="height" constant="40" id="1mb-ik-h6n"/>
                        </constraints>
                    </view>
                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="bdL-d4-7NQ">
                        <rect key="frame" x="5" y="45" width="435" height="329"/>
                    </imageView>
                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="kkd-SI-bwq">
                        <rect key="frame" x="172.5" y="141.5" width="100" height="100"/>
                        <constraints>
                            <constraint firstAttribute="width" constant="100" id="LTx-TZ-bFM"/>
                            <constraint firstAttribute="height" constant="100" id="yDa-rf-HIO"/>
                        </constraints>
                    </imageView>
                </subviews>
            </view>
            <viewLayoutGuide key="safeArea" id="ZTg-uK-7eu"/>
            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
            <constraints>
                <constraint firstItem="bdL-d4-7NQ" firstAttribute="top" secondItem="JdK-rh-KJI" secondAttribute="bottom" id="4oo-KH-5Tx"/>
                <constraint firstItem="kkd-SI-bwq" firstAttribute="centerY" secondItem="ZTg-uK-7eu" secondAttribute="centerY" id="78d-bY-KVe"/>
                <constraint firstAttribute="trailing" secondItem="bdL-d4-7NQ" secondAttribute="trailing" constant="5" id="CTn-Yp-I4m"/>
                <constraint firstItem="JdK-rh-KJI" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="5" id="H2K-rm-Njk"/>
                <constraint firstAttribute="trailing" secondItem="JdK-rh-KJI" secondAttribute="trailing" constant="5" id="HaX-d6-Ou6"/>
                <constraint firstItem="kkd-SI-bwq" firstAttribute="centerX" secondItem="ZTg-uK-7eu" secondAttribute="centerX" id="NVR-Eo-GGe"/>
                <constraint firstAttribute="bottom" secondItem="bdL-d4-7NQ" secondAttribute="bottom" constant="5" id="d7u-Rd-bRk"/>
                <constraint firstItem="JdK-rh-KJI" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="5" id="g3Z-CO-Any"/>
                <constraint firstItem="bdL-d4-7NQ" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" constant="5" id="yCf-NO-CuB"/>
            </constraints>
            <size key="customSize" width="445" height="379"/>
            <connections>
                <outlet property="image_state" destination="kkd-SI-bwq" id="oOC-yo-jjk"/>
                <outlet property="view_topHandle" destination="JdK-rh-KJI" id="3e6-NI-AsQ"/>
            </connections>
            <point key="canvasLocation" x="232.3170731707317" y="103.47457627118645"/>
        </collectionViewCell>
    </objects>
</document>
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFightVC.swift
New file
@@ -0,0 +1,194 @@
//
//  HomeListenFightVC.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/23.
//
import UIKit
import FFPage
import RxRelay
let NextLession_Noti = Notification.Name.init("NextLession_Noti")
enum ListenType{
                case lesson1 //自主学习-听音选图
                case lesson2 //自主学习-看图选音
}
class HomeListenFightViewModel{
                /// 当前页数
                var currentPage = BehaviorRelay<Int>(value: 0)
                var maxPage = BehaviorRelay<Int>(value: 5)
                var listenType = BehaviorRelay<ListenType>(value:.lesson1)
}
class HomeListenFightVC: BaseVC {
                private var viewModel = HomeListenFightViewModel()
                private lazy var label_pageNum:UILabel = {
                                let label = UILabel()
                                label.font = .systemFont(ofSize: 14, weight: .medium)
                                label.textColor = .black.withAlphaComponent(0.81)
                                label.textAlignment = .center
                                label.text = "已完成:0/0"
                                return label
                }()
                private lazy var btn_forward:UIButton = {
                                let btn = UIButton(type: .custom)
                                btn.setTitle("上一题", for: .normal)
                                btn.titleLabel?.font = .systemFont(ofSize: 14, weight: .medium)
                                btn.setTitleColor(Config.ThemeColor, for: .normal)
                                btn.jq_borderColor = Config.ThemeColor
                                btn.backgroundColor = .white
                                btn.jq_borderWidth = 1
                                btn.jq_cornerRadius = 4
                                return btn
                }()
                private lazy var btn_exit:UIButton = {
                                let btn = UIButton(type: .custom)
                                btn.setTitle("退出", for: .normal)
                                btn.titleLabel?.font = .systemFont(ofSize: 14, weight: .medium)
                                btn.setTitleColor(.white, for: .normal)
                                btn.backgroundColor = Config.ThemeColor
                                btn.jq_cornerRadius = 4
                                return btn
                }()
                private lazy var pageVC:FFPageViewController = {
                                let vc = FFPageViewController()
                                vc.scrollview.isScrollEnabled = false
                                return vc
                }()
                init(listenType:ListenType) {
                                super.init(nibName: nil, bundle: nil)
                                self.viewModel.listenType.accept(listenType)
                }
                required init?(coder: NSCoder) {
                                fatalError("init(coder:) has not been implemented")
                }
    override func viewDidLoad() {
        super.viewDidLoad()
                                yy_popBlock = {[weak self] in
                                                self?.quitAction()
                                }
                                pageVC.reloadData()
                                btn_exit.addTarget(self, action: #selector(quitAction), for: .touchUpInside)
                                btn_forward.addTarget(self, action: #selector(beforeAction), for: .touchUpInside)
    }
                override func setUI() {
                                super.setUI()
                                craeteFootFuncView()
                                pageVC.delegate = self
                                view.addSubview(pageVC.view)
                                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)
                                }
                }
                private func craeteFootFuncView(){
                                view.addSubview(label_pageNum)
                                view.addSubview(btn_forward)
                                btn_forward.snp.makeConstraints { make in
                                                make.height.equalTo(40)
                                                make.width.equalTo(124)
                                }
                                view.addSubview(btn_exit)
                                btn_exit.snp.makeConstraints { make in
                                                make.height.equalTo(40)
                                                make.width.equalTo(124)
                                }
                                let stackView = UIStackView(arrangedSubviews: [btn_forward,label_pageNum,btn_exit])
                                stackView.spacing = 22
                                view.addSubview(stackView)
                                stackView.snp.makeConstraints { make in
                                                make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom).offset(-22)
                                                make.centerX.equalToSuperview()
                                                make.height.equalTo(40)
                                }
                }
                override func setRx() {
                                NotificationCenter.default.rx.notification(NextLession_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] noti in
                                                guard let weakSelf = self else { return }
                                                let nextPage = weakSelf.viewModel.currentPage.value + 1
                                                //完成
                                                if nextPage >= weakSelf.viewModel.maxPage.value{
                                                                let vc = HomeStudyCompleteVC()
                                                                vc.title = "自主学习1-听音选图"
                                                                                weakSelf.push(vc: vc)
                                                                return
                                                }
                                                self?.pageVC.scroll(toPage: nextPage, animation: true)
                                                self?.viewModel.currentPage.accept(nextPage)
                                }).disposed(by: disposeBag)
                                viewModel.currentPage.subscribe(onNext: {[weak self]currentPage in
                                                guard let weakSelf = self else { return }
                                                self?.btn_forward.isHidden = currentPage <= 0
                                                self?.label_pageNum.text = "已完成:\(weakSelf.viewModel.currentPage.value + 1)/\(weakSelf.viewModel.maxPage.value)"
                                }).disposed(by: disposeBag)
                }
                @objc func quitAction(){
                                CommonAlertView.show(content: "未完成全部答题,确认退出吗?") {
                                                self.navigationController?.popViewController(animated: true)
                                }
                }
                @objc func beforeAction(){
                                let beforePage = max(1, viewModel.currentPage.value - 1)
                                pageVC.scroll(toPage: beforePage, animation: true)
                                viewModel.currentPage.accept(beforePage)
                }
}
extension HomeListenFightVC:FFPageViewControllerDelegate{
                func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt {
                                return UInt(viewModel.maxPage.value)
                }
                func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) {
                }
                func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController {
                                if viewModel.listenType.value == .lesson1{
                                                let vc = HomeListenFight_lesson_1_VC()
                                                return vc
                                }
                                if viewModel.listenType.value == .lesson2{
                                                let vc = HomeListenFight_lesson_2_VC()
                                                return vc
                                }
                                let vc = UIViewController()
                                return vc
                }
}
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenFight_lesson_2_VC.swift
New file
@@ -0,0 +1,195 @@
//
//  HomeListenFight_lesson_2_VC.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/24.
//
import UIKit
import QMUIKit
class HomeListenFight_lesson_2_VC: BaseVC {
                private var viewModel = FightAnswerViewModel()
                private lazy var stackView:UIStackView = {
                                let stackView = UIStackView()
                                stackView.spacing = 78
                                stackView.distribution = .equalSpacing
                                return stackView
                }()
                private lazy var collectionView:UICollectionView = {
                                let flowLayout = UICollectionViewFlowLayout()
                                let w = (JQ_ScreenW - 194 * 2 - 25) / 2
                                flowLayout.itemSize = CGSize(width: w, height: w * 0.745)
                                flowLayout.minimumLineSpacing = 25
                                flowLayout.minimumInteritemSpacing = 25
                                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")
                                return collection
                }()
                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.backgroundColor = UIColor(hexStr: "#C3BFB3")
                                view.addSubview(collectionView)
                                collectionView.snp.makeConstraints { make in
                                                make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(101)
                                                make.left.equalTo(194)
                                                make.right.equalTo(-194)
                                                make.bottom.equalToSuperview()
                                }
                                view.addSubview(stackView)
                                stackView.snp.makeConstraints { make in
                                                make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top).offset(24)
                                                make.centerX.equalToSuperview()
                                                make.height.equalTo(52)
                                                make.width.greaterThanOrEqualTo(100)
                                }
                                for index in 0...2{
                                                let handleView = StudyHandleView.jq_loadNibView()
                                                handleView.listenType = .lesson2
                                                handleView.btn_choose.tag = 10 + index
                                                handleView.chooseClouse {[weak self] btn in
                                                                var lessionType:Fight_lessonType = .none
                                                                lessionType = .success
                                                                switch lessionType {
                                                                                case .success:
                                                                                                handleView.btn_choose.isEnabled = false
                                                                                                handleView.btn_state.setImage(UIImage(named: "icon_success_small"), for: .normal)
                                                                                                UIView.animate(withDuration: 0.5) {
                                                                                                                handleView.btn_state.alpha = 1
                                                                                                }
                                                                                                if let cell = self?.collectionView.dequeueReusableCell(withReuseIdentifier: "_ListenFight_lesson_1_CCell", for: self!.viewModel.selectIndex.value!) as? ListenFight_lesson_1_CCell{
                                                                                                                self?.viewModel.answerType.accept(.success)
                                                                                                                self?.answerSuccess(cell,index: index)
                                                                                                }
                                                                                case .fail:
                                                                                                handleView.btn_state.setImage(UIImage(named: "icon_waring_small"), for: .normal)
                                                                                                UIView.animate(withDuration: 0.5) {
                                                                                                                handleView.btn_state.alpha = 1
                                                                                                }
                                                                                default:
                                                                                                handleView.btn_state.setImage(nil, for: .normal)
                                                                }
                                                }
                                                handleView.snp.makeConstraints { make in
                                                                make.height.equalTo(52)
                                                                make.width.greaterThanOrEqualTo(159)
                                                }
                                                stackView.addArrangedSubview(handleView)
                                }
                }
                private func answerSuccess(_ cell:ListenFight_lesson_1_CCell,index:Int){
                                let studyHandleView = stackView.arrangedSubviews[index] as! StudyHandleView
                                let bounds = studyHandleView.convert(studyHandleView.bounds, to: self.view)
                                //copy试图放在上面进行覆盖
                                let copyHandleView = studyHandleView.copyView()
                                copyHandleView.view_choose.isHidden = true
                                copyHandleView.btn_state.setImage(nil, for: .normal)
                                view.addSubview(copyHandleView)
                                view.layoutIfNeeded()
                                copyHandleView.snp.makeConstraints { make in
                                                make.top.equalToSuperview().offset(bounds.origin.y)
                                                make.left.equalToSuperview().offset(bounds.origin.x)
                                                make.width.equalTo(159)
                                                make.height.equalTo(52)
                                }
                                view.layoutIfNeeded()
                                let v = cell.view_topHandle.convert(cell.bounds, to: self.view)
                                UIView.animate(withDuration: 0.6) {
                                                copyHandleView.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.height.equalTo(40)
                                                }
                                                self.view.layoutIfNeeded()
                                }completion: { _ in
                                                self.resetStackView()
                                }
                }
                private func resetStackView(){
                                for v in stackView.arrangedSubviews as! [StudyHandleView]{
                                                v.view_choose.alpha = 0
                                                v.btn_choose.isEnabled = true
                                                v.btn_choose.isSelected = false
                                                v.btn_state.setImage(nil, for: .normal)
                                }
                                let newRow = viewModel.selectIndex.value!.row+1
                                viewModel.selectIndex.accept(IndexPath(row: newRow, section: 0))
                                if newRow == 4{
                                                NotificationCenter.default.post(name: NextLession_Noti, object: nil)
                                }
                }
                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_1_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)
                }
}
extension HomeListenFight_lesson_2_VC:UICollectionViewDelegate{
                func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
                                viewModel.selectIndex.accept(indexPath)
                }
}
extension HomeListenFight_lesson_2_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: 5, radius: 5, offset: CGSize(width: 0, height: 1), opacity: 1)
                                cell.backgroundColor = .white
                                return cell
                }
                func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
                                return 4
                }
}
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenMenuVC.swift
File was renamed from DolphinEnglishLearnStudent/Moudle/Home/Listen/HomeListenMenuVC.swift
@@ -16,9 +16,9 @@
                private var selectIndexPath:IndexPath = IndexPath(row: 0, section: 0)
                override func viewDidLoad() {
        super.viewDidLoad()
                                super.viewDidLoad()
    }
                }
                override func setUI() {
                                super.setUI()
@@ -126,7 +126,7 @@
                                                make.height.equalTo(1)
                                }
                }
                required init?(coder: NSCoder) {
                                fatalError("init(coder:) has not been implemented")
                }
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenMenuVC.xib
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenSubVC.swift
File was renamed from DolphinEnglishLearnStudent/Moudle/Home/Listen/HomeListenSubVC.swift
@@ -43,7 +43,18 @@
}
extension HomeListenSubVC:UITableViewDelegate{
                func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
                                if indexPath.section == 1{
                                                if indexPath.row == 0{
                                                                JQ_currentViewController().jq_push(vc: HomeListenFightVC(listenType: .lesson1))
                                                }
                                                if indexPath.row == 1{
                                                                JQ_currentViewController().jq_push(vc: HomeListenFightVC(listenType: .lesson2))
                                                }
                                }
                }
}
extension HomeListenSubVC:UITableViewDataSource{
DolphinEnglishLearnStudent/Moudle/Home/Listen/VC/HomeListenVC.swift
File was renamed from DolphinEnglishLearnStudent/Moudle/Home/Listen/HomeListenVC.swift
@@ -35,13 +35,6 @@
                                return vc
                }()
//                private lazy var tableView:UITableView = {
//                                 let table = UITableView(frame: .zero, style: .plain)
//                                table.register(UINib(nibName: "HomeListen_item_TCell", bundle: nil), forCellReuseIdentifier: "_HomeListen_item_TCell")
//                                table.register(UINib(nibName: "HomeListen_process_TCell", bundle: nil), forCellReuseIdentifier: "_HomeListen_process_TCell")
//                                return table
//                }()
    override func viewDidLoad() {
        super.viewDidLoad()
    }
DolphinEnglishLearnStudent/Moudle/Home/VC/HomeStudyCompleteVC.swift
New file
@@ -0,0 +1,29 @@
//
//  HomeStudyCompleteVC.swift
//  DolphinEnglishLearnStudent
//
//  Created by 无故事王国 on 2024/5/24.
//
import UIKit
class HomeStudyCompleteVC: BaseVC {
    override func viewDidLoad() {
        super.viewDidLoad()
    }
                override func setUI() {
                                super.setUI()
                }
                @IBAction func backHomeAction(_ sender: UIButton) {
                                for vc in navigationController?.viewControllers ?? []{
                                                if vc.isKind(of: HomeListenMenuVC.self){
                                                                navigationController?.popToViewController(vc, animated: true);break
                                                }
                                }
                }
}
DolphinEnglishLearnStudent/Moudle/Home/VC/HomeStudyCompleteVC.xib
New file
@@ -0,0 +1,204 @@
<?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" customClass="HomeStudyCompleteVC" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <connections>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <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="sZp-xg-Tl1">
                    <rect key="frame" x="255" y="50" width="670" height="650"/>
                    <subviews>
                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_success" translatesAutoresizingMaskIntoConstraints="NO" id="thr-TM-bx0">
                            <rect key="frame" x="295" y="26" width="80" height="80"/>
                            <constraints>
                                <constraint firstAttribute="width" constant="80" id="aqH-ed-sUn"/>
                                <constraint firstAttribute="height" constant="80" id="pou-LQ-OZo"/>
                            </constraints>
                        </imageView>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="恭喜你,已完成全部答题!获得200积分!" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0Rg-U5-bnk">
                            <rect key="frame" x="165" y="132" width="340.5" height="25"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="25" id="Q4a-9Q-V9M"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="medium" 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>
                        <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillEqually" spacing="12" translatesAutoresizingMaskIntoConstraints="NO" id="ENd-BH-G5Q">
                            <rect key="frame" x="155" y="183" width="360" height="90"/>
                            <subviews>
                                <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="212" translatesAutoresizingMaskIntoConstraints="NO" id="rxj-jn-ut6">
                                    <rect key="frame" x="0.0" y="0.0" width="360" height="22"/>
                                    <subviews>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="答题次数:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ha0-SG-kAV">
                                            <rect key="frame" x="0.0" y="0.0" width="74" height="22"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.65000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0次" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EAE-ID-4sP">
                                            <rect key="frame" x="286" y="0.0" width="74" height="22"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.65000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                    </subviews>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="22" id="cIf-d5-lb8"/>
                                    </constraints>
                                </stackView>
                                <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="212" translatesAutoresizingMaskIntoConstraints="NO" id="fsO-CJ-vGD">
                                    <rect key="frame" x="0.0" y="34" width="360" height="22"/>
                                    <subviews>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="正确次数:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BK6-AS-rO7">
                                            <rect key="frame" x="0.0" y="0.0" width="74" height="22"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.65000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0次" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GyL-R8-T1w">
                                            <rect key="frame" x="286" y="0.0" width="74" height="22"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.65000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                    </subviews>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="22" id="qFN-MJ-UWN"/>
                                    </constraints>
                                </stackView>
                                <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="212" translatesAutoresizingMaskIntoConstraints="NO" id="Rsn-Be-S92">
                                    <rect key="frame" x="0.0" y="68" width="360" height="22"/>
                                    <subviews>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="错误次数:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pPV-Gj-Ccs">
                                            <rect key="frame" x="0.0" y="0.0" width="74" height="22"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.65000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0次" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8Lo-W3-dxd">
                                            <rect key="frame" x="286" y="0.0" width="74" height="22"/>
                                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.65000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                    </subviews>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="22" id="OCJ-82-DhN"/>
                                    </constraints>
                                </stackView>
                            </subviews>
                        </stackView>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="正确率:0%" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4uZ-XC-Xc3">
                            <rect key="frame" x="268.5" y="329" width="133.5" height="33"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="33" id="9vt-C2-oNA"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="24"/>
                            <color key="textColor" red="0.98039215686274506" green="0.086274509803921567" blue="0.086274509803921567" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="0Rg-U5-bnk" firstAttribute="top" secondItem="thr-TM-bx0" secondAttribute="bottom" constant="26" id="484-GJ-vVg"/>
                        <constraint firstItem="0Rg-U5-bnk" firstAttribute="centerX" secondItem="thr-TM-bx0" secondAttribute="centerX" id="7UD-oB-oVd"/>
                        <constraint firstItem="4uZ-XC-Xc3" firstAttribute="centerX" secondItem="sZp-xg-Tl1" secondAttribute="centerX" id="OTG-18-LsL"/>
                        <constraint firstItem="thr-TM-bx0" firstAttribute="top" secondItem="sZp-xg-Tl1" secondAttribute="top" constant="26" id="Q7G-SB-OCH"/>
                        <constraint firstItem="ENd-BH-G5Q" firstAttribute="centerX" secondItem="sZp-xg-Tl1" secondAttribute="centerX" id="XwU-y5-ib3"/>
                        <constraint firstAttribute="width" secondItem="sZp-xg-Tl1" secondAttribute="height" multiplier="1:0.97" id="bGo-dA-bya"/>
                        <constraint firstItem="thr-TM-bx0" firstAttribute="centerX" secondItem="sZp-xg-Tl1" secondAttribute="centerX" id="tSv-Tt-kEi"/>
                        <constraint firstItem="4uZ-XC-Xc3" firstAttribute="top" secondItem="ENd-BH-G5Q" secondAttribute="bottom" constant="56" id="xUu-dN-72y"/>
                        <constraint firstItem="ENd-BH-G5Q" firstAttribute="top" secondItem="0Rg-U5-bnk" secondAttribute="bottom" constant="26" id="xz6-0h-ugr"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
                <stackView opaque="NO" contentMode="scaleToFill" spacing="155" translatesAutoresizingMaskIntoConstraints="NO" id="gHi-44-hqr">
                    <rect key="frame" x="388.5" y="726" width="403" height="40"/>
                    <subviews>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LBK-Yn-Ayv">
                            <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="height" constant="40" id="ZyW-jb-itd"/>
                                <constraint firstAttribute="width" constant="124" id="qIz-Ko-ms3"/>
                            </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.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            </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.25490196079999999" green="0.63529411759999999" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB">
                                    <real key="value" value="1"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="backHomeAction:" destination="-1" eventType="touchUpInside" id="A7P-LX-ir5"/>
                            </connections>
                        </button>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gcd-t9-jC7">
                            <rect key="frame" x="279" y="0.0" width="124" 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="O0h-1u-aIV"/>
                                <constraint firstAttribute="width" constant="124" id="Zxv-dr-Ghl"/>
                            </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>
                        </button>
                    </subviews>
                </stackView>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
            <constraints>
                <constraint firstItem="sZp-xg-Tl1" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="5ok-tG-mzW"/>
                <constraint firstItem="sZp-xg-Tl1" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="26" id="6gX-zJ-5d9"/>
                <constraint firstItem="gHi-44-hqr" firstAttribute="top" secondItem="sZp-xg-Tl1" secondAttribute="bottom" constant="26" id="7hu-3q-VjF"/>
                <constraint firstItem="gHi-44-hqr" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="dQm-m2-JGk"/>
                <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="sZp-xg-Tl1" secondAttribute="bottom" constant="100" id="vJb-dJ-YAk"/>
            </constraints>
            <point key="canvasLocation" x="87.966101694915253" y="19.756097560975608"/>
        </view>
    </objects>
    <resources>
        <image name="icon_success" width="80" height="81"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
DolphinEnglishLearnStudent/Other/UIView/StudyHandleView.xib
New file
@@ -0,0 +1,113 @@
<?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="StudyHandleView" customModule="DolphinEnglishLearnStudent" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="375" height="103"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <stackView opaque="NO" contentMode="scaleToFill" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="eHm-vL-3gG">
                    <rect key="frame" x="0.0" y="0.0" width="375" height="103"/>
                    <subviews>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0XQ-2a-X00">
                            <rect key="frame" x="0.0" y="0.0" width="313" height="103"/>
                            <subviews>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="eGw-vD-STe">
                                    <rect key="frame" x="98.5" y="0.0" width="27" height="103"/>
                                    <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="zhb-53-qPO">
                                    <rect key="frame" x="140.5" y="35.5" width="32" height="32"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="32" id="l56-9N-QqM"/>
                                        <constraint firstAttribute="width" constant="32" id="yNt-fZ-NqV"/>
                                    </constraints>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" image="icon_success_small"/>
                                </button>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="mz1-vG-vfG">
                                    <rect key="frame" x="181.5" y="0.0" width="32" height="103"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" image="icon_play"/>
                                    <connections>
                                        <action selector="payAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="sgi-cA-rhG"/>
                                    </connections>
                                </button>
                            </subviews>
                            <color key="backgroundColor" red="0.25490196078431371" green="0.63529411764705879" blue="0.92156862745098034" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <constraints>
                                <constraint firstAttribute="bottom" secondItem="eGw-vD-STe" secondAttribute="bottom" id="IFe-rp-rkn"/>
                                <constraint firstItem="mz1-vG-vfG" firstAttribute="top" secondItem="0XQ-2a-X00" secondAttribute="top" id="e9F-tS-4aU"/>
                                <constraint firstItem="zhb-53-qPO" firstAttribute="centerX" secondItem="0XQ-2a-X00" secondAttribute="centerX" id="gg9-Bw-fEI"/>
                                <constraint firstAttribute="bottom" secondItem="mz1-vG-vfG" secondAttribute="bottom" id="pKS-iN-MkG"/>
                                <constraint firstItem="eGw-vD-STe" firstAttribute="top" secondItem="0XQ-2a-X00" secondAttribute="top" id="sSv-55-R5E"/>
                                <constraint firstItem="zhb-53-qPO" firstAttribute="leading" secondItem="eGw-vD-STe" secondAttribute="trailing" constant="15" id="uxB-Ji-qbq"/>
                                <constraint firstItem="zhb-53-qPO" firstAttribute="centerY" secondItem="0XQ-2a-X00" secondAttribute="centerY" id="vt0-xM-xhJ"/>
                                <constraint firstAttribute="width" constant="159" id="yYG-aD-bOA"/>
                                <constraint firstItem="mz1-vG-vfG" firstAttribute="leading" secondItem="zhb-53-qPO" secondAttribute="trailing" constant="9" id="zfI-8E-Wuj"/>
                            </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="xya-RD-K98">
                            <rect key="frame" x="323" y="0.0" width="52" height="103"/>
                            <subviews>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="X68-mT-DTX">
                                    <rect key="frame" x="0.0" y="0.0" width="52" height="103"/>
                                    <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"/>
                                    <connections>
                                        <action selector="chooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="gVb-A7-zDJ"/>
                                    </connections>
                                </button>
                            </subviews>
                            <constraints>
                                <constraint firstItem="X68-mT-DTX" firstAttribute="leading" secondItem="xya-RD-K98" secondAttribute="leading" id="TTg-dL-KiZ"/>
                                <constraint firstAttribute="trailing" secondItem="X68-mT-DTX" secondAttribute="trailing" id="cc2-ZM-WrM"/>
                                <constraint firstAttribute="bottom" secondItem="X68-mT-DTX" secondAttribute="bottom" id="l1j-V9-Z1l"/>
                                <constraint firstAttribute="width" constant="52" id="nRM-Df-MFI"/>
                                <constraint firstItem="X68-mT-DTX" firstAttribute="top" secondItem="xya-RD-K98" secondAttribute="top" id="rT5-GH-42w"/>
                            </constraints>
                        </view>
                    </subviews>
                </stackView>
            </subviews>
            <constraints>
                <constraint firstAttribute="bottom" secondItem="eHm-vL-3gG" secondAttribute="bottom" id="Blb-Nr-aIZ"/>
                <constraint firstAttribute="trailing" secondItem="eHm-vL-3gG" secondAttribute="trailing" id="I3k-vZ-IqT"/>
                <constraint firstItem="eHm-vL-3gG" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="VE4-ti-8X6"/>
                <constraint firstItem="eHm-vL-3gG" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="jOh-WU-Wga"/>
                <constraint firstItem="eHm-vL-3gG" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="tYp-rY-CgC"/>
            </constraints>
            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
            <connections>
                <outlet property="btn_choose" destination="X68-mT-DTX" id="xa8-33-1zl"/>
                <outlet property="btn_pay" destination="mz1-vG-vfG" id="9mf-Wh-VQ4"/>
                <outlet property="btn_state" destination="zhb-53-qPO" id="VwF-zX-XaX"/>
                <outlet property="btn_voice" destination="eGw-vD-STe" id="vtB-m3-iOY"/>
                <outlet property="view_choose" destination="xya-RD-K98" id="gz4-Jd-l5U"/>
            </connections>
            <point key="canvasLocation" x="94.756097560975604" y="-171.10169491525426"/>
        </view>
    </objects>
    <resources>
        <image name="btn_radio" width="52" height="52"/>
        <image name="btn_radio_u" width="52" height="52"/>
        <image name="icon_play" width="32" height="32"/>
        <image name="icon_play_1" width="27" height="27"/>
        <image name="icon_success_small" width="42" height="42"/>
    </resources>
</document>