4 文件已重命名
2个文件已修改
29个文件已添加
| | |
| | | 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 */; }; |
| | |
| | | 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>"; }; |
| | |
| | | 1302783D2BFD973F00DDCE81 /* Home */ = { |
| | | isa = PBXGroup; |
| | | children = ( |
| | | 13AA25362C00757300F075B3 /* VC */, |
| | | 13EEB89E2BFF2853002996FC /* Listen */, |
| | | 13EEB8942BFF1519002996FC /* CCell */, |
| | | 13EEB88F2BFED3C6002996FC /* View */, |
| | |
| | | 130278532BFD985E00DDCE81 /* CommonAlertView.xib */, |
| | | 130278542BFD985E00DDCE81 /* CommonInputView.swift */, |
| | | 130278552BFD985E00DDCE81 /* CommonInputView.xib */, |
| | | 1362C75E2BFF4BA900BD7F73 /* StudyHandleView.swift */, |
| | | 1362C7602BFF4BB100BD7F73 /* StudyHandleView.xib */, |
| | | ); |
| | | path = UIView; |
| | | sourceTree = "<group>"; |
| | |
| | | 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 = ( |
| | |
| | | 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>"; |
| | |
| | | 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 */, |
| | |
| | | 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 */, |
| | |
| | | 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 */, |
| | |
| | | 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 */, |
| | | ); |
New file |
| | |
| | | { |
| | | "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 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "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 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "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 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "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 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "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 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "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 |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "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 |
| | | } |
| | | } |
| | |
| | | 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() |
New file |
| | |
| | | // |
| | | // 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 |
| | | } |
| | | } |
New file |
| | |
| | | // |
| | | // 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) |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | <?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> |
New file |
| | |
| | | // |
| | | // 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 |
| | | } |
| | | } |
| | | |
New file |
| | |
| | | // |
| | | // 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 |
| | | } |
| | | } |
File was renamed from DolphinEnglishLearnStudent/Moudle/Home/Listen/HomeListenMenuVC.swift |
| | |
| | | private var selectIndexPath:IndexPath = IndexPath(row: 0, section: 0) |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | super.viewDidLoad() |
| | | |
| | | } |
| | | } |
| | | |
| | | override func setUI() { |
| | | super.setUI() |
| | |
| | | make.height.equalTo(1) |
| | | } |
| | | } |
| | | |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
File was renamed from DolphinEnglishLearnStudent/Moudle/Home/Listen/HomeListenSubVC.swift |
| | |
| | | } |
| | | |
| | | 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{ |
File was renamed from DolphinEnglishLearnStudent/Moudle/Home/Listen/HomeListenVC.swift |
| | |
| | | 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() |
| | | } |
New file |
| | |
| | | // |
| | | // 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 |
| | | } |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | <?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> |
New file |
| | |
| | | <?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> |