Commit 1ec3b7df1a7e8b97895fc9b2a5ba48d8e90a4043
1 parent
028d32ac
Exists in
parentassistant
修改成长页面
Showing
37 changed files
with
1270 additions
and
1153 deletions
Show diff stats
ParentAssistant/ParentAssistant.xcodeproj/project.pbxproj
| ... | ... | @@ -42,6 +42,7 @@ |
| 42 | 42 | AD65FB7A20637F110052415B /* MoralViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD65FB7920637F110052415B /* MoralViewController.swift */; }; |
| 43 | 43 | ADAEA3982064960300A47D2C /* SceneDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAEA3972064960300A47D2C /* SceneDetailViewController.swift */; }; |
| 44 | 44 | ADAEA39A2064C44900A47D2C /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADAEA3992064C44900A47D2C /* LineChartView.swift */; }; |
| 45 | + ADC9AB72207C55CE00348EF1 /* GrowViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADC9AB71207C55CE00348EF1 /* GrowViewController.swift */; }; | |
| 45 | 46 | ADE33B312062202300BEA6E6 /* Macro.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE33B302062202300BEA6E6 /* Macro.swift */; }; |
| 46 | 47 | ADF159612069E00000A9485D /* CalendarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF159602069E00000A9485D /* CalendarView.swift */; }; |
| 47 | 48 | BF388469205A4DE900A240EF /* StudentClassInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF388468205A4DE900A240EF /* StudentClassInfo.swift */; }; |
| ... | ... | @@ -188,6 +189,7 @@ |
| 188 | 189 | AD65FB7920637F110052415B /* MoralViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoralViewController.swift; sourceTree = "<group>"; }; |
| 189 | 190 | ADAEA3972064960300A47D2C /* SceneDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SceneDetailViewController.swift; sourceTree = "<group>"; }; |
| 190 | 191 | ADAEA3992064C44900A47D2C /* LineChartView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LineChartView.swift; sourceTree = "<group>"; }; |
| 192 | + ADC9AB71207C55CE00348EF1 /* GrowViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GrowViewController.swift; sourceTree = "<group>"; }; | |
| 191 | 193 | ADE33B302062202300BEA6E6 /* Macro.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Macro.swift; sourceTree = "<group>"; }; |
| 192 | 194 | ADF159602069E00000A9485D /* CalendarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarView.swift; sourceTree = "<group>"; }; |
| 193 | 195 | BF388468205A4DE900A240EF /* StudentClassInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StudentClassInfo.swift; sourceTree = "<group>"; }; |
| ... | ... | @@ -375,7 +377,7 @@ |
| 375 | 377 | BFEAAAA5205117DA0072FAAF /* main */, |
| 376 | 378 | 599364DA204E62E700C8B371 /* evaluation */, |
| 377 | 379 | 599364E0204E62E700C8B371 /* Information */, |
| 378 | - 599364E6204E62E700C8B371 /* report */, | |
| 380 | + 599364E6204E62E700C8B371 /* Grow */, | |
| 379 | 381 | 599364E2204E62E700C8B371 /* my */, |
| 380 | 382 | 599364FD204E941900C8B371 /* userCenter */, |
| 381 | 383 | ); |
| ... | ... | @@ -425,15 +427,17 @@ |
| 425 | 427 | path = View; |
| 426 | 428 | sourceTree = "<group>"; |
| 427 | 429 | }; |
| 428 | - 599364E6204E62E700C8B371 /* report */ = { | |
| 430 | + 599364E6204E62E700C8B371 /* Grow */ = { | |
| 429 | 431 | isa = PBXGroup; |
| 430 | 432 | children = ( |
| 433 | + ADC9AB70207C558600348EF1 /* Model */, | |
| 434 | + ADC9AB71207C55CE00348EF1 /* GrowViewController.swift */, | |
| 431 | 435 | 599364E7204E62E700C8B371 /* ReportViewController.swift */, |
| 432 | 436 | AD65FB7920637F110052415B /* MoralViewController.swift */, |
| 433 | 437 | ADAEA3972064960300A47D2C /* SceneDetailViewController.swift */, |
| 434 | 438 | BF3B829E2050CC7E002078EA /* View */, |
| 435 | 439 | ); |
| 436 | - path = report; | |
| 440 | + path = Grow; | |
| 437 | 441 | sourceTree = "<group>"; |
| 438 | 442 | }; |
| 439 | 443 | 599364F1204E632600C8B371 /* util */ = { |
| ... | ... | @@ -473,6 +477,13 @@ |
| 473 | 477 | path = userCenter; |
| 474 | 478 | sourceTree = "<group>"; |
| 475 | 479 | }; |
| 480 | + ADC9AB70207C558600348EF1 /* Model */ = { | |
| 481 | + isa = PBXGroup; | |
| 482 | + children = ( | |
| 483 | + ); | |
| 484 | + path = Model; | |
| 485 | + sourceTree = "<group>"; | |
| 486 | + }; | |
| 476 | 487 | B605235D289EDBCA5C5AF2C5 /* Frameworks */ = { |
| 477 | 488 | isa = PBXGroup; |
| 478 | 489 | children = ( |
| ... | ... | @@ -952,6 +963,7 @@ |
| 952 | 963 | BFEAAAA7205118370072FAAF /* TabBarController.swift in Sources */, |
| 953 | 964 | BF67F3C020590A2F002FDC61 /* SwiftyJSON.swift in Sources */, |
| 954 | 965 | 599364ED204E62E700C8B371 /* InformationViewController.swift in Sources */, |
| 966 | + ADC9AB72207C55CE00348EF1 /* GrowViewController.swift in Sources */, | |
| 955 | 967 | 5980BF692061048A00F4A35E /* LZCityPickerView.m in Sources */, |
| 956 | 968 | BF388482205F5BC800A240EF /* MessageManager.swift in Sources */, |
| 957 | 969 | 5980BF682061048A00F4A35E /* LZCityPickerController.m in Sources */, | ... | ... |
ParentAssistant/ParentAssistant.xcworkspace/xcuserdata/caoyang.xcuserdatad/UserInterfaceState.xcuserstate
No preview for this file type
ParentAssistant/ParentAssistant/Classes/controllers/Grow/GrowViewController.swift
0 → 100644
| ... | ... | @@ -0,0 +1,211 @@ |
| 1 | +// | |
| 2 | +// GrowViewController.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by Cao yang on 2018/4/10. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | + | |
| 11 | +class GrowViewController: UIViewController,UIScrollViewDelegate { | |
| 12 | + | |
| 13 | + var ZJBNavH = 44.0 | |
| 14 | + //MARK: - 标题数据 | |
| 15 | + //标题 | |
| 16 | + lazy var titleView = {() -> UIView in | |
| 17 | + let title = UIScrollView() | |
| 18 | + title.frame = CGRect(x:0,y:0,width:getScreenWidth(),height:44) | |
| 19 | + title.backgroundColor = Theme.topBarColor() | |
| 20 | + return title | |
| 21 | + }() | |
| 22 | + //MARK: - 内容数据 | |
| 23 | + //内容 | |
| 24 | + lazy var contentScrollView = {()->UIScrollView in | |
| 25 | + let scrollView = UIScrollView.init(frame: self.view.bounds) | |
| 26 | + scrollView.delegate = self | |
| 27 | + scrollView.isPagingEnabled = true | |
| 28 | + scrollView.showsHorizontalScrollIndicator = false | |
| 29 | + return scrollView | |
| 30 | + }() | |
| 31 | + //按钮数组 | |
| 32 | + var titleBtnArr = Array<UIButton>() | |
| 33 | + //titleLine初始位置 | |
| 34 | + var linePoint = CGPoint() | |
| 35 | + //按钮标题数据 | |
| 36 | + var titleArr = Array<String>() | |
| 37 | + //按钮下面横线 | |
| 38 | + lazy var titleLine = {()->CALayer in | |
| 39 | + let lineLay = CALayer.init() | |
| 40 | + lineLay.frame.size = CGSize.init(width: 50, height: 2) | |
| 41 | + lineLay.backgroundColor = UIColor.gray.cgColor | |
| 42 | + return lineLay | |
| 43 | + }() | |
| 44 | + | |
| 45 | + override func viewDidLoad() { | |
| 46 | + super.viewDidLoad() | |
| 47 | + | |
| 48 | + titleArr = ["应用","报告"] | |
| 49 | + //设置导航栏标题 | |
| 50 | + self.navigationItem.titleView = titleView | |
| 51 | + self.view.addSubview(contentScrollView) | |
| 52 | + | |
| 53 | + setUpTitle() | |
| 54 | + setChildViewContent() | |
| 55 | + | |
| 56 | + //左按钮 | |
| 57 | + let leftView = UIButton.init(frame: CGRect.init(x: 0, y: 0, width: 50, height: 44)) | |
| 58 | + let titleLab = UILabel.init(frame: CGRect.init(x: 0, y: 0, width: 40, height: 44)) | |
| 59 | + if AccountManager.shared.isOnline() { | |
| 60 | + if AccountManager.shared.rawUserInfo!.contentData()["studentClass"].arrayValue.count == 0 { | |
| 61 | + titleLab.text = "未绑定" | |
| 62 | + }else{ | |
| 63 | + titleLab.text = AccountManager.shared.rawUserInfo!.contentData()["studentClass"][0]["studentName"].stringValue | |
| 64 | + } | |
| 65 | + }else{ | |
| 66 | + titleLab.text = "未登录" | |
| 67 | + } | |
| 68 | + titleLab.font = UIFont.systemFont(ofSize: 15) | |
| 69 | + titleLab.textAlignment = .center | |
| 70 | + leftView.addSubview(titleLab) | |
| 71 | + | |
| 72 | + let imageView = UIImageView.init(frame: CGRect.init(x: 40, y: 11, width: 10, height: 22)) | |
| 73 | + imageView.image = UIImage.init(named: "report_pull") | |
| 74 | + imageView.contentMode = .scaleAspectFit | |
| 75 | + leftView.addSubview(imageView) | |
| 76 | + | |
| 77 | +// leftView.addTarget(self, action: #selector(showView), for: UIControlEvents.touchDown) | |
| 78 | + | |
| 79 | + let leftBtn = UIBarButtonItem.init(customView: leftView) | |
| 80 | + self.navigationItem.leftBarButtonItem = leftBtn | |
| 81 | + //右按钮 | |
| 82 | + let rightView = UIButton.init(frame: CGRect.init(x: 0, y: 0, width: 50, height: 44)) | |
| 83 | + let titleRLab = UILabel.init(frame: CGRect.init(x: 0, y: 0, width: 40, height: 44)) | |
| 84 | + titleRLab.text = "筛选" | |
| 85 | + titleRLab.font = UIFont.systemFont(ofSize: 15) | |
| 86 | + titleRLab.textAlignment = .center | |
| 87 | + rightView.addSubview(titleRLab) | |
| 88 | + | |
| 89 | + let imageRView = UIImageView.init(frame: CGRect.init(x: 40, y: 11, width: 10, height: 22)) | |
| 90 | + imageRView.image = UIImage.init(named: "report_select") | |
| 91 | + imageRView.contentMode = .scaleAspectFit | |
| 92 | + rightView.addSubview(imageRView) | |
| 93 | + | |
| 94 | +// rightView.addTarget(self, action: #selector(showView), for: UIControlEvents.touchDown) | |
| 95 | + let rightBtn = UIBarButtonItem.init(customView: rightView) | |
| 96 | + self.navigationItem.rightBarButtonItem = rightBtn | |
| 97 | + | |
| 98 | + setupNavigationBar() | |
| 99 | + } | |
| 100 | + | |
| 101 | + // MARK: - 设置顶部按钮 | |
| 102 | + func setupNavigationBar(){ | |
| 103 | + self.configTheme() | |
| 104 | + } | |
| 105 | + | |
| 106 | + private func setChildViewContent(){ | |
| 107 | + | |
| 108 | + //添加子控制器 | |
| 109 | + for _ in 0..<titleArr.count { | |
| 110 | + let vc = Story.instantiateViewControllerWithIdentifier("ReportViewController", storyName: "Main") as! ReportViewController | |
| 111 | + self.addChildViewController(vc) | |
| 112 | + } | |
| 113 | + //设置第一个控制器数据 | |
| 114 | + let childVC = self.childViewControllers.first | |
| 115 | + childVC?.view.frame = self.view.bounds | |
| 116 | + self.contentScrollView.addSubview((childVC?.view)!) | |
| 117 | + //设置scrollview滑动范围 | |
| 118 | + contentScrollView.contentSize = CGSize.init(width: getScreenWidth()*CGFloat(titleArr.count), height: 0) | |
| 119 | + | |
| 120 | + } | |
| 121 | + //MARK: - 设置标题 | |
| 122 | + func setUpTitle(){ | |
| 123 | + | |
| 124 | + let count = titleArr.count | |
| 125 | + var btnWidthArr = Array<CGFloat>() | |
| 126 | + for i in 0..<count { | |
| 127 | + | |
| 128 | + let btn = UIButton.init() | |
| 129 | + btn.setTitle(titleArr[i], for: .normal) | |
| 130 | + btn.titleLabel!.font = UIFont.systemFont(ofSize: 17) | |
| 131 | + btn.setTitleColor(UIColor.black, for: .normal) | |
| 132 | + btn.tag = i | |
| 133 | + btn.addTarget(self, action: #selector(clickTitleAction(btn:)), for:UIControlEvents.touchUpInside) | |
| 134 | + btn.frame.size = CGSize.init(width: 40, height: ZJBNavH) | |
| 135 | + | |
| 136 | + let widht = getScreenWidth() | |
| 137 | + btn.center = CGPoint.init(x: widht/4*(1+CGFloat(i))-16, y: CGFloat(ZJBNavH/2)) | |
| 138 | + btnWidthArr.append(btn.frame.size.width) | |
| 139 | + | |
| 140 | + titleBtnArr.append(btn) | |
| 141 | + titleView.addSubview(btn) | |
| 142 | + if i == 0 { | |
| 143 | + //设置titleLine初始位置 | |
| 144 | + titleLine.frame = CGRect.init(x: btn.frame.origin.x, y: btn.center.y+14, width: 40, height: 3) | |
| 145 | + linePoint = CGPoint.init(x: titleLine.frame.origin.x, y: titleLine.frame.origin.y) | |
| 146 | + //添加titleLine到导航 | |
| 147 | + self.navigationItem.titleView?.layer.addSublayer(titleLine) | |
| 148 | + } | |
| 149 | + } | |
| 150 | + } | |
| 151 | + @objc func clickTitleAction(btn:UIButton){ | |
| 152 | + //titleLine动画动作 | |
| 153 | + let animal = CABasicAnimation.init(keyPath: "position") | |
| 154 | + animal.fromValue = NSValue.init(cgPoint: CGPoint.init(x: linePoint.x, y: linePoint.y)) | |
| 155 | + animal.toValue = NSValue.init(cgPoint: CGPoint.init(x: btn.center.x, y: btn.center.y+14)) | |
| 156 | + animal.isRemovedOnCompletion = false | |
| 157 | + animal.fillMode = kCAFillModeForwards | |
| 158 | + self.titleLine.add(animal, forKey: "move") | |
| 159 | + | |
| 160 | + //update | |
| 161 | + linePoint = CGPoint.init(x: btn.center.x, y: btn.center.y+14) | |
| 162 | + //联动contentScrollview | |
| 163 | + let index = CGFloat(btn.tag) | |
| 164 | + | |
| 165 | + if contentScrollView.contentSize.width>0 { | |
| 166 | + | |
| 167 | + let childVC = self.childViewControllers[btn.tag] | |
| 168 | + | |
| 169 | + if self.contentScrollView.subviews.contains(childVC.view){ | |
| 170 | + //已有view,直接移动 | |
| 171 | + //移动scrollview | |
| 172 | + contentScrollView.setContentOffset(CGPoint.init(x: index*getScreenWidth(), y: 0), animated: true) | |
| 173 | + }else{ | |
| 174 | + //新加view,刷新数据 | |
| 175 | + childVC.view.frame = CGRect.init(x: CGFloat(btn.tag)*getScreenWidth(), y: 0, width: getScreenWidth(),height: self.view.frame.size.height) | |
| 176 | + self.contentScrollView.addSubview(childVC.view) | |
| 177 | + //移动scrollview | |
| 178 | + contentScrollView.setContentOffset(CGPoint.init(x: index*getScreenWidth(), y: 0), animated: true) | |
| 179 | + } | |
| 180 | + } | |
| 181 | + } | |
| 182 | + //MARK: - ScrollView Delegate | |
| 183 | + func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { | |
| 184 | + | |
| 185 | + if scrollView == contentScrollView { | |
| 186 | + let offsetX = scrollView.contentOffset.x | |
| 187 | + let index = Int(offsetX/getScreenWidth()) | |
| 188 | + let btn = titleBtnArr[index] | |
| 189 | + | |
| 190 | + clickTitleAction(btn: btn) | |
| 191 | + | |
| 192 | + } | |
| 193 | + } | |
| 194 | + | |
| 195 | + override func didReceiveMemoryWarning() { | |
| 196 | + super.didReceiveMemoryWarning() | |
| 197 | + // Dispose of any resources that can be recreated. | |
| 198 | + } | |
| 199 | + | |
| 200 | + | |
| 201 | + /* | |
| 202 | + // MARK: - Navigation | |
| 203 | + | |
| 204 | + // In a storyboard-based application, you will often want to do a little preparation before navigation | |
| 205 | + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | |
| 206 | + // Get the new view controller using segue.destinationViewController. | |
| 207 | + // Pass the selected object to the new view controller. | |
| 208 | + } | |
| 209 | + */ | |
| 210 | + | |
| 211 | +} | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/MoralViewController.swift
0 → 100644
| ... | ... | @@ -0,0 +1,106 @@ |
| 1 | +// | |
| 2 | +// MoralViewController.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by Cao yang on 2018/3/22. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | + | |
| 11 | +class MoralViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { | |
| 12 | + | |
| 13 | + @IBOutlet weak var tableView: UITableView! | |
| 14 | + var data = [String:JSON]() | |
| 15 | + override func viewDidLoad() { | |
| 16 | + super.viewDidLoad() | |
| 17 | + self.title = "德育报告" | |
| 18 | + tableView.delegate = self | |
| 19 | + tableView.dataSource = self | |
| 20 | + | |
| 21 | + | |
| 22 | + downLoadDataFromNet() | |
| 23 | + } | |
| 24 | + | |
| 25 | + private func downLoadDataFromNet(){ | |
| 26 | + | |
| 27 | + | |
| 28 | + let params = ["screenId":1,"startDate":"2018-03-08","endDate":"2018-04-08","classId":"70","schoolId":1] as [String : Any] | |
| 29 | + | |
| 30 | + HTTPServer.shared.getEvaluationSceneAnalysis(parameters: params as [String : AnyObject]) { (backData, error) in | |
| 31 | + | |
| 32 | + if error == nil && JSON.fromString(backData)!["status"].intValue == 1 { | |
| 33 | + | |
| 34 | + self.data = JSON.fromString(backData)!["data"].dictionaryValue | |
| 35 | + | |
| 36 | + if !self.data.isEmpty{ | |
| 37 | + print(self.data) | |
| 38 | + } | |
| 39 | + } | |
| 40 | + } | |
| 41 | + } | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + func numberOfSections(in tableView: UITableView) -> Int { | |
| 46 | + return 3 | |
| 47 | + } | |
| 48 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
| 49 | + | |
| 50 | + if section == 2 { | |
| 51 | + return 3 | |
| 52 | + }else{ | |
| 53 | + return 1 | |
| 54 | + } | |
| 55 | + } | |
| 56 | + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 57 | + switch indexPath.section { | |
| 58 | + case 0: | |
| 59 | + return 240 | |
| 60 | + case 1: | |
| 61 | + return 240 | |
| 62 | + case 2: | |
| 63 | + return 70 | |
| 64 | + default: | |
| 65 | + return 0 | |
| 66 | + } | |
| 67 | + } | |
| 68 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
| 69 | + var cell = UITableViewCell.init() | |
| 70 | + switch indexPath.section { | |
| 71 | + case 0: | |
| 72 | + cell = tableView.dequeueReusableCell(withIdentifier: "moralDetail", for: indexPath) | |
| 73 | + return cell | |
| 74 | + case 1: | |
| 75 | + cell = tableView.dequeueReusableCell(withIdentifier: "educationDetail", for: indexPath) | |
| 76 | + return cell | |
| 77 | + case 2: | |
| 78 | + cell = tableView.dequeueReusableCell(withIdentifier: "behaviorDetail", for: indexPath) | |
| 79 | + return cell | |
| 80 | + default: | |
| 81 | + return cell | |
| 82 | + } | |
| 83 | + } | |
| 84 | + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | |
| 85 | + if indexPath.section == 2 { | |
| 86 | + let scene = Story.instantiateViewControllerWithIdentifier("SceneDetailViewController", storyName: "Main") as! SceneDetailViewController | |
| 87 | + self.navigationController?.pushViewController(scene, animated: true) | |
| 88 | + } | |
| 89 | + } | |
| 90 | + override func didReceiveMemoryWarning() { | |
| 91 | + super.didReceiveMemoryWarning() | |
| 92 | + // Dispose of any resources that can be recreated. | |
| 93 | + } | |
| 94 | + | |
| 95 | + | |
| 96 | + /* | |
| 97 | + // MARK: - Navigation | |
| 98 | + | |
| 99 | + // In a storyboard-based application, you will often want to do a little preparation before navigation | |
| 100 | + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | |
| 101 | + // Get the new view controller using segue.destinationViewController. | |
| 102 | + // Pass the selected object to the new view controller. | |
| 103 | + } | |
| 104 | + */ | |
| 105 | + | |
| 106 | +} | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/ReportViewController.swift
0 → 100644
| ... | ... | @@ -0,0 +1,98 @@ |
| 1 | +// | |
| 2 | +// ReportViewController.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by 葛建军 on 2018/3/5. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | + | |
| 11 | +class ReportViewController: UIViewController { | |
| 12 | + | |
| 13 | + @IBOutlet weak var reportTable: UITableView! | |
| 14 | + | |
| 15 | + //膜板 | |
| 16 | + var keyWindow = UIWindow() | |
| 17 | + var backBotton = UIButton() | |
| 18 | + //日历 | |
| 19 | + var calendar = CalendarView() | |
| 20 | + | |
| 21 | + override func viewDidLoad() { | |
| 22 | + super.viewDidLoad() | |
| 23 | + setupDateView() | |
| 24 | + } | |
| 25 | + | |
| 26 | + // MARK: - 设置日期页面 | |
| 27 | + func setupDateView(){ | |
| 28 | + | |
| 29 | + let headView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: screenWidth, height: 60)) | |
| 30 | + self.view.addSubview(headView) | |
| 31 | + | |
| 32 | + //添加手势 | |
| 33 | + let recognizer = UISwipeGestureRecognizer.init(target: self, action: #selector(showView)) | |
| 34 | + recognizer.direction = UISwipeGestureRecognizerDirection.down | |
| 35 | + headView.addGestureRecognizer(recognizer) | |
| 36 | + | |
| 37 | + calendar = CalendarView.init(frame: CGRect.init(x: 0, y: 30, width: screenWidth, height: 260)) | |
| 38 | + } | |
| 39 | + | |
| 40 | + @objc func showView(){ | |
| 41 | + keyWindow = UIApplication.shared.keyWindow! | |
| 42 | + let backBtn = UIButton.init(frame: CGRect.init(x: 0, y: calendar.frame.origin.y+260+22, width: screenWidth, height: screenHeight)) | |
| 43 | + backBtn.backgroundColor = UIColor.black | |
| 44 | + backBtn.alpha = 0.4 | |
| 45 | + | |
| 46 | + backBtn.addTarget(self, action: #selector(closeView(btn:)), for: UIControlEvents.allEvents) | |
| 47 | + reportTable.isUserInteractionEnabled = false | |
| 48 | + | |
| 49 | + keyWindow.addSubview(backBtn) | |
| 50 | + keyWindow.addSubview(calendar) | |
| 51 | + calendar.isHidden = false | |
| 52 | + } | |
| 53 | + @objc func closeView(btn:UIButton) { | |
| 54 | + | |
| 55 | + reportTable.isUserInteractionEnabled = true | |
| 56 | + UIView.animate(withDuration: 0.3) { | |
| 57 | + btn.removeFromSuperview() | |
| 58 | + self.calendar.isHidden = true | |
| 59 | + } | |
| 60 | + } | |
| 61 | + override func viewWillAppear(_ animated: Bool) { | |
| 62 | + super.viewWillAppear(animated) | |
| 63 | + } | |
| 64 | + override func viewWillDisappear(_ animated: Bool) { | |
| 65 | + super.viewWillDisappear(animated) | |
| 66 | + } | |
| 67 | + override func viewDidLayoutSubviews() { | |
| 68 | + super.viewDidLayoutSubviews() | |
| 69 | + | |
| 70 | + } | |
| 71 | + override func didReceiveMemoryWarning() { | |
| 72 | + super.didReceiveMemoryWarning() | |
| 73 | + } | |
| 74 | + | |
| 75 | + | |
| 76 | +} | |
| 77 | + | |
| 78 | +// MARK: - 作业报告列表 | |
| 79 | +extension ReportViewController: UITableViewDelegate,UITableViewDataSource{ | |
| 80 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
| 81 | + return 5 | |
| 82 | + } | |
| 83 | + | |
| 84 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
| 85 | + | |
| 86 | + if indexPath.row == 0 { | |
| 87 | + let cell = tableView.dequeueReusableCell(withIdentifier: "MoralTableViewCell", for: indexPath) as! MoralTableViewCell | |
| 88 | + return cell | |
| 89 | + }else{ | |
| 90 | + let cell = tableView.dequeueReusableCell(withIdentifier: "TaskPresentationTableViewCell", for: indexPath) as! TaskPresentationTableViewCell | |
| 91 | + return cell | |
| 92 | + } | |
| 93 | + } | |
| 94 | + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 95 | + return 280 | |
| 96 | + } | |
| 97 | + | |
| 98 | +} | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/SceneDetailViewController.swift
0 → 100644
| ... | ... | @@ -0,0 +1,76 @@ |
| 1 | +// | |
| 2 | +// SceneDetailViewController.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by Cao yang on 2018/3/22. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | + | |
| 11 | +class SceneDetailViewController: UIViewController,UITableViewDataSource,UITableViewDelegate { | |
| 12 | + | |
| 13 | + @IBOutlet weak var sceneTableView: UITableView! | |
| 14 | + override func viewDidLoad() { | |
| 15 | + super.viewDidLoad() | |
| 16 | + self.title = "场景详情" | |
| 17 | + sceneTableView.delegate = self | |
| 18 | + sceneTableView.dataSource = self | |
| 19 | + // Do any additional setup after loading the view. | |
| 20 | + } | |
| 21 | + func numberOfSections(in tableView: UITableView) -> Int { | |
| 22 | + return 3 | |
| 23 | + } | |
| 24 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
| 25 | + if section == 2 { | |
| 26 | + return 5 | |
| 27 | + } | |
| 28 | + return 1 | |
| 29 | + } | |
| 30 | + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 31 | + | |
| 32 | + switch indexPath.section { | |
| 33 | + case 0: | |
| 34 | + return 240 | |
| 35 | + case 1: | |
| 36 | + return 250 | |
| 37 | + case 2: | |
| 38 | + return 70 | |
| 39 | + default: | |
| 40 | + return 0 | |
| 41 | + } | |
| 42 | + } | |
| 43 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
| 44 | + var cell = UITableViewCell.init() | |
| 45 | + switch indexPath.section { | |
| 46 | + case 0: | |
| 47 | + cell = tableView.dequeueReusableCell(withIdentifier: "cultureCell", for: indexPath) as! SceneTopCell | |
| 48 | + return cell | |
| 49 | + case 1: | |
| 50 | + cell = tableView.dequeueReusableCell(withIdentifier: "scoreCell", for: indexPath) as! SceneMiddleCell | |
| 51 | + return cell | |
| 52 | + case 2: | |
| 53 | + cell = tableView.dequeueReusableCell(withIdentifier: "disciplineCell", for: indexPath) as! SceneDownCell | |
| 54 | + return cell | |
| 55 | + default: | |
| 56 | + return cell | |
| 57 | + } | |
| 58 | + } | |
| 59 | + | |
| 60 | + override func didReceiveMemoryWarning() { | |
| 61 | + super.didReceiveMemoryWarning() | |
| 62 | + // Dispose of any resources that can be recreated. | |
| 63 | + } | |
| 64 | + | |
| 65 | + | |
| 66 | + /* | |
| 67 | + // MARK: - Navigation | |
| 68 | + | |
| 69 | + // In a storyboard-based application, you will often want to do a little preparation before navigation | |
| 70 | + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | |
| 71 | + // Get the new view controller using segue.destinationViewController. | |
| 72 | + // Pass the selected object to the new view controller. | |
| 73 | + } | |
| 74 | + */ | |
| 75 | + | |
| 76 | +} | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/View/BehaviorDetailCell.swift
0 → 100644
| ... | ... | @@ -0,0 +1,24 @@ |
| 1 | +// | |
| 2 | +// BehaviorDetailCell.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by Cao yang on 2018/3/23. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | + | |
| 11 | +class BehaviorDetailCell: UITableViewCell { | |
| 12 | + | |
| 13 | + override func awakeFromNib() { | |
| 14 | + super.awakeFromNib() | |
| 15 | + // Initialization code | |
| 16 | + } | |
| 17 | + | |
| 18 | + override func setSelected(_ selected: Bool, animated: Bool) { | |
| 19 | + super.setSelected(selected, animated: animated) | |
| 20 | + | |
| 21 | + // Configure the view for the selected state | |
| 22 | + } | |
| 23 | + | |
| 24 | +} | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/View/CalendarView.swift
0 → 100644
| ... | ... | @@ -0,0 +1,72 @@ |
| 1 | +// | |
| 2 | +// CalendarView.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by Cao yang on 2018/3/27. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | + | |
| 11 | +class CalendarView: UIView,UICollectionViewDelegate,UICollectionViewDataSource { | |
| 12 | + | |
| 13 | + | |
| 14 | + var weekLab = ["日","一","二","三","四","五","六"] | |
| 15 | + | |
| 16 | + override init(frame: CGRect) { | |
| 17 | + super.init(frame: frame) | |
| 18 | + self.drawCalendarView(frame: frame) | |
| 19 | + } | |
| 20 | + | |
| 21 | + func drawCalendarView(frame:CGRect) { | |
| 22 | + //TODO: 数据源待完成 | |
| 23 | + let dayLab = ["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"] | |
| 24 | + weekLab.append(contentsOf: dayLab) | |
| 25 | + //设置layout | |
| 26 | + let flowlayout = UICollectionViewFlowLayout() | |
| 27 | + flowlayout.itemSize = CGSize.init(width: screenWidth/7, height:40) | |
| 28 | + flowlayout.minimumLineSpacing = 0 | |
| 29 | + flowlayout.minimumInteritemSpacing = 0 | |
| 30 | + flowlayout.headerReferenceSize = CGSize.init(width: 0, height: 0) | |
| 31 | + flowlayout.footerReferenceSize = CGSize.init(width: 0, height: 0) | |
| 32 | + flowlayout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0) | |
| 33 | + | |
| 34 | + let calendarView = UICollectionView.init(frame: frame, collectionViewLayout: flowlayout) | |
| 35 | + calendarView.delegate = self | |
| 36 | + calendarView.dataSource = self | |
| 37 | + calendarView.backgroundColor = UIColor.white | |
| 38 | + calendarView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "calendarCell") | |
| 39 | + self.addSubview(calendarView) | |
| 40 | + } | |
| 41 | + | |
| 42 | + //MARK: - Delegate | |
| 43 | + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { | |
| 44 | + return weekLab.count | |
| 45 | + } | |
| 46 | + | |
| 47 | + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { | |
| 48 | + | |
| 49 | + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "calendarCell", for: indexPath) | |
| 50 | + let lab = UILabel.init(frame: cell.bounds) | |
| 51 | + lab.text = weekLab[indexPath.row] | |
| 52 | + lab.textAlignment = .center | |
| 53 | + cell.addSubview(lab) | |
| 54 | + return cell | |
| 55 | + | |
| 56 | + } | |
| 57 | + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { | |
| 58 | + print("点击了 第 \(weekLab[indexPath.row])") | |
| 59 | + } | |
| 60 | + required init?(coder aDecoder: NSCoder) { | |
| 61 | + fatalError("init(coder:) has not been implemented") | |
| 62 | + } | |
| 63 | + | |
| 64 | + /* | |
| 65 | + // Only override draw() if you perform custom drawing. | |
| 66 | + // An empty implementation adversely affects performance during animation. | |
| 67 | + override func draw(_ rect: CGRect) { | |
| 68 | + // Drawing code | |
| 69 | + } | |
| 70 | + */ | |
| 71 | + | |
| 72 | +} | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/View/EducationDetailCell.swift
0 → 100644
| ... | ... | @@ -0,0 +1,43 @@ |
| 1 | +// | |
| 2 | +// EducationDetailCell.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by Cao yang on 2018/3/23. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | + | |
| 11 | +class EducationDetailCell: UITableViewCell { | |
| 12 | + | |
| 13 | + @IBOutlet weak var lineChartView: UIView! | |
| 14 | + | |
| 15 | + var customLineChart = LineChartView() | |
| 16 | + | |
| 17 | + override func awakeFromNib() { | |
| 18 | + super.awakeFromNib() | |
| 19 | + let rect = self.lineChartView.bounds | |
| 20 | + print(rect) | |
| 21 | + customLineChart = LineChartView.init(frame: rect) | |
| 22 | + customLineChart.drawUI(xLableArr: nil) | |
| 23 | + let arr1 = [4,4,2,1,3] | |
| 24 | + let arr2 = [2,1,4,4,5] | |
| 25 | + | |
| 26 | + customLineChart.drawLine(point: arr1, color: UIColorWithRGB(R: 65, G: 105, B: 190)) | |
| 27 | + customLineChart.drawLine(point: arr2, color: UIColorWithRGB(R: 220, G: 0, B: 16)) | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + self.lineChartView.addSubview(customLineChart) | |
| 32 | + | |
| 33 | + | |
| 34 | + // Initialization code | |
| 35 | + } | |
| 36 | + | |
| 37 | + override func setSelected(_ selected: Bool, animated: Bool) { | |
| 38 | + super.setSelected(selected, animated: animated) | |
| 39 | + | |
| 40 | + // Configure the view for the selected state | |
| 41 | + } | |
| 42 | + | |
| 43 | +} | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/View/LineChartView.swift
0 → 100644
| ... | ... | @@ -0,0 +1,220 @@ |
| 1 | +// | |
| 2 | +// LineChartView.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by Cao yang on 2018/3/23. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | + | |
| 11 | +class LineChartView: UIView { | |
| 12 | + | |
| 13 | + //默认横坐标 | |
| 14 | + private var xLabArr = ["行为","文明","课堂","作业","礼仪"] | |
| 15 | + //设置纵坐标 | |
| 16 | + private let yCount = 6 | |
| 17 | + //横坐标个数 | |
| 18 | + private let xCount = 5 | |
| 19 | + //最大绩点分数 | |
| 20 | + private let GPA = 5 | |
| 21 | + //储存横纵坐标,画线用 | |
| 22 | + private var xCenterArr = Array<CGFloat>() | |
| 23 | + private var yCenterArr = Array<CGFloat>() | |
| 24 | + //判断是否重复点击 | |
| 25 | + private var btnTouch = 10 | |
| 26 | + //虚线 | |
| 27 | + private let lineLayer = CAShapeLayer() | |
| 28 | + //横坐标下划线 | |
| 29 | + private let xMoveLayer = CAShapeLayer() | |
| 30 | + //纵坐标Lab数组 | |
| 31 | + private var yMoveLaArr = Array<UILabel>() | |
| 32 | + //折线图数据数组 | |
| 33 | + private var dateArr = Array<Array<Int>>() | |
| 34 | + //显示的数字 | |
| 35 | + var yLabArray = Array<UILabel>() | |
| 36 | + | |
| 37 | + override init(frame: CGRect) { | |
| 38 | + super.init(frame: frame) | |
| 39 | + print("frame==\(frame)") | |
| 40 | + | |
| 41 | + } | |
| 42 | + func drawUI(xLableArr:Array<String>?){ | |
| 43 | + | |
| 44 | + if xLableArr != nil { | |
| 45 | + xLabArr = xLableArr! | |
| 46 | + } | |
| 47 | + drawX() | |
| 48 | + drawY() | |
| 49 | + } | |
| 50 | + //设置纵坐标 | |
| 51 | + private func drawY() { | |
| 52 | + | |
| 53 | + let yHeight = (self.bounds.height-60)/CGFloat(yCount) | |
| 54 | + for index in 0..<yCount{ | |
| 55 | + let yLab = UILabel.init(frame: CGRect.init(x: 10, y: CGFloat(index)*yHeight, width: 20, height: 20)) | |
| 56 | + yLab.text = "\(GPA-index)" | |
| 57 | + yLab.textColor = UIColorWithRGB(R: 119, G: 119, B: 119) | |
| 58 | + yLab.font = UIFont.systemFont(ofSize: 14) | |
| 59 | + self.addSubview(yLab) | |
| 60 | + | |
| 61 | + let lineLab = UILabel.init(frame: CGRect.init(x: 30, y: yLab.center.y, width: screenWidth-60, height: 0.4)) | |
| 62 | + lineLab.backgroundColor = UIColorWithRGB(R: 190, G: 190, B: 190) | |
| 63 | + self.addSubview(lineLab) | |
| 64 | + | |
| 65 | + yMoveLaArr.append(yLab) | |
| 66 | + yCenterArr.append(yLab.frame.origin.y+10) | |
| 67 | + } | |
| 68 | + } | |
| 69 | + //设置横坐标 | |
| 70 | + private func drawX() { | |
| 71 | + let xWidth = (screenWidth-20)/CGFloat(yCount) | |
| 72 | + for index in 0..<xCount { | |
| 73 | + let nameBtn = UIButton.init(frame: CGRect.init(x: xWidth+CGFloat(index)*xWidth, y: self.bounds.height-70, width: 40, height: 25)) | |
| 74 | + nameBtn.setTitle(xLabArr[index], for: UIControlState.normal) | |
| 75 | + nameBtn.setTitleColor(UIColorWithRGB(R: 119, G: 119, B: 119), for: UIControlState.normal) | |
| 76 | + nameBtn.titleLabel!.textAlignment = .center | |
| 77 | + nameBtn.titleLabel!.font = UIFont.systemFont(ofSize: 13) | |
| 78 | +// nameBtn.backgroundColor = UIColor.orange | |
| 79 | + nameBtn.tag = index | |
| 80 | + self.addSubview(nameBtn) | |
| 81 | + | |
| 82 | + nameBtn.addTarget(self, action: #selector(touchXAction(tap:)), for: UIControlEvents.touchUpInside) | |
| 83 | + | |
| 84 | + xCenterArr.append(nameBtn.frame.origin.x+20) | |
| 85 | + } | |
| 86 | + } | |
| 87 | + | |
| 88 | + //MARK: - 画折线 | |
| 89 | + func drawLine(point:Array<Int>,color:UIColor){ | |
| 90 | + | |
| 91 | + let pointArr = swichPoint(arr: point) | |
| 92 | + | |
| 93 | + let drawLayer = DrawLayer() | |
| 94 | + drawLayer.xPointArr = xCenterArr | |
| 95 | + drawLayer.yPointArr = [yCenterArr[pointArr[0]],yCenterArr[pointArr[1]],yCenterArr[pointArr[2]],yCenterArr[pointArr[3]],yCenterArr[pointArr[4]]] | |
| 96 | + drawLayer.bounds = self.bounds | |
| 97 | + drawLayer.position = self.center | |
| 98 | + drawLayer.lineColor = color | |
| 99 | + self.layer.addSublayer(drawLayer) | |
| 100 | + drawLayer.setNeedsDisplay() | |
| 101 | + | |
| 102 | + dateArr.append(point) | |
| 103 | + | |
| 104 | + } | |
| 105 | + //MARK: - 点击横坐标 | |
| 106 | + @objc func touchXAction(tap:UIButton){ | |
| 107 | + | |
| 108 | + let index = tap.tag | |
| 109 | + | |
| 110 | + | |
| 111 | + if btnTouch != index { | |
| 112 | + | |
| 113 | + //竖虚线 | |
| 114 | + lineLayer.strokeColor = UIColorWithRGB(R: 92, G: 145, B: 230).cgColor | |
| 115 | + lineLayer.lineWidth = 1 | |
| 116 | + let arr = [5,5] | |
| 117 | + lineLayer.lineDashPhase = 0 | |
| 118 | + lineLayer.lineDashPattern = arr as [NSNumber] | |
| 119 | + self.layer.addSublayer(lineLayer) | |
| 120 | + | |
| 121 | + //X轴下划线 | |
| 122 | + let movePath = CGMutablePath() | |
| 123 | + movePath.move(to: CGPoint.init(x: xCenterArr[index], y: yCenterArr[0])) | |
| 124 | + movePath.addLine(to: CGPoint.init(x: xCenterArr[index], y: 10+5*(self.bounds.height-60)/CGFloat(yCount))) | |
| 125 | + lineLayer.path = movePath | |
| 126 | + | |
| 127 | + xMoveLayer.strokeColor = UIColorWithRGB(R: 92, G: 145, B: 230).cgColor | |
| 128 | + xMoveLayer.lineWidth = 2 | |
| 129 | + self.layer.addSublayer(xMoveLayer) | |
| 130 | + let movePath2 = CGMutablePath() | |
| 131 | + movePath2.move(to: CGPoint.init(x: xCenterArr[index]-15, y: self.bounds.height-45)) | |
| 132 | + movePath2.addLine(to: CGPoint.init(x: xCenterArr[index]+15, y: self.bounds.height-45)) | |
| 133 | + xMoveLayer.path = movePath2 | |
| 134 | + | |
| 135 | + if yLabArray.count == dateArr.count { | |
| 136 | + for label in yLabArray { | |
| 137 | + label.removeFromSuperview() | |
| 138 | + } | |
| 139 | + } | |
| 140 | + yLabArray.removeAll() | |
| 141 | + //数字显示 | |
| 142 | + for i in 0..<dateArr.count { | |
| 143 | + let arr = dateArr[i] | |
| 144 | + //y坐标数值 | |
| 145 | + let y = arr[index] | |
| 146 | + let yLab = yMoveLaArr[GPA-y] | |
| 147 | + var rect = yLab.frame | |
| 148 | + rect.origin.x = xCenterArr[index]+10 | |
| 149 | + | |
| 150 | + let newLab = UILabel() | |
| 151 | + newLab.text = yLab.text | |
| 152 | + newLab.textColor = yLab.textColor | |
| 153 | + newLab.font = yLab.font | |
| 154 | + newLab.frame = rect | |
| 155 | + self.addSubview(newLab) | |
| 156 | + yLabArray.append(newLab) | |
| 157 | + } | |
| 158 | + }else{ | |
| 159 | + print(yLabArray) | |
| 160 | + } | |
| 161 | + btnTouch = index | |
| 162 | + | |
| 163 | + | |
| 164 | + } | |
| 165 | + //转换y坐标 | |
| 166 | + func swichPoint(arr:Array<Int>)->Array<Int>{ | |
| 167 | + var array = Array<Int>() | |
| 168 | + for index in 0..<arr.count { | |
| 169 | + let value = GPA - arr[index] | |
| 170 | + array.append(value) | |
| 171 | + } | |
| 172 | + return array | |
| 173 | + } | |
| 174 | + | |
| 175 | + required init?(coder aDecoder: NSCoder) { | |
| 176 | + fatalError("init(coder:) has not been implemented") | |
| 177 | + } | |
| 178 | + | |
| 179 | + /* | |
| 180 | + // Only override draw() if you perform custom drawing. | |
| 181 | + // An empty implementation adversely affects performance during animation. | |
| 182 | + override func draw(_ rect: CGRect) { | |
| 183 | + // Drawing code | |
| 184 | + } | |
| 185 | + */ | |
| 186 | + | |
| 187 | +} | |
| 188 | + | |
| 189 | +class DrawLayer: CALayer { | |
| 190 | + | |
| 191 | + var yPointArr = Array<CGFloat>() | |
| 192 | + var xPointArr = Array<CGFloat>() | |
| 193 | + var lineColor = UIColor() | |
| 194 | + | |
| 195 | + override func draw(in ctx: CGContext) { | |
| 196 | + | |
| 197 | + let context = ctx | |
| 198 | + //点 | |
| 199 | + context.setFillColor(lineColor.cgColor) | |
| 200 | + | |
| 201 | + for i in 0..<xPointArr.count { | |
| 202 | + context.fillEllipse(in: CGRect.init(x: xPointArr[i]-5, y: yPointArr[i]-5, width: 10, height: 10)) | |
| 203 | + | |
| 204 | + } | |
| 205 | + //折线 | |
| 206 | + context.setStrokeColor(lineColor.cgColor) | |
| 207 | + context.setLineWidth(1.5) | |
| 208 | + for i in 0..<xPointArr.count { | |
| 209 | + if i == 0 { | |
| 210 | + context.move(to: CGPoint.init(x: xPointArr[0] , y: yPointArr[0])) | |
| 211 | + }else{ | |
| 212 | + context.addLine(to: CGPoint.init(x: xPointArr[i] , y: yPointArr[i])) | |
| 213 | + } | |
| 214 | + } | |
| 215 | + context.strokePath() | |
| 216 | + } | |
| 217 | + | |
| 218 | +} | |
| 219 | + | |
| 220 | + | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/View/MoralDetailCell.swift
0 → 100644
| ... | ... | @@ -0,0 +1,32 @@ |
| 1 | +// | |
| 2 | +// MoralDetailCell.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by Cao yang on 2018/3/23. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | + | |
| 11 | +class MoralDetailCell: UITableViewCell { | |
| 12 | + | |
| 13 | + @IBOutlet weak var dateLab: UILabel! | |
| 14 | + @IBOutlet weak var pointLab: UILabel! | |
| 15 | + @IBOutlet weak var rankingLab: UILabel! | |
| 16 | + @IBOutlet weak var risingLab: UILabel! | |
| 17 | + @IBOutlet weak var risingRightLab: UILabel! | |
| 18 | + @IBOutlet weak var averageLab: UILabel! | |
| 19 | + @IBOutlet weak var averageRightLab: UILabel! | |
| 20 | + @IBOutlet weak var evaluationLab: UILabel! | |
| 21 | + override func awakeFromNib() { | |
| 22 | + super.awakeFromNib() | |
| 23 | + // Initialization code | |
| 24 | + } | |
| 25 | + | |
| 26 | + override func setSelected(_ selected: Bool, animated: Bool) { | |
| 27 | + super.setSelected(selected, animated: animated) | |
| 28 | + | |
| 29 | + // Configure the view for the selected state | |
| 30 | + } | |
| 31 | + | |
| 32 | +} | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/View/MoralTableViewCell.swift
0 → 100644
| ... | ... | @@ -0,0 +1,30 @@ |
| 1 | +// | |
| 2 | +// MoralTableViewCell.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by Cao yang on 2018/3/22. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | + | |
| 11 | +class MoralTableViewCell: UITableViewCell { | |
| 12 | + | |
| 13 | + @IBOutlet weak var pointLab: UILabel! | |
| 14 | + @IBOutlet weak var todayReName: UILabel! | |
| 15 | + @IBOutlet weak var rankingLab: UILabel! | |
| 16 | + @IBOutlet weak var evaluateLab: UILabel! | |
| 17 | + @IBOutlet weak var rankStatusLab: UILabel! | |
| 18 | + @IBOutlet weak var reportDateLab: UILabel! | |
| 19 | + override func awakeFromNib() { | |
| 20 | + super.awakeFromNib() | |
| 21 | + // Initialization code | |
| 22 | + } | |
| 23 | + | |
| 24 | + override func setSelected(_ selected: Bool, animated: Bool) { | |
| 25 | + super.setSelected(selected, animated: animated) | |
| 26 | + | |
| 27 | + // Configure the view for the selected state | |
| 28 | + } | |
| 29 | + | |
| 30 | +} | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/View/ReportDateCollectionViewCell.swift
0 → 100644
| ... | ... | @@ -0,0 +1,21 @@ |
| 1 | +// | |
| 2 | +// ReportDateCollectionViewCell.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by 葛建军 on 2018/3/9. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | +class ReportDateCollectionViewCell: UICollectionViewCell { | |
| 11 | + @IBOutlet var weekLabel: UILabel! | |
| 12 | + @IBOutlet var dateLabel: UILabel! | |
| 13 | + func setupWithDate(week:String,date:String){ | |
| 14 | + weekLabel.text = week | |
| 15 | + dateLabel.text = date | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + } | |
| 20 | + | |
| 21 | +} | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/View/ReportHeaderView.swift
0 → 100644
| ... | ... | @@ -0,0 +1,48 @@ |
| 1 | +// | |
| 2 | +// ReportHeaderView.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by 葛建军 on 2018/3/8. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | + | |
| 11 | +class ReportHeaderView: UIView { | |
| 12 | + var delegate:ReportHeaderViewDelegate! | |
| 13 | + @IBOutlet var nameButton: UIButton!//学生名字按钮 | |
| 14 | + @IBOutlet var dateButton: UIButton!//日期按钮 | |
| 15 | + @IBOutlet var typeButton: UIButton!//筛选按钮 | |
| 16 | + override func awakeFromNib() { | |
| 17 | + super.awakeFromNib() | |
| 18 | + } | |
| 19 | + override func layoutSubviews() { | |
| 20 | + super.layoutSubviews() | |
| 21 | + nameButton.frame.origin = CGPoint(x: 15, y: 7) | |
| 22 | + dateButton.frame.origin = CGPoint(x: (getScreenWidth()-dateButton.frame.size.width)/2, y: 7) | |
| 23 | + typeButton.frame.origin = CGPoint(x: getScreenWidth()-typeButton.frame.size.width-30, y: 7) | |
| 24 | + } | |
| 25 | + //点击学生姓名按钮 | |
| 26 | + @IBAction func changeStudentAction(_ sender: UIButton) { | |
| 27 | + delegate.selectStudentButton() | |
| 28 | + } | |
| 29 | + //点击日期按钮 | |
| 30 | + @IBAction func changeDateAction(_ sender: UIButton) { | |
| 31 | + delegate.selectDateButton() | |
| 32 | + } | |
| 33 | + //点击筛选按钮 | |
| 34 | + @IBAction func changeTypeAction(_ sender: UIButton) { | |
| 35 | + delegate.selectTypeButton() | |
| 36 | + } | |
| 37 | + | |
| 38 | +} | |
| 39 | +protocol ReportHeaderViewDelegate { | |
| 40 | + func selectStudentButton() | |
| 41 | + func selectDateButton() | |
| 42 | + func selectTypeButton() | |
| 43 | +} | |
| 44 | +extension ReportHeaderView { | |
| 45 | + class func titleView() -> ReportHeaderView { | |
| 46 | + return Bundle.main.loadNibNamed("ReportHeaderView", owner: nil, options: nil)?.first as! ReportHeaderView | |
| 47 | + } | |
| 48 | +} | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/View/ReportHeaderView.xib
0 → 100644
| ... | ... | @@ -0,0 +1,61 @@ |
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> | |
| 3 | + <device id="retina4_7" orientation="portrait"> | |
| 4 | + <adaptation id="fullscreen"/> | |
| 5 | + </device> | |
| 6 | + <dependencies> | |
| 7 | + <deployment identifier="iOS"/> | |
| 8 | + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/> | |
| 9 | + <capability name="Safe area layout guides" minToolsVersion="9.0"/> | |
| 10 | + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | |
| 11 | + </dependencies> | |
| 12 | + <objects> | |
| 13 | + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> | |
| 14 | + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> | |
| 15 | + <view clipsSubviews="YES" contentMode="scaleToFill" id="4WE-cx-977" customClass="ReportHeaderView" customModule="ParentAssistant" customModuleProvider="target"> | |
| 16 | + <rect key="frame" x="0.0" y="0.0" width="485" height="44"/> | |
| 17 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | |
| 18 | + <subviews> | |
| 19 | + <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="W6e-VK-JCE"> | |
| 20 | + <rect key="frame" x="20" y="7" width="46" height="30"/> | |
| 21 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | |
| 22 | + <state key="normal" title="马伯骞"> | |
| 23 | + <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
| 24 | + </state> | |
| 25 | + <connections> | |
| 26 | + <action selector="changeStudentAction:" destination="4WE-cx-977" eventType="touchUpInside" id="Dua-XZ-hMB"/> | |
| 27 | + </connections> | |
| 28 | + </button> | |
| 29 | + <button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5Dq-Z9-eEM"> | |
| 30 | + <rect key="frame" x="434" y="7" width="31" height="30"/> | |
| 31 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | |
| 32 | + <state key="normal" title="筛选"> | |
| 33 | + <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
| 34 | + </state> | |
| 35 | + <connections> | |
| 36 | + <action selector="changeTypeAction:" destination="4WE-cx-977" eventType="touchUpInside" id="XFz-ca-od2"/> | |
| 37 | + </connections> | |
| 38 | + </button> | |
| 39 | + <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7xY-bD-L7w"> | |
| 40 | + <rect key="frame" x="191" y="7" width="102" height="30"/> | |
| 41 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | |
| 42 | + <state key="normal" title="12月29日"> | |
| 43 | + <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
| 44 | + </state> | |
| 45 | + <connections> | |
| 46 | + <action selector="changeDateAction:" destination="4WE-cx-977" eventType="touchUpInside" id="pCF-3R-0zv"/> | |
| 47 | + </connections> | |
| 48 | + </button> | |
| 49 | + </subviews> | |
| 50 | + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> | |
| 51 | + <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> | |
| 52 | + <viewLayoutGuide key="safeArea" id="71B-FS-Ws9"/> | |
| 53 | + <connections> | |
| 54 | + <outlet property="dateButton" destination="7xY-bD-L7w" id="3zG-4z-eNW"/> | |
| 55 | + <outlet property="nameButton" destination="W6e-VK-JCE" id="XDD-iU-T0k"/> | |
| 56 | + <outlet property="typeButton" destination="5Dq-Z9-eEM" id="LAM-Dw-HAX"/> | |
| 57 | + </connections> | |
| 58 | + <point key="canvasLocation" x="156.5" y="93"/> | |
| 59 | + </view> | |
| 60 | + </objects> | |
| 61 | +</document> | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/View/SceneDownCell.swift
0 → 100644
| ... | ... | @@ -0,0 +1,30 @@ |
| 1 | +// | |
| 2 | +// SceneDownCell.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by Cao yang on 2018/3/24. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | + | |
| 11 | +class SceneDownCell: UITableViewCell { | |
| 12 | + | |
| 13 | + @IBOutlet weak var evaluateLab: UILabel! | |
| 14 | + @IBOutlet weak var sceneLab: UILabel! | |
| 15 | + @IBOutlet weak var scoreLab: UILabel! | |
| 16 | + @IBOutlet weak var nameLab: UILabel! | |
| 17 | + @IBOutlet weak var classLab: UILabel! | |
| 18 | + @IBOutlet weak var dateLab: UILabel! | |
| 19 | + override func awakeFromNib() { | |
| 20 | + super.awakeFromNib() | |
| 21 | + // Initialization code | |
| 22 | + } | |
| 23 | + | |
| 24 | + override func setSelected(_ selected: Bool, animated: Bool) { | |
| 25 | + super.setSelected(selected, animated: animated) | |
| 26 | + | |
| 27 | + // Configure the view for the selected state | |
| 28 | + } | |
| 29 | + | |
| 30 | +} | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/View/SceneMiddleCell.swift
0 → 100644
| ... | ... | @@ -0,0 +1,44 @@ |
| 1 | +// | |
| 2 | +// SceneMiddleCell.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by Cao yang on 2018/3/24. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | + | |
| 11 | +class SceneMiddleCell: UITableViewCell { | |
| 12 | + | |
| 13 | + @IBOutlet weak var lineChartView: UIView! | |
| 14 | + | |
| 15 | + var customLineChart = LineChartView() | |
| 16 | + override func awakeFromNib() { | |
| 17 | + super.awakeFromNib() | |
| 18 | + // Initialization code | |
| 19 | + let rect = self.lineChartView.bounds | |
| 20 | + customLineChart = LineChartView.init(frame: rect) | |
| 21 | + let customXLabArr = ["03/12","03/13","03/14","03/15","03/16"] | |
| 22 | + | |
| 23 | + customLineChart.drawUI(xLableArr:customXLabArr) | |
| 24 | + | |
| 25 | + let arr1 = [5,4,5,5,5] | |
| 26 | + let arr2 = [4,4,2,1,3] | |
| 27 | + let arr3 = [3,3,4,3,4] | |
| 28 | + | |
| 29 | + | |
| 30 | + customLineChart.drawLine(point: arr1, color: UIColorWithRGB(R: 129, G: 199, B: 132)) | |
| 31 | + customLineChart.drawLine(point: arr2, color: UIColorWithRGB(R: 92, G: 145, B: 230)) | |
| 32 | + customLineChart.drawLine(point: arr3, color: UIColorWithRGB(R: 255, G: 213, B: 79)) | |
| 33 | + | |
| 34 | + self.lineChartView.addSubview(customLineChart) | |
| 35 | + | |
| 36 | + } | |
| 37 | + | |
| 38 | + override func setSelected(_ selected: Bool, animated: Bool) { | |
| 39 | + super.setSelected(selected, animated: animated) | |
| 40 | + | |
| 41 | + // Configure the view for the selected state | |
| 42 | + } | |
| 43 | + | |
| 44 | +} | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/View/SceneTopCell.swift
0 → 100644
| ... | ... | @@ -0,0 +1,28 @@ |
| 1 | +// | |
| 2 | +// SceneTopCell.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by Cao yang on 2018/3/24. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | + | |
| 11 | +class SceneTopCell: UITableViewCell { | |
| 12 | + | |
| 13 | + @IBOutlet weak var scoreLab: UILabel! //得分 | |
| 14 | + @IBOutlet weak var GPALab: UILabel! //绩点 | |
| 15 | + @IBOutlet weak var LevelLab: UILabel! //等级 | |
| 16 | + @IBOutlet weak var SuggestLab: UITextView! //指导意见 | |
| 17 | + override func awakeFromNib() { | |
| 18 | + super.awakeFromNib() | |
| 19 | + // Initialization code | |
| 20 | + } | |
| 21 | + | |
| 22 | + override func setSelected(_ selected: Bool, animated: Bool) { | |
| 23 | + super.setSelected(selected, animated: animated) | |
| 24 | + | |
| 25 | + // Configure the view for the selected state | |
| 26 | + } | |
| 27 | + | |
| 28 | +} | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/View/TaskPresentationTableViewCell.swift
0 → 100644
| ... | ... | @@ -0,0 +1,82 @@ |
| 1 | +// | |
| 2 | +// TaskPresentationTableViewCell.swift | |
| 3 | +// ParentAssistant | |
| 4 | +// | |
| 5 | +// Created by 葛建军 on 2018/3/9. | |
| 6 | +// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | +// | |
| 8 | + | |
| 9 | +import UIKit | |
| 10 | +//func degreesToRadians(x:Double) -> CGFloat{ | |
| 11 | +// return (CGFloat(Double.pi*(x)/180.0)) | |
| 12 | +//} //把角度转换成PI的方式 | |
| 13 | +//let PROGREESS_WIDTH = 160 //圆直径 | |
| 14 | +//let PROGRESS_LINE_WIDTH = 4 //弧线的宽度 | |
| 15 | +class TaskPresentationTableViewCell: UITableViewCell { | |
| 16 | + | |
| 17 | + @IBOutlet var layerLabel: UILabel! | |
| 18 | + override func awakeFromNib() { | |
| 19 | + super.awakeFromNib() | |
| 20 | + // Initialization code | |
| 21 | + //可以画出上面所示的整个轨道。这个圆形是从-210度的角度到30度。 | |
| 22 | +// let path = UIBezierPath(arcCenter: CGPoint(x: 40, y: 40), radius: CGFloat((PROGREESS_WIDTH-PROGRESS_LINE_WIDTH)/2), startAngle: degreesToRadians(x: -210), endAngle: degreesToRadians(x: 30), clockwise: true) | |
| 23 | + //画出一个完成的进度的背景轨道 | |
| 24 | +// let trackLayer = CAShapeLayer()//创建一个track shape layer | |
| 25 | +// trackLayer.frame = self.layerLabel.bounds | |
| 26 | +// trackLayer.fillColor = UIColor.clear.cgColor | |
| 27 | +// trackLayer.strokeColor = UIColor.red.cgColor//指定path的渲染颜色 | |
| 28 | +// trackLayer.opacity = 0.25 //背景同学你就甘心做背景吧,不要太明显了,透明度小一点 | |
| 29 | +// trackLayer.lineCap = kCALineCapRound//指定线的边缘是圆的 | |
| 30 | +// trackLayer.lineWidth = CGFloat(PROGRESS_LINE_WIDTH)//线的宽度 | |
| 31 | +// trackLayer.path = path.cgPath //把path传递給layer,然后layer会处理相应的渲染,整个逻辑和CoreGraph是一致的。 | |
| 32 | +// | |
| 33 | +// self.layerLabel.layer.addSublayer(trackLayer) | |
| 34 | + //渐变进度条 | |
| 35 | +// let progressLayer = CAShapeLayer() | |
| 36 | +// progressLayer.frame = self.layerLabel.bounds | |
| 37 | +// progressLayer.fillColor = UIColor.clear.cgColor | |
| 38 | +// progressLayer.strokeColor = UIColor.red.cgColor | |
| 39 | +// progressLayer.lineCap = kCALineCapRound; | |
| 40 | +// progressLayer.lineWidth = CGFloat(PROGRESS_LINE_WIDTH) | |
| 41 | +// progressLayer.path = path.cgPath | |
| 42 | +// progressLayer.strokeEnd = 50/100.0 //总进度 | |
| 43 | +// | |
| 44 | +// let gradientLayer = CALayer() | |
| 45 | +// let gradientLayer1 = CAGradientLayer() | |
| 46 | +// gradientLayer1.frame = CGRect(x: 0, y: 0, width: self.layerLabel.frame.size.width/2, height: self.layerLabel.frame.size.height) | |
| 47 | +// gradientLayer1.colors = [UIColor.yellow.cgColor,UIColor.blue.cgColor] | |
| 48 | +// gradientLayer1.locations = [0.5,0.9,1] | |
| 49 | +// gradientLayer1.startPoint = CGPoint(x: 0.5, y: 1) | |
| 50 | +// gradientLayer1.endPoint = CGPoint(x: 0.5, y: 0) | |
| 51 | +// gradientLayer.addSublayer(gradientLayer1) | |
| 52 | +// | |
| 53 | +// let gradientLayer2 = CAGradientLayer() | |
| 54 | +// gradientLayer2.frame = CGRect(x: self.layerLabel.frame.size.width/2, y: 0, width: self.layerLabel.frame.size.width/2, height: self.layerLabel.frame.size.height) | |
| 55 | +// gradientLayer2.colors = [UIColor.blue.cgColor,UIColor.blue.cgColor] | |
| 56 | +// gradientLayer2.locations = [0.1,0.5,1] | |
| 57 | +// gradientLayer2.startPoint = CGPoint(x: 0.5, y: 0) | |
| 58 | +// gradientLayer2.endPoint = CGPoint(x: 0.5, y: 1) | |
| 59 | +// gradientLayer.addSublayer(gradientLayer2) | |
| 60 | +// | |
| 61 | +// gradientLayer.mask = progressLayer//用progressLayer来截取渐变层 | |
| 62 | +// self.layerLabel.layer.addSublayer(gradientLayer) | |
| 63 | + } | |
| 64 | + //进度条效果 CAShapeLayer有一个strokeEnd的属性,这个属性是从0到1的浮点类型,正好可以用表达百分比,而且这个属性是animatable,可以动态的表示进度的变化。 | |
| 65 | + // -(void)setPercent:(NSInteger)percent animated:(BOOL)animated | |
| 66 | + // { | |
| 67 | + // [CATransaction begin]; | |
| 68 | + // [CATransaction setDisableActions:!animated]; | |
| 69 | + // [CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]]; | |
| 70 | + // [CATransaction setAnimationDuration:MAIN_SCREEN_ANIMATION_TIME]; | |
| 71 | + // progressLayer.strokeEnd = percent/100.0; | |
| 72 | + // [CATransaction commit]; | |
| 73 | + // | |
| 74 | + // _percent = percent; | |
| 75 | + // } | |
| 76 | + override func setSelected(_ selected: Bool, animated: Bool) { | |
| 77 | + super.setSelected(selected, animated: animated) | |
| 78 | + | |
| 79 | + // Configure the view for the selected state | |
| 80 | + } | |
| 81 | + | |
| 82 | +} | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/report/MoralViewController.swift
| ... | ... | @@ -1,105 +0,0 @@ |
| 1 | -// | |
| 2 | -// MoralViewController.swift | |
| 3 | -// ParentAssistant | |
| 4 | -// | |
| 5 | -// Created by Cao yang on 2018/3/22. | |
| 6 | -// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | -// | |
| 8 | - | |
| 9 | -import UIKit | |
| 10 | - | |
| 11 | -class MoralViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { | |
| 12 | - | |
| 13 | - @IBOutlet weak var tableView: UITableView! | |
| 14 | - var data = Array<JSON>() | |
| 15 | - override func viewDidLoad() { | |
| 16 | - super.viewDidLoad() | |
| 17 | - self.title = "德育报告" | |
| 18 | - tableView.delegate = self | |
| 19 | - tableView.dataSource = self | |
| 20 | - | |
| 21 | - | |
| 22 | - downLoadDataFromNet() | |
| 23 | - } | |
| 24 | - | |
| 25 | - private func downLoadDataFromNet(){ | |
| 26 | - | |
| 27 | - | |
| 28 | - let params = ["screenId":1,"startDate":"2018-03-08","endDate":"2018-04-08","classId":"70","schoolId":1] as [String : Any] | |
| 29 | - | |
| 30 | - HTTPServer.shared.getEvaluationSceneAnalysis(parameters: params as [String : AnyObject]) { (backData, error) in | |
| 31 | - print(backData!) | |
| 32 | - if error == nil && JSON.fromString(backData)!["status"].intValue == 1 { | |
| 33 | - | |
| 34 | -// self.data = SceneEvaluate(j: JSON.fromString(backData)!.contentData()) | |
| 35 | -// if self.data != nil{ | |
| 36 | -// print(self.data) | |
| 37 | -// } | |
| 38 | - } | |
| 39 | - } | |
| 40 | - } | |
| 41 | - | |
| 42 | - | |
| 43 | - | |
| 44 | - func numberOfSections(in tableView: UITableView) -> Int { | |
| 45 | - return 3 | |
| 46 | - } | |
| 47 | - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
| 48 | - | |
| 49 | - if section == 2 { | |
| 50 | - return 3 | |
| 51 | - }else{ | |
| 52 | - return 1 | |
| 53 | - } | |
| 54 | - } | |
| 55 | - func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 56 | - switch indexPath.section { | |
| 57 | - case 0: | |
| 58 | - return 240 | |
| 59 | - case 1: | |
| 60 | - return 240 | |
| 61 | - case 2: | |
| 62 | - return 70 | |
| 63 | - default: | |
| 64 | - return 0 | |
| 65 | - } | |
| 66 | - } | |
| 67 | - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
| 68 | - var cell = UITableViewCell.init() | |
| 69 | - switch indexPath.section { | |
| 70 | - case 0: | |
| 71 | - cell = tableView.dequeueReusableCell(withIdentifier: "moralDetail", for: indexPath) | |
| 72 | - return cell | |
| 73 | - case 1: | |
| 74 | - cell = tableView.dequeueReusableCell(withIdentifier: "educationDetail", for: indexPath) | |
| 75 | - return cell | |
| 76 | - case 2: | |
| 77 | - cell = tableView.dequeueReusableCell(withIdentifier: "behaviorDetail", for: indexPath) | |
| 78 | - return cell | |
| 79 | - default: | |
| 80 | - return cell | |
| 81 | - } | |
| 82 | - } | |
| 83 | - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | |
| 84 | - if indexPath.section == 2 { | |
| 85 | - let scene = Story.instantiateViewControllerWithIdentifier("SceneDetailViewController", storyName: "Main") as! SceneDetailViewController | |
| 86 | - self.navigationController?.pushViewController(scene, animated: true) | |
| 87 | - } | |
| 88 | - } | |
| 89 | - override func didReceiveMemoryWarning() { | |
| 90 | - super.didReceiveMemoryWarning() | |
| 91 | - // Dispose of any resources that can be recreated. | |
| 92 | - } | |
| 93 | - | |
| 94 | - | |
| 95 | - /* | |
| 96 | - // MARK: - Navigation | |
| 97 | - | |
| 98 | - // In a storyboard-based application, you will often want to do a little preparation before navigation | |
| 99 | - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | |
| 100 | - // Get the new view controller using segue.destinationViewController. | |
| 101 | - // Pass the selected object to the new view controller. | |
| 102 | - } | |
| 103 | - */ | |
| 104 | - | |
| 105 | -} |
ParentAssistant/ParentAssistant/Classes/controllers/report/ReportViewController.swift
| ... | ... | @@ -1,223 +0,0 @@ |
| 1 | -// | |
| 2 | -// ReportViewController.swift | |
| 3 | -// ParentAssistant | |
| 4 | -// | |
| 5 | -// Created by 葛建军 on 2018/3/5. | |
| 6 | -// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | -// | |
| 8 | - | |
| 9 | -import UIKit | |
| 10 | - | |
| 11 | -class ReportViewController: UIViewController { | |
| 12 | - var titleView:ReportHeaderView!//navigationBar自定义view | |
| 13 | - @IBOutlet weak var reportTable: UITableView! | |
| 14 | - //空白页 | |
| 15 | - var EmptyView: UIView! | |
| 16 | - | |
| 17 | - //膜板 | |
| 18 | - var keyWindow = UIWindow() | |
| 19 | - var backBotton = UIButton() | |
| 20 | - //日历 | |
| 21 | - var calendar = CalendarView() | |
| 22 | - | |
| 23 | -// var dateAry:(weeks:[String],days:[String]) = ([],[]) | |
| 24 | - | |
| 25 | - override func viewDidLoad() { | |
| 26 | - super.viewDidLoad() | |
| 27 | - | |
| 28 | - //MARK: - 空白页面 | |
| 29 | - EmptyView = UIView.init(frame: self.view.bounds) | |
| 30 | - EmptyView.backgroundColor = UIColor.white | |
| 31 | - self.EmptyView.isHidden = true | |
| 32 | - let imageV = UIImageView.init(frame: CGRect.init(x: 0, y: 80, width: screenWidth, height: screenWidth)) | |
| 33 | - imageV.image = UIImage.init(named: "report_none_icon") | |
| 34 | - imageV.contentMode = UIViewContentMode.scaleAspectFit | |
| 35 | - EmptyView.addSubview(imageV) | |
| 36 | - self.view.addSubview(EmptyView) | |
| 37 | - let backImage = UIImage(named: "navigationBar_backgrounImage") | |
| 38 | - self.navigationController?.navigationBar.setBackgroundImage(backImage, for: UIBarMetrics.default) | |
| 39 | - if self.EmptyView.isHidden { | |
| 40 | - //设置顶部按钮 | |
| 41 | - setupNavigationBar() | |
| 42 | - //设置日期页面 | |
| 43 | - setupDateView() | |
| 44 | - } | |
| 45 | - } | |
| 46 | - // MARK: - 设置顶部按钮 | |
| 47 | - func setupNavigationBar(){ | |
| 48 | - self.configTheme() | |
| 49 | - setuptitleView() | |
| 50 | - } | |
| 51 | - func setuptitleView(){ | |
| 52 | - | |
| 53 | - //左按钮 | |
| 54 | - let leftView = UIButton.init(frame: CGRect.init(x: 0, y: 0, width: 80, height: 44)) | |
| 55 | - let titleLab = UILabel.init(frame: CGRect.init(x: 0, y: 0, width: 60, height: 44)) | |
| 56 | - if AccountManager.shared.isOnline() { | |
| 57 | - if AccountManager.shared.rawUserInfo!.contentData()["studentClass"].arrayValue.count == 0 { | |
| 58 | - titleLab.text = "未绑定" | |
| 59 | - }else{ | |
| 60 | - titleLab.text = AccountManager.shared.rawUserInfo!.contentData()["studentClass"][0]["studentName"].stringValue | |
| 61 | - } | |
| 62 | - }else{ | |
| 63 | - titleLab.text = "未登录" | |
| 64 | - } | |
| 65 | - leftView.addSubview(titleLab) | |
| 66 | - | |
| 67 | - let imageView = UIImageView.init(frame: CGRect.init(x: 60, y: 11, width: 20, height: 22)) | |
| 68 | - imageView.image = UIImage.init(named: "report_pull") | |
| 69 | - imageView.contentMode = .scaleAspectFit | |
| 70 | - leftView.addSubview(imageView) | |
| 71 | - | |
| 72 | - leftView.addTarget(self, action: #selector(showView), for: UIControlEvents.touchDown) | |
| 73 | - | |
| 74 | - let leftBtn = UIBarButtonItem.init(customView: leftView) | |
| 75 | - self.navigationItem.leftBarButtonItem = leftBtn | |
| 76 | - | |
| 77 | - //右按钮 | |
| 78 | - let rightView = UIButton.init(frame: CGRect.init(x: 0, y: 0, width: 80, height: 44)) | |
| 79 | - let titleRLab = UILabel.init(frame: CGRect.init(x: 0, y: 0, width: 50, height: 44)) | |
| 80 | - titleRLab.text = "筛选" | |
| 81 | - titleRLab.textAlignment = .right | |
| 82 | - rightView.addSubview(titleRLab) | |
| 83 | - | |
| 84 | - let imageRView = UIImageView.init(frame: CGRect.init(x: 60, y: 11, width: 20, height: 22)) | |
| 85 | - imageRView.image = UIImage.init(named: "report_select") | |
| 86 | - imageRView.contentMode = .scaleAspectFit | |
| 87 | - rightView.addSubview(imageRView) | |
| 88 | - | |
| 89 | - rightView.addTarget(self, action: #selector(showView), for: UIControlEvents.touchDown) | |
| 90 | - let rightBtn = UIBarButtonItem.init(customView: rightView) | |
| 91 | - self.navigationItem.rightBarButtonItem = rightBtn | |
| 92 | - | |
| 93 | - } | |
| 94 | - // MARK: - 设置日期页面 | |
| 95 | - func setupDateView(){ | |
| 96 | - | |
| 97 | - let headView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: screenWidth, height: 60)) | |
| 98 | - self.view.addSubview(headView) | |
| 99 | - | |
| 100 | - //添加手势 | |
| 101 | - let recognizer = UISwipeGestureRecognizer.init(target: self, action: #selector(showView)) | |
| 102 | - recognizer.direction = UISwipeGestureRecognizerDirection.down | |
| 103 | - headView.addGestureRecognizer(recognizer) | |
| 104 | - | |
| 105 | - calendar = CalendarView.init(frame: CGRect.init(x: 0, y: 30, width: screenWidth, height: 260)) | |
| 106 | - } | |
| 107 | - | |
| 108 | - @objc func showView(){ | |
| 109 | - keyWindow = UIApplication.shared.keyWindow! | |
| 110 | - let backBtn = UIButton.init(frame: CGRect.init(x: 0, y: calendar.frame.origin.y+260+22, width: screenWidth, height: screenHeight)) | |
| 111 | - backBtn.backgroundColor = UIColor.black | |
| 112 | - backBtn.alpha = 0.4 | |
| 113 | - | |
| 114 | - backBtn.addTarget(self, action: #selector(closeView(btn:)), for: UIControlEvents.allEvents) | |
| 115 | - reportTable.isUserInteractionEnabled = false | |
| 116 | - | |
| 117 | - keyWindow.addSubview(backBtn) | |
| 118 | - keyWindow.addSubview(calendar) | |
| 119 | - calendar.isHidden = false | |
| 120 | - } | |
| 121 | - @objc func closeView(btn:UIButton) { | |
| 122 | - | |
| 123 | - reportTable.isUserInteractionEnabled = true | |
| 124 | - UIView.animate(withDuration: 0.3) { | |
| 125 | - btn.removeFromSuperview() | |
| 126 | - self.calendar.isHidden = true | |
| 127 | - } | |
| 128 | - } | |
| 129 | - | |
| 130 | - // MARK: - 页面将要显示时替换navigation的titleView | |
| 131 | - override func viewWillAppear(_ animated: Bool) { | |
| 132 | - super.viewWillAppear(animated) | |
| 133 | - } | |
| 134 | - override func viewWillDisappear(_ animated: Bool) { | |
| 135 | - super.viewWillDisappear(animated) | |
| 136 | - } | |
| 137 | - override func viewDidLayoutSubviews() { | |
| 138 | - super.viewDidLayoutSubviews() | |
| 139 | - if titleView != nil { | |
| 140 | - titleView.frame = CGRect(x: 0, y: 0, width: screenWidth, height: 44) | |
| 141 | - } | |
| 142 | - } | |
| 143 | - override func didReceiveMemoryWarning() { | |
| 144 | - super.didReceiveMemoryWarning() | |
| 145 | - } | |
| 146 | - | |
| 147 | - | |
| 148 | -} | |
| 149 | -// MARK: - 点击顶部titleView按钮的代理方法 | |
| 150 | -//extension ReportViewController: ReportHeaderViewDelegate{ | |
| 151 | -// //点击孩子姓名 | |
| 152 | -// func selectStudentButton() { | |
| 153 | -// appDelegate.window!.makeToast("该功能暂不开放", duration: 1, position: CSToastPositionCenter) | |
| 154 | -// return | |
| 155 | -// //如果家长未绑定孩子 | |
| 156 | -// if AccountManager.shared.isOnline() { | |
| 157 | -// if AccountManager.shared.rawUserInfo!.contentData()["studentClass"].arrayValue.count == 0 { | |
| 158 | -// appDelegate.window!.makeToast("请先绑定孩子", duration: 1, position: CSToastPositionCenter) | |
| 159 | -// }else{ | |
| 160 | -// //切换孩子 | |
| 161 | -// let alert = UIAlertController(title: "切换孩子", message: "", preferredStyle: UIAlertControllerStyle.actionSheet) | |
| 162 | -// for item in AccountManager.shared.rawUserInfo!.contentData()["studentClass"].arrayValue { | |
| 163 | -// let action = UIAlertAction(title: item["studentName"].stringValue, style: UIAlertActionStyle.default, handler: { (action) in | |
| 164 | -// //选择完孩子切换数据 | |
| 165 | -// }) | |
| 166 | -// alert.addAction(action) | |
| 167 | -// } | |
| 168 | -// self.present(alert, animated: true, completion: nil) | |
| 169 | -// } | |
| 170 | -// }else{ | |
| 171 | -// appDelegate.window!.makeToast("请先登录", duration: 1, position: CSToastPositionCenter) | |
| 172 | -// } | |
| 173 | -// } | |
| 174 | -// //点击日期 | |
| 175 | -// func selectDateButton() { | |
| 176 | -// | |
| 177 | -// appDelegate.window!.makeToast("该功能暂不开放", duration: 1, position: CSToastPositionCenter) | |
| 178 | -// return | |
| 179 | -// } | |
| 180 | -// //点击筛选 | |
| 181 | -// func selectTypeButton() { | |
| 182 | -// appDelegate.window!.makeToast("该功能暂不开放", duration: 1, position: CSToastPositionCenter) | |
| 183 | -// return | |
| 184 | -// } | |
| 185 | -//} | |
| 186 | -//// MARK: - 顶部展示日期 | |
| 187 | -//extension ReportViewController: UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout { | |
| 188 | -// func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { | |
| 189 | -// return CGSize(width: getScreenWidth()/7, height: getScreenWidth()/7) | |
| 190 | -// } | |
| 191 | -// func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { | |
| 192 | -// return 0 | |
| 193 | -// } | |
| 194 | -// | |
| 195 | -// func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { | |
| 196 | -// let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ReportDateCollectionViewCell", for: indexPath) as! ReportDateCollectionViewCell | |
| 197 | -// cell.setupWithDate(week: dateAry.weeks[indexPath.row], date: dateAry.days[indexPath.row]) | |
| 198 | -// return cell | |
| 199 | -// } | |
| 200 | -// | |
| 201 | -// | |
| 202 | -//} | |
| 203 | -// MARK: - 作业报告列表 | |
| 204 | -extension ReportViewController: UITableViewDelegate,UITableViewDataSource{ | |
| 205 | - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
| 206 | - return 5 | |
| 207 | - } | |
| 208 | - | |
| 209 | - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
| 210 | - | |
| 211 | - if indexPath.row == 0 { | |
| 212 | - let cell = tableView.dequeueReusableCell(withIdentifier: "MoralTableViewCell", for: indexPath) as! MoralTableViewCell | |
| 213 | - return cell | |
| 214 | - }else{ | |
| 215 | - let cell = tableView.dequeueReusableCell(withIdentifier: "TaskPresentationTableViewCell", for: indexPath) as! TaskPresentationTableViewCell | |
| 216 | - return cell | |
| 217 | - } | |
| 218 | - } | |
| 219 | - func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 220 | - return 280 | |
| 221 | - } | |
| 222 | - | |
| 223 | -} |
ParentAssistant/ParentAssistant/Classes/controllers/report/SceneDetailViewController.swift
| ... | ... | @@ -1,76 +0,0 @@ |
| 1 | -// | |
| 2 | -// SceneDetailViewController.swift | |
| 3 | -// ParentAssistant | |
| 4 | -// | |
| 5 | -// Created by Cao yang on 2018/3/22. | |
| 6 | -// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | -// | |
| 8 | - | |
| 9 | -import UIKit | |
| 10 | - | |
| 11 | -class SceneDetailViewController: UIViewController,UITableViewDataSource,UITableViewDelegate { | |
| 12 | - | |
| 13 | - @IBOutlet weak var sceneTableView: UITableView! | |
| 14 | - override func viewDidLoad() { | |
| 15 | - super.viewDidLoad() | |
| 16 | - self.title = "场景详情" | |
| 17 | - sceneTableView.delegate = self | |
| 18 | - sceneTableView.dataSource = self | |
| 19 | - // Do any additional setup after loading the view. | |
| 20 | - } | |
| 21 | - func numberOfSections(in tableView: UITableView) -> Int { | |
| 22 | - return 3 | |
| 23 | - } | |
| 24 | - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
| 25 | - if section == 2 { | |
| 26 | - return 5 | |
| 27 | - } | |
| 28 | - return 1 | |
| 29 | - } | |
| 30 | - func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 31 | - | |
| 32 | - switch indexPath.section { | |
| 33 | - case 0: | |
| 34 | - return 240 | |
| 35 | - case 1: | |
| 36 | - return 250 | |
| 37 | - case 2: | |
| 38 | - return 70 | |
| 39 | - default: | |
| 40 | - return 0 | |
| 41 | - } | |
| 42 | - } | |
| 43 | - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
| 44 | - var cell = UITableViewCell.init() | |
| 45 | - switch indexPath.section { | |
| 46 | - case 0: | |
| 47 | - cell = tableView.dequeueReusableCell(withIdentifier: "cultureCell", for: indexPath) as! SceneTopCell | |
| 48 | - return cell | |
| 49 | - case 1: | |
| 50 | - cell = tableView.dequeueReusableCell(withIdentifier: "scoreCell", for: indexPath) as! SceneMiddleCell | |
| 51 | - return cell | |
| 52 | - case 2: | |
| 53 | - cell = tableView.dequeueReusableCell(withIdentifier: "disciplineCell", for: indexPath) as! SceneDownCell | |
| 54 | - return cell | |
| 55 | - default: | |
| 56 | - return cell | |
| 57 | - } | |
| 58 | - } | |
| 59 | - | |
| 60 | - override func didReceiveMemoryWarning() { | |
| 61 | - super.didReceiveMemoryWarning() | |
| 62 | - // Dispose of any resources that can be recreated. | |
| 63 | - } | |
| 64 | - | |
| 65 | - | |
| 66 | - /* | |
| 67 | - // MARK: - Navigation | |
| 68 | - | |
| 69 | - // In a storyboard-based application, you will often want to do a little preparation before navigation | |
| 70 | - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | |
| 71 | - // Get the new view controller using segue.destinationViewController. | |
| 72 | - // Pass the selected object to the new view controller. | |
| 73 | - } | |
| 74 | - */ | |
| 75 | - | |
| 76 | -} |
ParentAssistant/ParentAssistant/Classes/controllers/report/View/BehaviorDetailCell.swift
| ... | ... | @@ -1,24 +0,0 @@ |
| 1 | -// | |
| 2 | -// BehaviorDetailCell.swift | |
| 3 | -// ParentAssistant | |
| 4 | -// | |
| 5 | -// Created by Cao yang on 2018/3/23. | |
| 6 | -// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | -// | |
| 8 | - | |
| 9 | -import UIKit | |
| 10 | - | |
| 11 | -class BehaviorDetailCell: UITableViewCell { | |
| 12 | - | |
| 13 | - override func awakeFromNib() { | |
| 14 | - super.awakeFromNib() | |
| 15 | - // Initialization code | |
| 16 | - } | |
| 17 | - | |
| 18 | - override func setSelected(_ selected: Bool, animated: Bool) { | |
| 19 | - super.setSelected(selected, animated: animated) | |
| 20 | - | |
| 21 | - // Configure the view for the selected state | |
| 22 | - } | |
| 23 | - | |
| 24 | -} |
ParentAssistant/ParentAssistant/Classes/controllers/report/View/CalendarView.swift
| ... | ... | @@ -1,72 +0,0 @@ |
| 1 | -// | |
| 2 | -// CalendarView.swift | |
| 3 | -// ParentAssistant | |
| 4 | -// | |
| 5 | -// Created by Cao yang on 2018/3/27. | |
| 6 | -// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | -// | |
| 8 | - | |
| 9 | -import UIKit | |
| 10 | - | |
| 11 | -class CalendarView: UIView,UICollectionViewDelegate,UICollectionViewDataSource { | |
| 12 | - | |
| 13 | - | |
| 14 | - var weekLab = ["日","一","二","三","四","五","六"] | |
| 15 | - | |
| 16 | - override init(frame: CGRect) { | |
| 17 | - super.init(frame: frame) | |
| 18 | - self.drawCalendarView(frame: frame) | |
| 19 | - } | |
| 20 | - | |
| 21 | - func drawCalendarView(frame:CGRect) { | |
| 22 | - //TODO: 数据源待完成 | |
| 23 | - let dayLab = ["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"] | |
| 24 | - weekLab.append(contentsOf: dayLab) | |
| 25 | - //设置layout | |
| 26 | - let flowlayout = UICollectionViewFlowLayout() | |
| 27 | - flowlayout.itemSize = CGSize.init(width: screenWidth/7, height:40) | |
| 28 | - flowlayout.minimumLineSpacing = 0 | |
| 29 | - flowlayout.minimumInteritemSpacing = 0 | |
| 30 | - flowlayout.headerReferenceSize = CGSize.init(width: 0, height: 0) | |
| 31 | - flowlayout.footerReferenceSize = CGSize.init(width: 0, height: 0) | |
| 32 | - flowlayout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0) | |
| 33 | - | |
| 34 | - let calendarView = UICollectionView.init(frame: frame, collectionViewLayout: flowlayout) | |
| 35 | - calendarView.delegate = self | |
| 36 | - calendarView.dataSource = self | |
| 37 | - calendarView.backgroundColor = UIColor.white | |
| 38 | - calendarView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "calendarCell") | |
| 39 | - self.addSubview(calendarView) | |
| 40 | - } | |
| 41 | - | |
| 42 | - //MARK: - Delegate | |
| 43 | - func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { | |
| 44 | - return weekLab.count | |
| 45 | - } | |
| 46 | - | |
| 47 | - func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { | |
| 48 | - | |
| 49 | - let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "calendarCell", for: indexPath) | |
| 50 | - let lab = UILabel.init(frame: cell.bounds) | |
| 51 | - lab.text = weekLab[indexPath.row] | |
| 52 | - lab.textAlignment = .center | |
| 53 | - cell.addSubview(lab) | |
| 54 | - return cell | |
| 55 | - | |
| 56 | - } | |
| 57 | - func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { | |
| 58 | - print("点击了 第 \(weekLab[indexPath.row])") | |
| 59 | - } | |
| 60 | - required init?(coder aDecoder: NSCoder) { | |
| 61 | - fatalError("init(coder:) has not been implemented") | |
| 62 | - } | |
| 63 | - | |
| 64 | - /* | |
| 65 | - // Only override draw() if you perform custom drawing. | |
| 66 | - // An empty implementation adversely affects performance during animation. | |
| 67 | - override func draw(_ rect: CGRect) { | |
| 68 | - // Drawing code | |
| 69 | - } | |
| 70 | - */ | |
| 71 | - | |
| 72 | -} |
ParentAssistant/ParentAssistant/Classes/controllers/report/View/EducationDetailCell.swift
| ... | ... | @@ -1,43 +0,0 @@ |
| 1 | -// | |
| 2 | -// EducationDetailCell.swift | |
| 3 | -// ParentAssistant | |
| 4 | -// | |
| 5 | -// Created by Cao yang on 2018/3/23. | |
| 6 | -// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | -// | |
| 8 | - | |
| 9 | -import UIKit | |
| 10 | - | |
| 11 | -class EducationDetailCell: UITableViewCell { | |
| 12 | - | |
| 13 | - @IBOutlet weak var lineChartView: UIView! | |
| 14 | - | |
| 15 | - var customLineChart = LineChartView() | |
| 16 | - | |
| 17 | - override func awakeFromNib() { | |
| 18 | - super.awakeFromNib() | |
| 19 | - let rect = self.lineChartView.bounds | |
| 20 | - print(rect) | |
| 21 | - customLineChart = LineChartView.init(frame: rect) | |
| 22 | - customLineChart.drawUI(xLableArr: nil) | |
| 23 | - let arr1 = [4,4,2,1,3] | |
| 24 | - let arr2 = [2,1,4,4,5] | |
| 25 | - | |
| 26 | - customLineChart.drawLine(point: arr1, color: UIColorWithRGB(R: 65, G: 105, B: 190)) | |
| 27 | - customLineChart.drawLine(point: arr2, color: UIColorWithRGB(R: 220, G: 0, B: 16)) | |
| 28 | - | |
| 29 | - | |
| 30 | - | |
| 31 | - self.lineChartView.addSubview(customLineChart) | |
| 32 | - | |
| 33 | - | |
| 34 | - // Initialization code | |
| 35 | - } | |
| 36 | - | |
| 37 | - override func setSelected(_ selected: Bool, animated: Bool) { | |
| 38 | - super.setSelected(selected, animated: animated) | |
| 39 | - | |
| 40 | - // Configure the view for the selected state | |
| 41 | - } | |
| 42 | - | |
| 43 | -} |
ParentAssistant/ParentAssistant/Classes/controllers/report/View/LineChartView.swift
| ... | ... | @@ -1,220 +0,0 @@ |
| 1 | -// | |
| 2 | -// LineChartView.swift | |
| 3 | -// ParentAssistant | |
| 4 | -// | |
| 5 | -// Created by Cao yang on 2018/3/23. | |
| 6 | -// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | -// | |
| 8 | - | |
| 9 | -import UIKit | |
| 10 | - | |
| 11 | -class LineChartView: UIView { | |
| 12 | - | |
| 13 | - //默认横坐标 | |
| 14 | - private var xLabArr = ["行为","文明","课堂","作业","礼仪"] | |
| 15 | - //设置纵坐标 | |
| 16 | - private let yCount = 6 | |
| 17 | - //横坐标个数 | |
| 18 | - private let xCount = 5 | |
| 19 | - //最大绩点分数 | |
| 20 | - private let GPA = 5 | |
| 21 | - //储存横纵坐标,画线用 | |
| 22 | - private var xCenterArr = Array<CGFloat>() | |
| 23 | - private var yCenterArr = Array<CGFloat>() | |
| 24 | - //判断是否重复点击 | |
| 25 | - private var btnTouch = 10 | |
| 26 | - //虚线 | |
| 27 | - private let lineLayer = CAShapeLayer() | |
| 28 | - //横坐标下划线 | |
| 29 | - private let xMoveLayer = CAShapeLayer() | |
| 30 | - //纵坐标Lab数组 | |
| 31 | - private var yMoveLaArr = Array<UILabel>() | |
| 32 | - //折线图数据数组 | |
| 33 | - private var dateArr = Array<Array<Int>>() | |
| 34 | - //显示的数字 | |
| 35 | - var yLabArray = Array<UILabel>() | |
| 36 | - | |
| 37 | - override init(frame: CGRect) { | |
| 38 | - super.init(frame: frame) | |
| 39 | - print("frame==\(frame)") | |
| 40 | - | |
| 41 | - } | |
| 42 | - func drawUI(xLableArr:Array<String>?){ | |
| 43 | - | |
| 44 | - if xLableArr != nil { | |
| 45 | - xLabArr = xLableArr! | |
| 46 | - } | |
| 47 | - drawX() | |
| 48 | - drawY() | |
| 49 | - } | |
| 50 | - //设置纵坐标 | |
| 51 | - private func drawY() { | |
| 52 | - | |
| 53 | - let yHeight = (self.bounds.height-60)/CGFloat(yCount) | |
| 54 | - for index in 0..<yCount{ | |
| 55 | - let yLab = UILabel.init(frame: CGRect.init(x: 10, y: CGFloat(index)*yHeight, width: 20, height: 20)) | |
| 56 | - yLab.text = "\(GPA-index)" | |
| 57 | - yLab.textColor = UIColorWithRGB(R: 119, G: 119, B: 119) | |
| 58 | - yLab.font = UIFont.systemFont(ofSize: 14) | |
| 59 | - self.addSubview(yLab) | |
| 60 | - | |
| 61 | - let lineLab = UILabel.init(frame: CGRect.init(x: 30, y: yLab.center.y, width: screenWidth-60, height: 0.4)) | |
| 62 | - lineLab.backgroundColor = UIColorWithRGB(R: 190, G: 190, B: 190) | |
| 63 | - self.addSubview(lineLab) | |
| 64 | - | |
| 65 | - yMoveLaArr.append(yLab) | |
| 66 | - yCenterArr.append(yLab.frame.origin.y+10) | |
| 67 | - } | |
| 68 | - } | |
| 69 | - //设置横坐标 | |
| 70 | - private func drawX() { | |
| 71 | - let xWidth = (screenWidth-20)/CGFloat(yCount) | |
| 72 | - for index in 0..<xCount { | |
| 73 | - let nameBtn = UIButton.init(frame: CGRect.init(x: xWidth+CGFloat(index)*xWidth, y: self.bounds.height-70, width: 40, height: 25)) | |
| 74 | - nameBtn.setTitle(xLabArr[index], for: UIControlState.normal) | |
| 75 | - nameBtn.setTitleColor(UIColorWithRGB(R: 119, G: 119, B: 119), for: UIControlState.normal) | |
| 76 | - nameBtn.titleLabel!.textAlignment = .center | |
| 77 | - nameBtn.titleLabel!.font = UIFont.systemFont(ofSize: 13) | |
| 78 | -// nameBtn.backgroundColor = UIColor.orange | |
| 79 | - nameBtn.tag = index | |
| 80 | - self.addSubview(nameBtn) | |
| 81 | - | |
| 82 | - nameBtn.addTarget(self, action: #selector(touchXAction(tap:)), for: UIControlEvents.touchUpInside) | |
| 83 | - | |
| 84 | - xCenterArr.append(nameBtn.frame.origin.x+20) | |
| 85 | - } | |
| 86 | - } | |
| 87 | - | |
| 88 | - //MARK: - 画折线 | |
| 89 | - func drawLine(point:Array<Int>,color:UIColor){ | |
| 90 | - | |
| 91 | - let pointArr = swichPoint(arr: point) | |
| 92 | - | |
| 93 | - let drawLayer = DrawLayer() | |
| 94 | - drawLayer.xPointArr = xCenterArr | |
| 95 | - drawLayer.yPointArr = [yCenterArr[pointArr[0]],yCenterArr[pointArr[1]],yCenterArr[pointArr[2]],yCenterArr[pointArr[3]],yCenterArr[pointArr[4]]] | |
| 96 | - drawLayer.bounds = self.bounds | |
| 97 | - drawLayer.position = self.center | |
| 98 | - drawLayer.lineColor = color | |
| 99 | - self.layer.addSublayer(drawLayer) | |
| 100 | - drawLayer.setNeedsDisplay() | |
| 101 | - | |
| 102 | - dateArr.append(point) | |
| 103 | - | |
| 104 | - } | |
| 105 | - //MARK: - 点击横坐标 | |
| 106 | - @objc func touchXAction(tap:UIButton){ | |
| 107 | - | |
| 108 | - let index = tap.tag | |
| 109 | - | |
| 110 | - | |
| 111 | - if btnTouch != index { | |
| 112 | - | |
| 113 | - //竖虚线 | |
| 114 | - lineLayer.strokeColor = UIColorWithRGB(R: 92, G: 145, B: 230).cgColor | |
| 115 | - lineLayer.lineWidth = 1 | |
| 116 | - let arr = [5,5] | |
| 117 | - lineLayer.lineDashPhase = 0 | |
| 118 | - lineLayer.lineDashPattern = arr as [NSNumber] | |
| 119 | - self.layer.addSublayer(lineLayer) | |
| 120 | - | |
| 121 | - //X轴下划线 | |
| 122 | - let movePath = CGMutablePath() | |
| 123 | - movePath.move(to: CGPoint.init(x: xCenterArr[index], y: yCenterArr[0])) | |
| 124 | - movePath.addLine(to: CGPoint.init(x: xCenterArr[index], y: 10+5*(self.bounds.height-60)/CGFloat(yCount))) | |
| 125 | - lineLayer.path = movePath | |
| 126 | - | |
| 127 | - xMoveLayer.strokeColor = UIColorWithRGB(R: 92, G: 145, B: 230).cgColor | |
| 128 | - xMoveLayer.lineWidth = 2 | |
| 129 | - self.layer.addSublayer(xMoveLayer) | |
| 130 | - let movePath2 = CGMutablePath() | |
| 131 | - movePath2.move(to: CGPoint.init(x: xCenterArr[index]-15, y: self.bounds.height-45)) | |
| 132 | - movePath2.addLine(to: CGPoint.init(x: xCenterArr[index]+15, y: self.bounds.height-45)) | |
| 133 | - xMoveLayer.path = movePath2 | |
| 134 | - | |
| 135 | - if yLabArray.count == dateArr.count { | |
| 136 | - for label in yLabArray { | |
| 137 | - label.removeFromSuperview() | |
| 138 | - } | |
| 139 | - } | |
| 140 | - yLabArray.removeAll() | |
| 141 | - //数字显示 | |
| 142 | - for i in 0..<dateArr.count { | |
| 143 | - let arr = dateArr[i] | |
| 144 | - //y坐标数值 | |
| 145 | - let y = arr[index] | |
| 146 | - let yLab = yMoveLaArr[GPA-y] | |
| 147 | - var rect = yLab.frame | |
| 148 | - rect.origin.x = xCenterArr[index]+10 | |
| 149 | - | |
| 150 | - let newLab = UILabel() | |
| 151 | - newLab.text = yLab.text | |
| 152 | - newLab.textColor = yLab.textColor | |
| 153 | - newLab.font = yLab.font | |
| 154 | - newLab.frame = rect | |
| 155 | - self.addSubview(newLab) | |
| 156 | - yLabArray.append(newLab) | |
| 157 | - } | |
| 158 | - }else{ | |
| 159 | - print(yLabArray) | |
| 160 | - } | |
| 161 | - btnTouch = index | |
| 162 | - | |
| 163 | - | |
| 164 | - } | |
| 165 | - //转换y坐标 | |
| 166 | - func swichPoint(arr:Array<Int>)->Array<Int>{ | |
| 167 | - var array = Array<Int>() | |
| 168 | - for index in 0..<arr.count { | |
| 169 | - let value = GPA - arr[index] | |
| 170 | - array.append(value) | |
| 171 | - } | |
| 172 | - return array | |
| 173 | - } | |
| 174 | - | |
| 175 | - required init?(coder aDecoder: NSCoder) { | |
| 176 | - fatalError("init(coder:) has not been implemented") | |
| 177 | - } | |
| 178 | - | |
| 179 | - /* | |
| 180 | - // Only override draw() if you perform custom drawing. | |
| 181 | - // An empty implementation adversely affects performance during animation. | |
| 182 | - override func draw(_ rect: CGRect) { | |
| 183 | - // Drawing code | |
| 184 | - } | |
| 185 | - */ | |
| 186 | - | |
| 187 | -} | |
| 188 | - | |
| 189 | -class DrawLayer: CALayer { | |
| 190 | - | |
| 191 | - var yPointArr = Array<CGFloat>() | |
| 192 | - var xPointArr = Array<CGFloat>() | |
| 193 | - var lineColor = UIColor() | |
| 194 | - | |
| 195 | - override func draw(in ctx: CGContext) { | |
| 196 | - | |
| 197 | - let context = ctx | |
| 198 | - //点 | |
| 199 | - context.setFillColor(lineColor.cgColor) | |
| 200 | - | |
| 201 | - for i in 0..<xPointArr.count { | |
| 202 | - context.fillEllipse(in: CGRect.init(x: xPointArr[i]-5, y: yPointArr[i]-5, width: 10, height: 10)) | |
| 203 | - | |
| 204 | - } | |
| 205 | - //折线 | |
| 206 | - context.setStrokeColor(lineColor.cgColor) | |
| 207 | - context.setLineWidth(1.5) | |
| 208 | - for i in 0..<xPointArr.count { | |
| 209 | - if i == 0 { | |
| 210 | - context.move(to: CGPoint.init(x: xPointArr[0] , y: yPointArr[0])) | |
| 211 | - }else{ | |
| 212 | - context.addLine(to: CGPoint.init(x: xPointArr[i] , y: yPointArr[i])) | |
| 213 | - } | |
| 214 | - } | |
| 215 | - context.strokePath() | |
| 216 | - } | |
| 217 | - | |
| 218 | -} | |
| 219 | - | |
| 220 | - |
ParentAssistant/ParentAssistant/Classes/controllers/report/View/MoralDetailCell.swift
| ... | ... | @@ -1,32 +0,0 @@ |
| 1 | -// | |
| 2 | -// MoralDetailCell.swift | |
| 3 | -// ParentAssistant | |
| 4 | -// | |
| 5 | -// Created by Cao yang on 2018/3/23. | |
| 6 | -// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | -// | |
| 8 | - | |
| 9 | -import UIKit | |
| 10 | - | |
| 11 | -class MoralDetailCell: UITableViewCell { | |
| 12 | - | |
| 13 | - @IBOutlet weak var dateLab: UILabel! | |
| 14 | - @IBOutlet weak var pointLab: UILabel! | |
| 15 | - @IBOutlet weak var rankingLab: UILabel! | |
| 16 | - @IBOutlet weak var risingLab: UILabel! | |
| 17 | - @IBOutlet weak var risingRightLab: UILabel! | |
| 18 | - @IBOutlet weak var averageLab: UILabel! | |
| 19 | - @IBOutlet weak var averageRightLab: UILabel! | |
| 20 | - @IBOutlet weak var evaluationLab: UILabel! | |
| 21 | - override func awakeFromNib() { | |
| 22 | - super.awakeFromNib() | |
| 23 | - // Initialization code | |
| 24 | - } | |
| 25 | - | |
| 26 | - override func setSelected(_ selected: Bool, animated: Bool) { | |
| 27 | - super.setSelected(selected, animated: animated) | |
| 28 | - | |
| 29 | - // Configure the view for the selected state | |
| 30 | - } | |
| 31 | - | |
| 32 | -} |
ParentAssistant/ParentAssistant/Classes/controllers/report/View/MoralTableViewCell.swift
| ... | ... | @@ -1,30 +0,0 @@ |
| 1 | -// | |
| 2 | -// MoralTableViewCell.swift | |
| 3 | -// ParentAssistant | |
| 4 | -// | |
| 5 | -// Created by Cao yang on 2018/3/22. | |
| 6 | -// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | -// | |
| 8 | - | |
| 9 | -import UIKit | |
| 10 | - | |
| 11 | -class MoralTableViewCell: UITableViewCell { | |
| 12 | - | |
| 13 | - @IBOutlet weak var pointLab: UILabel! | |
| 14 | - @IBOutlet weak var todayReName: UILabel! | |
| 15 | - @IBOutlet weak var rankingLab: UILabel! | |
| 16 | - @IBOutlet weak var evaluateLab: UILabel! | |
| 17 | - @IBOutlet weak var rankStatusLab: UILabel! | |
| 18 | - @IBOutlet weak var reportDateLab: UILabel! | |
| 19 | - override func awakeFromNib() { | |
| 20 | - super.awakeFromNib() | |
| 21 | - // Initialization code | |
| 22 | - } | |
| 23 | - | |
| 24 | - override func setSelected(_ selected: Bool, animated: Bool) { | |
| 25 | - super.setSelected(selected, animated: animated) | |
| 26 | - | |
| 27 | - // Configure the view for the selected state | |
| 28 | - } | |
| 29 | - | |
| 30 | -} |
ParentAssistant/ParentAssistant/Classes/controllers/report/View/ReportDateCollectionViewCell.swift
| ... | ... | @@ -1,21 +0,0 @@ |
| 1 | -// | |
| 2 | -// ReportDateCollectionViewCell.swift | |
| 3 | -// ParentAssistant | |
| 4 | -// | |
| 5 | -// Created by 葛建军 on 2018/3/9. | |
| 6 | -// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | -// | |
| 8 | - | |
| 9 | -import UIKit | |
| 10 | -class ReportDateCollectionViewCell: UICollectionViewCell { | |
| 11 | - @IBOutlet var weekLabel: UILabel! | |
| 12 | - @IBOutlet var dateLabel: UILabel! | |
| 13 | - func setupWithDate(week:String,date:String){ | |
| 14 | - weekLabel.text = week | |
| 15 | - dateLabel.text = date | |
| 16 | - | |
| 17 | - | |
| 18 | - | |
| 19 | - } | |
| 20 | - | |
| 21 | -} |
ParentAssistant/ParentAssistant/Classes/controllers/report/View/ReportHeaderView.swift
| ... | ... | @@ -1,48 +0,0 @@ |
| 1 | -// | |
| 2 | -// ReportHeaderView.swift | |
| 3 | -// ParentAssistant | |
| 4 | -// | |
| 5 | -// Created by 葛建军 on 2018/3/8. | |
| 6 | -// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | -// | |
| 8 | - | |
| 9 | -import UIKit | |
| 10 | - | |
| 11 | -class ReportHeaderView: UIView { | |
| 12 | - var delegate:ReportHeaderViewDelegate! | |
| 13 | - @IBOutlet var nameButton: UIButton!//学生名字按钮 | |
| 14 | - @IBOutlet var dateButton: UIButton!//日期按钮 | |
| 15 | - @IBOutlet var typeButton: UIButton!//筛选按钮 | |
| 16 | - override func awakeFromNib() { | |
| 17 | - super.awakeFromNib() | |
| 18 | - } | |
| 19 | - override func layoutSubviews() { | |
| 20 | - super.layoutSubviews() | |
| 21 | - nameButton.frame.origin = CGPoint(x: 15, y: 7) | |
| 22 | - dateButton.frame.origin = CGPoint(x: (getScreenWidth()-dateButton.frame.size.width)/2, y: 7) | |
| 23 | - typeButton.frame.origin = CGPoint(x: getScreenWidth()-typeButton.frame.size.width-30, y: 7) | |
| 24 | - } | |
| 25 | - //点击学生姓名按钮 | |
| 26 | - @IBAction func changeStudentAction(_ sender: UIButton) { | |
| 27 | - delegate.selectStudentButton() | |
| 28 | - } | |
| 29 | - //点击日期按钮 | |
| 30 | - @IBAction func changeDateAction(_ sender: UIButton) { | |
| 31 | - delegate.selectDateButton() | |
| 32 | - } | |
| 33 | - //点击筛选按钮 | |
| 34 | - @IBAction func changeTypeAction(_ sender: UIButton) { | |
| 35 | - delegate.selectTypeButton() | |
| 36 | - } | |
| 37 | - | |
| 38 | -} | |
| 39 | -protocol ReportHeaderViewDelegate { | |
| 40 | - func selectStudentButton() | |
| 41 | - func selectDateButton() | |
| 42 | - func selectTypeButton() | |
| 43 | -} | |
| 44 | -extension ReportHeaderView { | |
| 45 | - class func titleView() -> ReportHeaderView { | |
| 46 | - return Bundle.main.loadNibNamed("ReportHeaderView", owner: nil, options: nil)?.first as! ReportHeaderView | |
| 47 | - } | |
| 48 | -} |
ParentAssistant/ParentAssistant/Classes/controllers/report/View/ReportHeaderView.xib
| ... | ... | @@ -1,61 +0,0 @@ |
| 1 | -<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | -<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> | |
| 3 | - <device id="retina4_7" orientation="portrait"> | |
| 4 | - <adaptation id="fullscreen"/> | |
| 5 | - </device> | |
| 6 | - <dependencies> | |
| 7 | - <deployment identifier="iOS"/> | |
| 8 | - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/> | |
| 9 | - <capability name="Safe area layout guides" minToolsVersion="9.0"/> | |
| 10 | - <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | |
| 11 | - </dependencies> | |
| 12 | - <objects> | |
| 13 | - <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> | |
| 14 | - <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> | |
| 15 | - <view clipsSubviews="YES" contentMode="scaleToFill" id="4WE-cx-977" customClass="ReportHeaderView" customModule="ParentAssistant" customModuleProvider="target"> | |
| 16 | - <rect key="frame" x="0.0" y="0.0" width="485" height="44"/> | |
| 17 | - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | |
| 18 | - <subviews> | |
| 19 | - <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="W6e-VK-JCE"> | |
| 20 | - <rect key="frame" x="20" y="7" width="46" height="30"/> | |
| 21 | - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | |
| 22 | - <state key="normal" title="马伯骞"> | |
| 23 | - <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
| 24 | - </state> | |
| 25 | - <connections> | |
| 26 | - <action selector="changeStudentAction:" destination="4WE-cx-977" eventType="touchUpInside" id="Dua-XZ-hMB"/> | |
| 27 | - </connections> | |
| 28 | - </button> | |
| 29 | - <button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5Dq-Z9-eEM"> | |
| 30 | - <rect key="frame" x="434" y="7" width="31" height="30"/> | |
| 31 | - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | |
| 32 | - <state key="normal" title="筛选"> | |
| 33 | - <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
| 34 | - </state> | |
| 35 | - <connections> | |
| 36 | - <action selector="changeTypeAction:" destination="4WE-cx-977" eventType="touchUpInside" id="XFz-ca-od2"/> | |
| 37 | - </connections> | |
| 38 | - </button> | |
| 39 | - <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7xY-bD-L7w"> | |
| 40 | - <rect key="frame" x="191" y="7" width="102" height="30"/> | |
| 41 | - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | |
| 42 | - <state key="normal" title="12月29日"> | |
| 43 | - <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
| 44 | - </state> | |
| 45 | - <connections> | |
| 46 | - <action selector="changeDateAction:" destination="4WE-cx-977" eventType="touchUpInside" id="pCF-3R-0zv"/> | |
| 47 | - </connections> | |
| 48 | - </button> | |
| 49 | - </subviews> | |
| 50 | - <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> | |
| 51 | - <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> | |
| 52 | - <viewLayoutGuide key="safeArea" id="71B-FS-Ws9"/> | |
| 53 | - <connections> | |
| 54 | - <outlet property="dateButton" destination="7xY-bD-L7w" id="3zG-4z-eNW"/> | |
| 55 | - <outlet property="nameButton" destination="W6e-VK-JCE" id="XDD-iU-T0k"/> | |
| 56 | - <outlet property="typeButton" destination="5Dq-Z9-eEM" id="LAM-Dw-HAX"/> | |
| 57 | - </connections> | |
| 58 | - <point key="canvasLocation" x="156.5" y="93"/> | |
| 59 | - </view> | |
| 60 | - </objects> | |
| 61 | -</document> |
ParentAssistant/ParentAssistant/Classes/controllers/report/View/SceneDownCell.swift
| ... | ... | @@ -1,30 +0,0 @@ |
| 1 | -// | |
| 2 | -// SceneDownCell.swift | |
| 3 | -// ParentAssistant | |
| 4 | -// | |
| 5 | -// Created by Cao yang on 2018/3/24. | |
| 6 | -// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | -// | |
| 8 | - | |
| 9 | -import UIKit | |
| 10 | - | |
| 11 | -class SceneDownCell: UITableViewCell { | |
| 12 | - | |
| 13 | - @IBOutlet weak var evaluateLab: UILabel! | |
| 14 | - @IBOutlet weak var sceneLab: UILabel! | |
| 15 | - @IBOutlet weak var scoreLab: UILabel! | |
| 16 | - @IBOutlet weak var nameLab: UILabel! | |
| 17 | - @IBOutlet weak var classLab: UILabel! | |
| 18 | - @IBOutlet weak var dateLab: UILabel! | |
| 19 | - override func awakeFromNib() { | |
| 20 | - super.awakeFromNib() | |
| 21 | - // Initialization code | |
| 22 | - } | |
| 23 | - | |
| 24 | - override func setSelected(_ selected: Bool, animated: Bool) { | |
| 25 | - super.setSelected(selected, animated: animated) | |
| 26 | - | |
| 27 | - // Configure the view for the selected state | |
| 28 | - } | |
| 29 | - | |
| 30 | -} |
ParentAssistant/ParentAssistant/Classes/controllers/report/View/SceneMiddleCell.swift
| ... | ... | @@ -1,44 +0,0 @@ |
| 1 | -// | |
| 2 | -// SceneMiddleCell.swift | |
| 3 | -// ParentAssistant | |
| 4 | -// | |
| 5 | -// Created by Cao yang on 2018/3/24. | |
| 6 | -// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | -// | |
| 8 | - | |
| 9 | -import UIKit | |
| 10 | - | |
| 11 | -class SceneMiddleCell: UITableViewCell { | |
| 12 | - | |
| 13 | - @IBOutlet weak var lineChartView: UIView! | |
| 14 | - | |
| 15 | - var customLineChart = LineChartView() | |
| 16 | - override func awakeFromNib() { | |
| 17 | - super.awakeFromNib() | |
| 18 | - // Initialization code | |
| 19 | - let rect = self.lineChartView.bounds | |
| 20 | - customLineChart = LineChartView.init(frame: rect) | |
| 21 | - let customXLabArr = ["03/12","03/13","03/14","03/15","03/16"] | |
| 22 | - | |
| 23 | - customLineChart.drawUI(xLableArr:customXLabArr) | |
| 24 | - | |
| 25 | - let arr1 = [5,4,5,5,5] | |
| 26 | - let arr2 = [4,4,2,1,3] | |
| 27 | - let arr3 = [3,3,4,3,4] | |
| 28 | - | |
| 29 | - | |
| 30 | - customLineChart.drawLine(point: arr1, color: UIColorWithRGB(R: 129, G: 199, B: 132)) | |
| 31 | - customLineChart.drawLine(point: arr2, color: UIColorWithRGB(R: 92, G: 145, B: 230)) | |
| 32 | - customLineChart.drawLine(point: arr3, color: UIColorWithRGB(R: 255, G: 213, B: 79)) | |
| 33 | - | |
| 34 | - self.lineChartView.addSubview(customLineChart) | |
| 35 | - | |
| 36 | - } | |
| 37 | - | |
| 38 | - override func setSelected(_ selected: Bool, animated: Bool) { | |
| 39 | - super.setSelected(selected, animated: animated) | |
| 40 | - | |
| 41 | - // Configure the view for the selected state | |
| 42 | - } | |
| 43 | - | |
| 44 | -} |
ParentAssistant/ParentAssistant/Classes/controllers/report/View/SceneTopCell.swift
| ... | ... | @@ -1,28 +0,0 @@ |
| 1 | -// | |
| 2 | -// SceneTopCell.swift | |
| 3 | -// ParentAssistant | |
| 4 | -// | |
| 5 | -// Created by Cao yang on 2018/3/24. | |
| 6 | -// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | -// | |
| 8 | - | |
| 9 | -import UIKit | |
| 10 | - | |
| 11 | -class SceneTopCell: UITableViewCell { | |
| 12 | - | |
| 13 | - @IBOutlet weak var scoreLab: UILabel! //得分 | |
| 14 | - @IBOutlet weak var GPALab: UILabel! //绩点 | |
| 15 | - @IBOutlet weak var LevelLab: UILabel! //等级 | |
| 16 | - @IBOutlet weak var SuggestLab: UITextView! //指导意见 | |
| 17 | - override func awakeFromNib() { | |
| 18 | - super.awakeFromNib() | |
| 19 | - // Initialization code | |
| 20 | - } | |
| 21 | - | |
| 22 | - override func setSelected(_ selected: Bool, animated: Bool) { | |
| 23 | - super.setSelected(selected, animated: animated) | |
| 24 | - | |
| 25 | - // Configure the view for the selected state | |
| 26 | - } | |
| 27 | - | |
| 28 | -} |
ParentAssistant/ParentAssistant/Classes/controllers/report/View/TaskPresentationTableViewCell.swift
| ... | ... | @@ -1,82 +0,0 @@ |
| 1 | -// | |
| 2 | -// TaskPresentationTableViewCell.swift | |
| 3 | -// ParentAssistant | |
| 4 | -// | |
| 5 | -// Created by 葛建军 on 2018/3/9. | |
| 6 | -// Copyright © 2018年 HANGZHOUTEAM. All rights reserved. | |
| 7 | -// | |
| 8 | - | |
| 9 | -import UIKit | |
| 10 | -//func degreesToRadians(x:Double) -> CGFloat{ | |
| 11 | -// return (CGFloat(Double.pi*(x)/180.0)) | |
| 12 | -//} //把角度转换成PI的方式 | |
| 13 | -//let PROGREESS_WIDTH = 160 //圆直径 | |
| 14 | -//let PROGRESS_LINE_WIDTH = 4 //弧线的宽度 | |
| 15 | -class TaskPresentationTableViewCell: UITableViewCell { | |
| 16 | - | |
| 17 | - @IBOutlet var layerLabel: UILabel! | |
| 18 | - override func awakeFromNib() { | |
| 19 | - super.awakeFromNib() | |
| 20 | - // Initialization code | |
| 21 | - //可以画出上面所示的整个轨道。这个圆形是从-210度的角度到30度。 | |
| 22 | -// let path = UIBezierPath(arcCenter: CGPoint(x: 40, y: 40), radius: CGFloat((PROGREESS_WIDTH-PROGRESS_LINE_WIDTH)/2), startAngle: degreesToRadians(x: -210), endAngle: degreesToRadians(x: 30), clockwise: true) | |
| 23 | - //画出一个完成的进度的背景轨道 | |
| 24 | -// let trackLayer = CAShapeLayer()//创建一个track shape layer | |
| 25 | -// trackLayer.frame = self.layerLabel.bounds | |
| 26 | -// trackLayer.fillColor = UIColor.clear.cgColor | |
| 27 | -// trackLayer.strokeColor = UIColor.red.cgColor//指定path的渲染颜色 | |
| 28 | -// trackLayer.opacity = 0.25 //背景同学你就甘心做背景吧,不要太明显了,透明度小一点 | |
| 29 | -// trackLayer.lineCap = kCALineCapRound//指定线的边缘是圆的 | |
| 30 | -// trackLayer.lineWidth = CGFloat(PROGRESS_LINE_WIDTH)//线的宽度 | |
| 31 | -// trackLayer.path = path.cgPath //把path传递給layer,然后layer会处理相应的渲染,整个逻辑和CoreGraph是一致的。 | |
| 32 | -// | |
| 33 | -// self.layerLabel.layer.addSublayer(trackLayer) | |
| 34 | - //渐变进度条 | |
| 35 | -// let progressLayer = CAShapeLayer() | |
| 36 | -// progressLayer.frame = self.layerLabel.bounds | |
| 37 | -// progressLayer.fillColor = UIColor.clear.cgColor | |
| 38 | -// progressLayer.strokeColor = UIColor.red.cgColor | |
| 39 | -// progressLayer.lineCap = kCALineCapRound; | |
| 40 | -// progressLayer.lineWidth = CGFloat(PROGRESS_LINE_WIDTH) | |
| 41 | -// progressLayer.path = path.cgPath | |
| 42 | -// progressLayer.strokeEnd = 50/100.0 //总进度 | |
| 43 | -// | |
| 44 | -// let gradientLayer = CALayer() | |
| 45 | -// let gradientLayer1 = CAGradientLayer() | |
| 46 | -// gradientLayer1.frame = CGRect(x: 0, y: 0, width: self.layerLabel.frame.size.width/2, height: self.layerLabel.frame.size.height) | |
| 47 | -// gradientLayer1.colors = [UIColor.yellow.cgColor,UIColor.blue.cgColor] | |
| 48 | -// gradientLayer1.locations = [0.5,0.9,1] | |
| 49 | -// gradientLayer1.startPoint = CGPoint(x: 0.5, y: 1) | |
| 50 | -// gradientLayer1.endPoint = CGPoint(x: 0.5, y: 0) | |
| 51 | -// gradientLayer.addSublayer(gradientLayer1) | |
| 52 | -// | |
| 53 | -// let gradientLayer2 = CAGradientLayer() | |
| 54 | -// gradientLayer2.frame = CGRect(x: self.layerLabel.frame.size.width/2, y: 0, width: self.layerLabel.frame.size.width/2, height: self.layerLabel.frame.size.height) | |
| 55 | -// gradientLayer2.colors = [UIColor.blue.cgColor,UIColor.blue.cgColor] | |
| 56 | -// gradientLayer2.locations = [0.1,0.5,1] | |
| 57 | -// gradientLayer2.startPoint = CGPoint(x: 0.5, y: 0) | |
| 58 | -// gradientLayer2.endPoint = CGPoint(x: 0.5, y: 1) | |
| 59 | -// gradientLayer.addSublayer(gradientLayer2) | |
| 60 | -// | |
| 61 | -// gradientLayer.mask = progressLayer//用progressLayer来截取渐变层 | |
| 62 | -// self.layerLabel.layer.addSublayer(gradientLayer) | |
| 63 | - } | |
| 64 | - //进度条效果 CAShapeLayer有一个strokeEnd的属性,这个属性是从0到1的浮点类型,正好可以用表达百分比,而且这个属性是animatable,可以动态的表示进度的变化。 | |
| 65 | - // -(void)setPercent:(NSInteger)percent animated:(BOOL)animated | |
| 66 | - // { | |
| 67 | - // [CATransaction begin]; | |
| 68 | - // [CATransaction setDisableActions:!animated]; | |
| 69 | - // [CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]]; | |
| 70 | - // [CATransaction setAnimationDuration:MAIN_SCREEN_ANIMATION_TIME]; | |
| 71 | - // progressLayer.strokeEnd = percent/100.0; | |
| 72 | - // [CATransaction commit]; | |
| 73 | - // | |
| 74 | - // _percent = percent; | |
| 75 | - // } | |
| 76 | - override func setSelected(_ selected: Bool, animated: Bool) { | |
| 77 | - super.setSelected(selected, animated: animated) | |
| 78 | - | |
| 79 | - // Configure the view for the selected state | |
| 80 | - } | |
| 81 | - | |
| 82 | -} |
ParentAssistant/ParentAssistant/Classes/util/Macro.swift
| ... | ... | @@ -72,7 +72,7 @@ let URL_PARENTSERVICE_GETADS="/api/ParentService/GetAds" //嘀 |
| 72 | 72 | |
| 73 | 73 | //MARK: 遠 |
| 74 | 74 | /// 敺瑁雿祕 |
| 75 | -let URL_POST_EVALUATION_ANALYSIS = "/api/EvaluationLabel/GetStatisticalAnalysis" | |
| 75 | +let URL_POST_EVALUATION_ANALYSIS = "/api/EvaluationLabel/Getstatisticsanalytical" | |
| 76 | 76 | /// 敺瑁霂行 |
| 77 | 77 | let URL_POST_EVALUATION_ANALYSIS_DETAILS = "/api/EvaluationLabel/GetSceneAnalysisDetails" |
| 78 | 78 | ... | ... |
ParentAssistant/ParentAssistant/Supporting Files/Base.lproj/Main.storyboard
| ... | ... | @@ -527,16 +527,34 @@ |
| 527 | 527 | </objects> |
| 528 | 528 | <point key="canvasLocation" x="54" y="117"/> |
| 529 | 529 | </scene> |
| 530 | + <!--Grow View Controller--> | |
| 531 | + <scene sceneID="36g-8r-oze"> | |
| 532 | + <objects> | |
| 533 | + <viewController id="K2D-OC-DRl" customClass="GrowViewController" customModule="ParentAssistant" customModuleProvider="target" sceneMemberID="viewController"> | |
| 534 | + <view key="view" contentMode="scaleToFill" id="dfc-6f-RU1"> | |
| 535 | + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | |
| 536 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | |
| 537 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | |
| 538 | + <viewLayoutGuide key="safeArea" id="xWd-cd-ncW"/> | |
| 539 | + </view> | |
| 540 | + <navigationItem key="navigationItem" id="9Fp-i1-vxh"> | |
| 541 | + <nil key="title"/> | |
| 542 | + </navigationItem> | |
| 543 | + </viewController> | |
| 544 | + <placeholder placeholderIdentifier="IBFirstResponder" id="Pvf-SL-AwW" userLabel="First Responder" sceneMemberID="firstResponder"/> | |
| 545 | + </objects> | |
| 546 | + <point key="canvasLocation" x="1660" y="399"/> | |
| 547 | + </scene> | |
| 530 | 548 | <!--报告--> |
| 531 | 549 | <scene sceneID="YFU-9r-YrN"> |
| 532 | 550 | <objects> |
| 533 | - <viewController title="报告" id="oqH-t7-mJp" customClass="ReportViewController" customModule="ParentAssistant" customModuleProvider="target" sceneMemberID="viewController"> | |
| 551 | + <viewController storyboardIdentifier="ReportViewController" title="报告" id="oqH-t7-mJp" customClass="ReportViewController" customModule="ParentAssistant" customModuleProvider="target" sceneMemberID="viewController"> | |
| 534 | 552 | <view key="view" contentMode="scaleToFill" id="5aI-3l-uAy"> |
| 535 | 553 | <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> |
| 536 | 554 | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
| 537 | 555 | <subviews> |
| 538 | 556 | <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="EEs-Ae-t7U"> |
| 539 | - <rect key="frame" x="0.0" y="134" width="375" height="484"/> | |
| 557 | + <rect key="frame" x="0.0" y="90" width="375" height="577"/> | |
| 540 | 558 | <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/> |
| 541 | 559 | <prototypes> |
| 542 | 560 | <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="MoralTableViewCell" rowHeight="280" id="mJ6-p0-1k0" customClass="MoralTableViewCell" customModule="ParentAssistant" customModuleProvider="target"> |
| ... | ... | @@ -769,14 +787,14 @@ |
| 769 | 787 | </constraints> |
| 770 | 788 | <viewLayoutGuide key="safeArea" id="9O4-jf-dgu"/> |
| 771 | 789 | </view> |
| 772 | - <navigationItem key="navigationItem" title="报告" id="dVv-mJ-714"/> | |
| 790 | + <navigationItem key="navigationItem" id="dVv-mJ-714"/> | |
| 773 | 791 | <connections> |
| 774 | 792 | <outlet property="reportTable" destination="EEs-Ae-t7U" id="WCp-ci-zOE"/> |
| 775 | 793 | </connections> |
| 776 | 794 | </viewController> |
| 777 | 795 | <placeholder placeholderIdentifier="IBFirstResponder" id="AdY-P5-857" userLabel="First Responder" sceneMemberID="firstResponder"/> |
| 778 | 796 | </objects> |
| 779 | - <point key="canvasLocation" x="1597.5999999999999" y="409.7451274362819"/> | |
| 797 | + <point key="canvasLocation" x="2463" y="399"/> | |
| 780 | 798 | </scene> |
| 781 | 799 | <!--Moral View Controller--> |
| 782 | 800 | <scene sceneID="gZ8-jD-xe5"> |
| ... | ... | @@ -787,7 +805,7 @@ |
| 787 | 805 | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
| 788 | 806 | <subviews> |
| 789 | 807 | <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="BRJ-Oe-fwH"> |
| 790 | - <rect key="frame" x="0.0" y="64" width="375" height="544"/> | |
| 808 | + <rect key="frame" x="0.0" y="20" width="375" height="637"/> | |
| 791 | 809 | <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/> |
| 792 | 810 | <prototypes> |
| 793 | 811 | <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" restorationIdentifier="moralDetail" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="moralDetail" rowHeight="280" id="edU-Xp-UQN" customClass="MoralDetailCell" customModule="ParentAssistant" customModuleProvider="target"> |
| ... | ... | @@ -1089,7 +1107,7 @@ |
| 1089 | 1107 | </viewController> |
| 1090 | 1108 | <placeholder placeholderIdentifier="IBFirstResponder" id="dWZ-wh-hFd" userLabel="First Responder" sceneMemberID="firstResponder"/> |
| 1091 | 1109 | </objects> |
| 1092 | - <point key="canvasLocation" x="2357.5999999999999" y="409.7451274362819"/> | |
| 1110 | + <point key="canvasLocation" x="3182" y="410"/> | |
| 1093 | 1111 | </scene> |
| 1094 | 1112 | <!--场景详情--> |
| 1095 | 1113 | <scene sceneID="UoQ-sj-mPR"> |
| ... | ... | @@ -1442,7 +1460,7 @@ |
| 1442 | 1460 | </viewController> |
| 1443 | 1461 | <placeholder placeholderIdentifier="IBFirstResponder" id="msC-eZ-quK" userLabel="First Responder" sceneMemberID="firstResponder"/> |
| 1444 | 1462 | </objects> |
| 1445 | - <point key="canvasLocation" x="3093.5999999999999" y="409.7451274362819"/> | |
| 1463 | + <point key="canvasLocation" x="3826" y="410"/> | |
| 1446 | 1464 | </scene> |
| 1447 | 1465 | <!--My View Controller--> |
| 1448 | 1466 | <scene sceneID="Mnt-Vb-tkB"> |
| ... | ... | @@ -1982,11 +2000,11 @@ |
| 1982 | 2000 | </objects> |
| 1983 | 2001 | <point key="canvasLocation" x="913" y="-272"/> |
| 1984 | 2002 | </scene> |
| 1985 | - <!--报告--> | |
| 2003 | + <!--成长--> | |
| 1986 | 2004 | <scene sceneID="ZBd-hB-qdB"> |
| 1987 | 2005 | <objects> |
| 1988 | 2006 | <navigationController automaticallyAdjustsScrollViewInsets="NO" id="Yrp-0h-ncC" customClass="MainViewController" customModule="ParentAssistant" customModuleProvider="target" sceneMemberID="viewController"> |
| 1989 | - <tabBarItem key="tabBarItem" title="报告" image="report_bar_icon" selectedImage="report_bar_icon_select" id="b8X-9h-Lep"/> | |
| 2007 | + <tabBarItem key="tabBarItem" title="成长" image="report_bar_icon" selectedImage="report_bar_icon_select" id="b8X-9h-Lep"/> | |
| 1990 | 2008 | <toolbarItems/> |
| 1991 | 2009 | <navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="uLq-9a-RVg"> |
| 1992 | 2010 | <rect key="frame" x="0.0" y="20" width="375" height="44"/> |
| ... | ... | @@ -1997,7 +2015,7 @@ |
| 1997 | 2015 | </navigationBar> |
| 1998 | 2016 | <nil name="viewControllers"/> |
| 1999 | 2017 | <connections> |
| 2000 | - <segue destination="oqH-t7-mJp" kind="relationship" relationship="rootViewController" id="1yc-lt-bJX"/> | |
| 2018 | + <segue destination="K2D-OC-DRl" kind="relationship" relationship="rootViewController" id="TDx-4W-K3j"/> | |
| 2001 | 2019 | </connections> |
| 2002 | 2020 | </navigationController> |
| 2003 | 2021 | <placeholder placeholderIdentifier="IBFirstResponder" id="tga-hk-GVT" userLabel="First Responder" sceneMemberID="firstResponder"/> | ... | ... |