Commit 6337a8d40fba3de3d9b4c0f2fd73f649266695bd
1 parent
9fc0a20e
Exists in
newLive
no message
Showing
10 changed files
with
747 additions
and
18 deletions
Show diff stats
YouerLiveVideo/YouerLiveVideo.xcodeproj/project.pbxproj
... | ... | @@ -15,6 +15,7 @@ |
15 | 15 | 5904FC531ECA8BB500E631FF /* MicroCourse.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5904FC521ECA8BB500E631FF /* MicroCourse.storyboard */; }; |
16 | 16 | 5904FC551ECA8BCB00E631FF /* HomePage.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5904FC541ECA8BCB00E631FF /* HomePage.storyboard */; }; |
17 | 17 | 5904FC611ECA930D00E631FF /* MViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5904FC601ECA930D00E631FF /* MViewController.swift */; }; |
18 | + 595071031ED02C140056E078 /* ExcellentTVViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 595071021ED02C140056E078 /* ExcellentTVViewController.swift */; }; | |
18 | 19 | 5960263B1DD94D3100C6B5E8 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 5960263A1DD94D3100C6B5E8 /* libsqlite3.tbd */; }; |
19 | 20 | 5960263D1DD94D5E00C6B5E8 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 5960263C1DD94D5E00C6B5E8 /* libc++.tbd */; }; |
20 | 21 | 5960263F1DD94D7D00C6B5E8 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5960263E1DD94D7D00C6B5E8 /* ImageIO.framework */; }; |
... | ... | @@ -49,6 +50,7 @@ |
49 | 50 | 59AE3DF91ECE8A90003E2C62 /* pinyin.c in Sources */ = {isa = PBXBuildFile; fileRef = 59AE3DF71ECE8A90003E2C62 /* pinyin.c */; }; |
50 | 51 | 59AE3DFB1ECECD7D003E2C62 /* LiveInforViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59AE3DFA1ECECD7D003E2C62 /* LiveInforViewController.swift */; }; |
51 | 52 | 59AE3DFD1ECED5B1003E2C62 /* MoivePlayerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59AE3DFC1ECED5B1003E2C62 /* MoivePlayerViewController.swift */; }; |
53 | + 59AE3DFF1ECFDAFD003E2C62 /* TVStationChannelViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59AE3DFE1ECFDAFD003E2C62 /* TVStationChannelViewController.swift */; }; | |
52 | 54 | 59BA13251E25CF2B00540DE0 /* AliyunPlayerSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59BA13241E25CF2B00540DE0 /* AliyunPlayerSDK.framework */; }; |
53 | 55 | 59BA13271E25CF4B00540DE0 /* AliyunPlayerSDK.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 59BA13241E25CF2B00540DE0 /* AliyunPlayerSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; |
54 | 56 | 59BA13311E25D1C000540DE0 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 59BA13301E25D1C000540DE0 /* Reachability.m */; }; |
... | ... | @@ -221,6 +223,7 @@ |
221 | 223 | 5904FC521ECA8BB500E631FF /* MicroCourse.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = MicroCourse.storyboard; sourceTree = "<group>"; }; |
222 | 224 | 5904FC541ECA8BCB00E631FF /* HomePage.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = HomePage.storyboard; sourceTree = "<group>"; }; |
223 | 225 | 5904FC601ECA930D00E631FF /* MViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MViewController.swift; sourceTree = "<group>"; }; |
226 | + 595071021ED02C140056E078 /* ExcellentTVViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExcellentTVViewController.swift; sourceTree = "<group>"; }; | |
224 | 227 | 5960263A1DD94D3100C6B5E8 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; }; |
225 | 228 | 5960263C1DD94D5E00C6B5E8 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; |
226 | 229 | 5960263E1DD94D7D00C6B5E8 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; }; |
... | ... | @@ -335,6 +338,7 @@ |
335 | 338 | 59AE3DF81ECE8A90003E2C62 /* pinyin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pinyin.h; sourceTree = "<group>"; }; |
336 | 339 | 59AE3DFA1ECECD7D003E2C62 /* LiveInforViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiveInforViewController.swift; sourceTree = "<group>"; }; |
337 | 340 | 59AE3DFC1ECED5B1003E2C62 /* MoivePlayerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoivePlayerViewController.swift; sourceTree = "<group>"; }; |
341 | + 59AE3DFE1ECFDAFD003E2C62 /* TVStationChannelViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TVStationChannelViewController.swift; sourceTree = "<group>"; }; | |
338 | 342 | 59BA13241E25CF2B00540DE0 /* AliyunPlayerSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AliyunPlayerSDK.framework; path = YouerLiveVideo/lib/AliyunPlayerSDK.framework; sourceTree = "<group>"; }; |
339 | 343 | 59BA132F1E25D1C000540DE0 /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = "<group>"; }; |
340 | 344 | 59BA13301E25D1C000540DE0 /* Reachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Reachability.m; sourceTree = "<group>"; }; |
... | ... | @@ -632,6 +636,8 @@ |
632 | 636 | 5904FC4A1ECA8B8C00E631FF /* TVStation.storyboard */, |
633 | 637 | 59C25B481ECAD643009FF276 /* MoreTVStationViewController.swift */, |
634 | 638 | 59C25B4A1ECAD84C009FF276 /* TVStationInforViewController.swift */, |
639 | + 59AE3DFE1ECFDAFD003E2C62 /* TVStationChannelViewController.swift */, | |
640 | + 595071021ED02C140056E078 /* ExcellentTVViewController.swift */, | |
635 | 641 | ); |
636 | 642 | path = TVStation; |
637 | 643 | sourceTree = "<group>"; |
... | ... | @@ -1464,6 +1470,7 @@ |
1464 | 1470 | BF7B75A21E305A6D0011D5C7 /* MJRefreshNormalHeader.m in Sources */, |
1465 | 1471 | BF7B75991E305A6D0011D5C7 /* MJRefreshFooter.m in Sources */, |
1466 | 1472 | 59F801571DD2C7AE000A78B0 /* YouerLiveVideo.xcdatamodeld in Sources */, |
1473 | + 595071031ED02C140056E078 /* ExcellentTVViewController.swift in Sources */, | |
1467 | 1474 | 59BA13311E25D1C000540DE0 /* Reachability.m in Sources */, |
1468 | 1475 | BFBB83EB1ECC445D008B404B /* UserViewController.swift in Sources */, |
1469 | 1476 | 5904FC4E1ECA8B8C00E631FF /* ResourceViewController.swift in Sources */, |
... | ... | @@ -1491,6 +1498,7 @@ |
1491 | 1498 | BF7B759C1E305A6D0011D5C7 /* MJRefreshAutoNormalFooter.m in Sources */, |
1492 | 1499 | 5904FC4F1ECA8B8C00E631FF /* SearchTVStationListViewController.swift in Sources */, |
1493 | 1500 | BFC076781E3445F3008BAC79 /* DownLoad.swift in Sources */, |
1501 | + 59AE3DFF1ECFDAFD003E2C62 /* TVStationChannelViewController.swift in Sources */, | |
1494 | 1502 | BF25DFE71DDAA36A003EC0C1 /* MultipartFormData.swift in Sources */, |
1495 | 1503 | BF25DFF71DDAA36A003EC0C1 /* MKAnnotationView+WebCache.m in Sources */, |
1496 | 1504 | BF25DFFB1DDAA36A003EC0C1 /* SDImageCacheConfig.m in Sources */, | ... | ... |
YouerLiveVideo/YouerLiveVideo.xcodeproj/project.xcworkspace/xcuserdata/Manger.xcuserdatad/UserInterfaceState.xcuserstate
No preview for this file type
YouerLiveVideo/YouerLiveVideo.xcodeproj/xcuserdata/Manger.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
... | ... | @@ -186,12 +186,12 @@ |
186 | 186 | ignoreCount = "0" |
187 | 187 | continueAfterRunningActions = "No" |
188 | 188 | filePath = "YouerLiveVideo/controllers/TVStation/TVStationViewController.swift" |
189 | - timestampString = "516614269.896305" | |
189 | + timestampString = "516957417.700522" | |
190 | 190 | startingColumnNumber = "9223372036854775807" |
191 | 191 | endingColumnNumber = "9223372036854775807" |
192 | - startingLineNumber = "60" | |
193 | - endingLineNumber = "60" | |
194 | - landmarkName = "tableView(_:viewForHeaderInSection:)" | |
192 | + startingLineNumber = "61" | |
193 | + endingLineNumber = "61" | |
194 | + landmarkName = "getDataList()" | |
195 | 195 | landmarkType = "7"> |
196 | 196 | </BreakpointContent> |
197 | 197 | </BreakpointProxy> |
... | ... | @@ -201,13 +201,13 @@ |
201 | 201 | shouldBeEnabled = "Yes" |
202 | 202 | ignoreCount = "0" |
203 | 203 | continueAfterRunningActions = "No" |
204 | - filePath = "YouerLiveVideo/controllers/TVStation/TVStationViewController.swift" | |
205 | - timestampString = "516616602.588152" | |
204 | + filePath = "YouerLiveVideo/controllers/MViewController.swift" | |
205 | + timestampString = "516618727.367999" | |
206 | 206 | startingColumnNumber = "9223372036854775807" |
207 | 207 | endingColumnNumber = "9223372036854775807" |
208 | - startingLineNumber = "21" | |
209 | - endingLineNumber = "21" | |
210 | - landmarkName = "pushToSeachViewController()" | |
208 | + startingLineNumber = "41" | |
209 | + endingLineNumber = "41" | |
210 | + landmarkName = "setupOneChildViewController(_:image:selectedImage:controller:isAddNVC:)" | |
211 | 211 | landmarkType = "7"> |
212 | 212 | </BreakpointContent> |
213 | 213 | </BreakpointProxy> |
... | ... | @@ -217,13 +217,61 @@ |
217 | 217 | shouldBeEnabled = "Yes" |
218 | 218 | ignoreCount = "0" |
219 | 219 | continueAfterRunningActions = "No" |
220 | - filePath = "YouerLiveVideo/controllers/MViewController.swift" | |
221 | - timestampString = "516618727.367999" | |
220 | + filePath = "YouerLiveVideo/controllers/TVStation/ExcellentTVViewController.swift" | |
221 | + timestampString = "517137841.643491" | |
222 | 222 | startingColumnNumber = "9223372036854775807" |
223 | 223 | endingColumnNumber = "9223372036854775807" |
224 | - startingLineNumber = "41" | |
225 | - endingLineNumber = "41" | |
226 | - landmarkName = "setupOneChildViewController(_:image:selectedImage:controller:isAddNVC:)" | |
224 | + startingLineNumber = "230" | |
225 | + endingLineNumber = "230" | |
226 | + landmarkName = "awakeFromNib()" | |
227 | + landmarkType = "7"> | |
228 | + <Locations> | |
229 | + <Location | |
230 | + shouldBeEnabled = "Yes" | |
231 | + ignoreCount = "0" | |
232 | + continueAfterRunningActions = "No" | |
233 | + symbolName = "YouerLiveVideo.ExcellentTVViewCell.awakeFromNib () -> ()" | |
234 | + moduleName = "YouerLiveVideo" | |
235 | + usesParentBreakpointCondition = "Yes" | |
236 | + urlString = "file:///Users/Manger/Desktop/NewLive/YouerLiveVideo/YouerLiveVideo/controllers/TVStation/ExcellentTVViewController.swift" | |
237 | + timestampString = "517137869.875423" | |
238 | + startingColumnNumber = "9223372036854775807" | |
239 | + endingColumnNumber = "9223372036854775807" | |
240 | + startingLineNumber = "230" | |
241 | + endingLineNumber = "230" | |
242 | + offsetFromSymbolStart = "15"> | |
243 | + </Location> | |
244 | + <Location | |
245 | + shouldBeEnabled = "Yes" | |
246 | + ignoreCount = "0" | |
247 | + continueAfterRunningActions = "No" | |
248 | + symbolName = "YouerLiveVideo.ExcellentTVViewCell.(awakeFromNib () -> ()).(closure #1)" | |
249 | + moduleName = "YouerLiveVideo" | |
250 | + usesParentBreakpointCondition = "Yes" | |
251 | + urlString = "file:///Users/Manger/Desktop/NewLive/YouerLiveVideo/YouerLiveVideo/controllers/TVStation/ExcellentTVViewController.swift" | |
252 | + timestampString = "517137869.877211" | |
253 | + startingColumnNumber = "9223372036854775807" | |
254 | + endingColumnNumber = "9223372036854775807" | |
255 | + startingLineNumber = "231" | |
256 | + endingLineNumber = "231" | |
257 | + offsetFromSymbolStart = "62"> | |
258 | + </Location> | |
259 | + </Locations> | |
260 | + </BreakpointContent> | |
261 | + </BreakpointProxy> | |
262 | + <BreakpointProxy | |
263 | + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | |
264 | + <BreakpointContent | |
265 | + shouldBeEnabled = "Yes" | |
266 | + ignoreCount = "0" | |
267 | + continueAfterRunningActions = "No" | |
268 | + filePath = "YouerLiveVideo/controllers/TVStation/ExcellentTVViewController.swift" | |
269 | + timestampString = "517137851.595827" | |
270 | + startingColumnNumber = "9223372036854775807" | |
271 | + endingColumnNumber = "9223372036854775807" | |
272 | + startingLineNumber = "206" | |
273 | + endingLineNumber = "206" | |
274 | + landmarkName = "collectionView(_:cellForItemAt:)" | |
227 | 275 | landmarkType = "7"> |
228 | 276 | </BreakpointContent> |
229 | 277 | </BreakpointProxy> | ... | ... |
YouerLiveVideo/YouerLiveVideo/Assets.xcassets/arrow.imageset/Contents.json
0 → 100644
... | ... | @@ -0,0 +1,24 @@ |
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "filename" : "arrow.png", | |
10 | + "scale" : "2x" | |
11 | + }, | |
12 | + { | |
13 | + "idiom" : "universal", | |
14 | + "scale" : "3x" | |
15 | + } | |
16 | + ], | |
17 | + "info" : { | |
18 | + "version" : 1, | |
19 | + "author" : "xcode" | |
20 | + }, | |
21 | + "properties" : { | |
22 | + "template-rendering-intent" : "template" | |
23 | + } | |
24 | +} | |
0 | 25 | \ No newline at end of file | ... | ... |
YouerLiveVideo/YouerLiveVideo/Assets.xcassets/arrow.imageset/arrow.png
0 → 100644
1002 Bytes
YouerLiveVideo/YouerLiveVideo/controllers/Resource/ResourceViewController.swift
... | ... | @@ -40,7 +40,9 @@ extension ResourceViewController:UITableViewDelegate,UITableViewDataSource{ |
40 | 40 | } |
41 | 41 | |
42 | 42 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
43 | - | |
43 | + let vc = Story.instantiateViewControllerWithIdentifier("LiveInforViewControllerVC", storyName: "Resource") as! LiveInforViewController | |
44 | + self.navigationController?.pushViewController(vc, animated: true) | |
45 | + | |
44 | 46 | } |
45 | 47 | |
46 | 48 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | ... | ... |
YouerLiveVideo/YouerLiveVideo/controllers/TVStation/ExcellentTVViewController.swift
0 → 100644
... | ... | @@ -0,0 +1,288 @@ |
1 | +// | |
2 | +// ExcellentTVViewController.swift | |
3 | +// YouerLiveVideo | |
4 | +// | |
5 | +// Created by 左丞 on 2017/5/20. | |
6 | +// Copyright © 2017年 左丞. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +import UIKit | |
10 | + | |
11 | +class ExcellentTVViewController: UIViewController { | |
12 | + | |
13 | + @IBOutlet weak var AllTitleView: UIView! | |
14 | + var isForbidScrollDelegate:Bool = true | |
15 | + var startOffsetX:CGFloat = 0 | |
16 | + var TVStationScrollView:UIScrollView!//第一排目录 | |
17 | + @IBOutlet weak var lunboView: UIView! | |
18 | + @IBOutlet weak var TVStationClass: UIView! | |
19 | + @IBOutlet weak var collectionView: UICollectionView! | |
20 | + var TVStationClasses:[TVSubjectInfor] = [] | |
21 | + var titleSelectBtn:Int = 0 | |
22 | + var classSelectBtn:Int = 0 | |
23 | + override func viewDidLoad() { | |
24 | + super.viewDidLoad() | |
25 | + AppDelegate.instance().httpServer.getTelevisionStationCatagory(parameters: nil) { (str, error) in | |
26 | + httpJsonResule(jsonString: str, error: error, successHandler: { (json) in | |
27 | + for item in json.contentData().arrayValue{ | |
28 | + self.TVStationClasses.append(TVSubjectInfor(json: item)) | |
29 | + } | |
30 | + self.creatTVStationClassScrollView() | |
31 | + self.collectionView.reloadData() | |
32 | + }, failHandler: { (error) in | |
33 | + | |
34 | + }) | |
35 | + } | |
36 | + // Do any additional setup after loading the view. | |
37 | + } | |
38 | + | |
39 | + override func didReceiveMemoryWarning() { | |
40 | + super.didReceiveMemoryWarning() | |
41 | + // Dispose of any resources that can be recreated. | |
42 | + } | |
43 | + | |
44 | + func creatTVStationClassScrollView(){ | |
45 | + TVStationScrollView = UIScrollView(frame: CGRect(origin: CGPointZero, size: TVStationClass.frame.size)) | |
46 | + TVStationScrollView.showsHorizontalScrollIndicator = false | |
47 | + TVStationScrollView.showsVerticalScrollIndicator = false | |
48 | + TVStationScrollView.bounces = false | |
49 | + var x:CGFloat = 0 | |
50 | + for (index,item) in TVStationClasses.enumerated() { | |
51 | + let TVStationClassScrollView = UIScrollView(frame: CGRect(origin: CGPointZero, size: AllTitleView.frame.size)) | |
52 | + | |
53 | + let btn = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: TVStationClass.frame.size.height)) | |
54 | + btn.backgroundColor = UIColor.white | |
55 | + btn.setTitleColor(UIColor.black, for: .normal) | |
56 | + btn.setTitle(item.name, for: .normal) | |
57 | + btn.sizeToFit() | |
58 | + if index != 0{ | |
59 | + x = TVStationScrollView.viewWithTag(200+index-1)!.frame.maxX | |
60 | + TVStationClassScrollView.isHidden = true | |
61 | + }else{ | |
62 | + x = 0 | |
63 | + TVStationClassScrollView.isHidden = false | |
64 | + btn.backgroundColor = UIColor.blue | |
65 | + btn.setTitleColor(UIColor.white, for: .normal) | |
66 | + | |
67 | + } | |
68 | + btn.frame.origin.x = x | |
69 | + btn.frame.size = CGSize(width: btn.frame.size.width+20, height: TVStationClass.frame.size.height) | |
70 | + btn.tag = 200+index | |
71 | + TVStationScrollView.contentSize = CGSize(width: btn.frame.maxX, height: 0) | |
72 | + btn.addTarget(self, action: #selector(ExcellentTVViewController.TVStationBtnClick(btn:)), for: .touchUpInside) | |
73 | + TVStationScrollView.addSubview(btn) | |
74 | + | |
75 | + TVStationClassScrollView.showsHorizontalScrollIndicator = false | |
76 | + TVStationClassScrollView.showsVerticalScrollIndicator = false | |
77 | + TVStationClassScrollView.bounces = false | |
78 | + TVStationClassScrollView.tag = 2000+index | |
79 | + for (ind,it) in item.ch.enumerated() { | |
80 | + let button = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: TVStationClass.frame.size.height)) | |
81 | + button.backgroundColor = UIColor.white | |
82 | + button.setTitleColor(UIColor.black, for: .normal) | |
83 | + button.setTitle(it.name, for: .normal) | |
84 | + button.sizeToFit() | |
85 | + if ind != 0{ | |
86 | + x = TVStationClassScrollView.viewWithTag(1000+index*100+ind-1)!.frame.maxX | |
87 | + }else{ | |
88 | + x = 0 | |
89 | + button.backgroundColor = UIColor.blue | |
90 | + button.setTitleColor(UIColor.white, for: .normal) | |
91 | + } | |
92 | + button.frame.origin.x = x | |
93 | + button.frame.size = CGSize(width: button.frame.size.width+20, height: TVStationClass.frame.size.height) | |
94 | + button.tag = 1000+index*100+ind | |
95 | + TVStationClassScrollView.contentSize = CGSize(width: button.frame.maxX, height: 0) | |
96 | + button.addTarget(self, action: #selector(ExcellentTVViewController.TVStationClassBtnClick(btn:)), for: .touchUpInside) | |
97 | + TVStationClassScrollView.addSubview(button) | |
98 | + } | |
99 | + TVStationClass.addSubview(TVStationClassScrollView) | |
100 | + } | |
101 | + AllTitleView.addSubview(TVStationScrollView) | |
102 | + } | |
103 | + | |
104 | + func TVStationBtnClick(btn:UIButton){ | |
105 | + titleSelectBtn = btn.tag%10 | |
106 | + for i in 0..<TVStationClasses.count{ | |
107 | + let item = AllTitleView.viewWithTag(200+i) as! UIButton | |
108 | + item.backgroundColor = UIColor.white | |
109 | + item.setTitleColor(UIColor.black, for: .normal) | |
110 | + TVStationClass.viewWithTag(2000+i)?.isHidden = true | |
111 | + } | |
112 | + btn.setTitleColor(UIColor.white, for: .normal) | |
113 | + btn.backgroundColor = UIColor.blue | |
114 | + TVStationClass.viewWithTag(2000+btn.tag%10)?.isHidden = false | |
115 | + collectionView.reloadData() | |
116 | + } | |
117 | + | |
118 | + func TVStationClassBtnClick(btn:UIButton){ | |
119 | + classSelectBtn = btn.tag%10 | |
120 | + let index = btn.tag%1000/100 | |
121 | + isForbidScrollDelegate = true | |
122 | + collectionView.scrollToItem(at: IndexPath(item: classSelectBtn, section: 0), at: .centeredHorizontally, animated: false) | |
123 | + for i in 0..<TVStationClasses[index].ch.count{ | |
124 | + let item = TVStationClass.viewWithTag(2000+titleSelectBtn)!.viewWithTag(1000+100*index+i) as! UIButton | |
125 | + item.backgroundColor = UIColor.white | |
126 | + item.setTitleColor(UIColor.black, for: .normal) | |
127 | + } | |
128 | + btn.setTitleColor(UIColor.white, for: .normal) | |
129 | + btn.backgroundColor = UIColor.blue | |
130 | + } | |
131 | + | |
132 | + /* | |
133 | + // MARK: - Navigation | |
134 | + | |
135 | + // In a storyboard-based application, you will often want to do a little preparation before navigation | |
136 | + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | |
137 | + // Get the new view controller using segue.destinationViewController. | |
138 | + // Pass the selected object to the new view controller. | |
139 | + } | |
140 | + */ | |
141 | + | |
142 | +} | |
143 | + | |
144 | + | |
145 | +//下方的所有电视节目所在的collcetionView | |
146 | +extension ExcellentTVViewController:UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{ | |
147 | + func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { | |
148 | + startOffsetX = scrollView.contentOffset.x | |
149 | + isForbidScrollDelegate = false | |
150 | + } | |
151 | + | |
152 | + func scrollViewDidScroll(_ scrollView: UIScrollView) { | |
153 | + if isForbidScrollDelegate { return } | |
154 | + NSLog("\(scrollView.contentOffset.x)") | |
155 | + var btn:UIButton! | |
156 | + var num:CGFloat! | |
157 | + let btnIndex = scrollView.contentOffset.x/getScreenWidth() | |
158 | + let view = TVStationClass.viewWithTag(2000+titleSelectBtn)! as! UIScrollView | |
159 | + if view.contentSize.width > getScreenWidth(){ | |
160 | + if scrollView.contentOffset.x > startOffsetX{ | |
161 | + if scrollView.contentOffset.x - startOffsetX == getScreenWidth(){ | |
162 | + num = btnIndex | |
163 | + }else{ | |
164 | + num = btnIndex+1 | |
165 | + } | |
166 | + if Int(num) >= TVStationClasses[titleSelectBtn].ch.count { | |
167 | + return | |
168 | + } | |
169 | + btn = view.viewWithTag(1000+100*titleSelectBtn+Int(num))! as! UIButton | |
170 | + let TVStationContentOffset = btn.frame.origin.x+btn.frame.width/2 | |
171 | + if TVStationContentOffset < view.contentSize.width-getScreenWidth()/2 && TVStationContentOffset >= getScreenWidth()/2{ | |
172 | + view.contentOffset.x = TVStationContentOffset - getScreenWidth()/2 | |
173 | + } | |
174 | + if TVStationContentOffset >= view.contentSize.width-getScreenWidth()/2{ | |
175 | + view.contentOffset.x = view.contentSize.width-getScreenWidth() | |
176 | + } | |
177 | + } | |
178 | + else{ | |
179 | + let num = btnIndex | |
180 | + if num < 0{ | |
181 | + return | |
182 | + } | |
183 | + btn = view.viewWithTag(1000+100*titleSelectBtn+Int(num))! as! UIButton | |
184 | + let TVStationContentOffset = btn.frame.origin.x+btn.frame.width/2 | |
185 | + if TVStationContentOffset < view.contentSize.width-getScreenWidth()/2 && TVStationContentOffset >= getScreenWidth()/2{ | |
186 | + view.contentOffset.x = TVStationContentOffset-getScreenWidth()/2 | |
187 | + } | |
188 | + if TVStationContentOffset < getScreenWidth()/2{ | |
189 | + view.contentOffset.x = 0 | |
190 | + } | |
191 | + } | |
192 | + }else{ | |
193 | + btn = view.viewWithTag(1000+100*titleSelectBtn+Int(btnIndex))! as! UIButton | |
194 | + } | |
195 | + for i in 0..<TVStationClasses[titleSelectBtn].ch.count{ | |
196 | + let item = view.viewWithTag(i+1000+100*titleSelectBtn) as! UIButton | |
197 | + item.backgroundColor = UIColor.white | |
198 | + item.setTitleColor(UIColor.black, for: .normal) | |
199 | + } | |
200 | + btn.setTitleColor(UIColor.white, for: .normal) | |
201 | + btn.backgroundColor = UIColor.blue | |
202 | + } | |
203 | + | |
204 | + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { | |
205 | + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ExcellentTVViewCell | |
206 | + cell.f_TelevisionId = TVStationClasses[titleSelectBtn].ch[classSelectBtn].id | |
207 | + return cell | |
208 | + } | |
209 | + | |
210 | + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { | |
211 | + if TVStationClasses.count > 0{ | |
212 | + return TVStationClasses[titleSelectBtn].ch.count | |
213 | + } | |
214 | + return 0 | |
215 | + } | |
216 | + | |
217 | + | |
218 | + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { | |
219 | + return CGSize(width: getScreenWidth(), height: collectionView.frame.size.height) | |
220 | + | |
221 | + } | |
222 | +} | |
223 | + | |
224 | +//单项选项中的CollectionView | |
225 | +class ExcellentTVViewCell: UICollectionViewCell,UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{ | |
226 | + var f_TelevisionId:String! | |
227 | + @IBOutlet weak var inforCollectionView: UICollectionView! | |
228 | + var datatSet:[TVStationSubject] = [] | |
229 | + | |
230 | + | |
231 | + | |
232 | + override func awakeFromNib() { | |
233 | + AppDelegate.instance().httpServer.postExcellentProgram(parameters: ["f_TelevisionId":f_TelevisionId as AnyObject,"pageIndex":1 as AnyObject]) { (str, error) in | |
234 | + httpJsonResule(jsonString: str, error: error, successHandler: { (json) in | |
235 | + for item in json.contentData().arrayValue{ | |
236 | + self.datatSet.append(TVStationSubject(json: item)) | |
237 | + } | |
238 | + self.inforCollectionView.reloadData() | |
239 | + }, failHandler: { (error) in | |
240 | + | |
241 | + }) | |
242 | + } | |
243 | + } | |
244 | + | |
245 | + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { | |
246 | + | |
247 | + } | |
248 | + | |
249 | + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { | |
250 | + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell1", for: indexPath) as! ExcellentTVInforViewCell | |
251 | + return cell | |
252 | + } | |
253 | + | |
254 | + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { | |
255 | + return datatSet.count | |
256 | + } | |
257 | + | |
258 | + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { | |
259 | + return CGSize(width: (getScreenWidth()-30)/2, height: 150) | |
260 | + } | |
261 | + | |
262 | + | |
263 | + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { | |
264 | + return UIEdgeInsetsMake(10, 10, 10, 10) | |
265 | + } | |
266 | + | |
267 | +} | |
268 | + | |
269 | +class ExcellentTVInforViewCell: UICollectionViewCell{ | |
270 | + | |
271 | +} | |
272 | + | |
273 | +class TVSubjectInfor{ | |
274 | + var id:String! | |
275 | + var name:String! | |
276 | + var text:String! | |
277 | + var open:Bool! | |
278 | + var ch:[TVSubjectInfor]=[] | |
279 | + init(json:JSON){ | |
280 | + id = json["id"].stringValue | |
281 | + name = json["name"].stringValue | |
282 | + text = json["text"].stringValue | |
283 | + name = json["name"].stringValue | |
284 | + for item in json["children"].arrayValue { | |
285 | + ch.append(TVSubjectInfor(json: item)) | |
286 | + } | |
287 | + } | |
288 | +} | ... | ... |
YouerLiveVideo/YouerLiveVideo/controllers/TVStation/TVStation.storyboard
... | ... | @@ -85,6 +85,135 @@ |
85 | 85 | </objects> |
86 | 86 | <point key="canvasLocation" x="-570.39999999999998" y="126.38680659670166"/> |
87 | 87 | </scene> |
88 | + <!--ExcellentTV View Controller--> | |
89 | + <scene sceneID="l6m-g1-3BP"> | |
90 | + <objects> | |
91 | + <viewController storyboardIdentifier="ExcellentTVViewControllerVC" id="b8W-aX-LnV" customClass="ExcellentTVViewController" customModule="YouerLiveVideo" customModuleProvider="target" sceneMemberID="viewController"> | |
92 | + <layoutGuides> | |
93 | + <viewControllerLayoutGuide type="top" id="4i9-Tx-rg9"/> | |
94 | + <viewControllerLayoutGuide type="bottom" id="lho-df-W25"/> | |
95 | + </layoutGuides> | |
96 | + <view key="view" contentMode="scaleToFill" id="Gv8-KK-Axo"> | |
97 | + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | |
98 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | |
99 | + <subviews> | |
100 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Mhl-sd-KB9"> | |
101 | + <rect key="frame" x="0.0" y="64" width="375" height="157"/> | |
102 | + <color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/> | |
103 | + <constraints> | |
104 | + <constraint firstAttribute="height" constant="157" id="UZ0-MV-VXA"/> | |
105 | + </constraints> | |
106 | + </view> | |
107 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="89T-Tx-OBE"> | |
108 | + <rect key="frame" x="0.0" y="272" width="375" height="51"/> | |
109 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | |
110 | + <constraints> | |
111 | + <constraint firstAttribute="height" constant="51" id="Y6f-tb-9yg"/> | |
112 | + </constraints> | |
113 | + </view> | |
114 | + <searchBar contentMode="redraw" placeholder="搜索" translatesAutoresizingMaskIntoConstraints="NO" id="zGg-HQ-hQ6"> | |
115 | + <rect key="frame" x="0.0" y="20" width="375" height="44"/> | |
116 | + <textInputTraits key="textInputTraits"/> | |
117 | + </searchBar> | |
118 | + <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" pagingEnabled="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="98q-Zu-qPj"> | |
119 | + <rect key="frame" x="0.0" y="323" width="375" height="344"/> | |
120 | + <color key="backgroundColor" red="0.89713114500000002" green="0.89431768659999999" blue="0.90413767099999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
121 | + <collectionViewFlowLayout key="collectionViewLayout" scrollDirection="horizontal" minimumLineSpacing="0.0" minimumInteritemSpacing="0.0" id="Y8d-tF-Eyu"> | |
122 | + <size key="itemSize" width="376" height="392"/> | |
123 | + <size key="headerReferenceSize" width="0.0" height="0.0"/> | |
124 | + <size key="footerReferenceSize" width="0.0" height="0.0"/> | |
125 | + <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/> | |
126 | + </collectionViewFlowLayout> | |
127 | + <cells> | |
128 | + <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="cell" id="fGR-8c-fGE" customClass="ExcellentTVViewCell" customModule="YouerLiveVideo" customModuleProvider="target"> | |
129 | + <rect key="frame" x="0.0" y="-24" width="376" height="392"/> | |
130 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | |
131 | + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> | |
132 | + <rect key="frame" x="0.0" y="0.0" width="376" height="392"/> | |
133 | + <autoresizingMask key="autoresizingMask"/> | |
134 | + <subviews> | |
135 | + <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="r6p-zi-d85"> | |
136 | + <rect key="frame" x="0.0" y="0.0" width="376" height="392"/> | |
137 | + <color key="backgroundColor" red="0.89713114500000002" green="0.89431768659999999" blue="0.90413767099999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
138 | + <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="cgF-Y1-nnf"> | |
139 | + <size key="itemSize" width="170" height="167"/> | |
140 | + <size key="headerReferenceSize" width="0.0" height="0.0"/> | |
141 | + <size key="footerReferenceSize" width="0.0" height="0.0"/> | |
142 | + <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/> | |
143 | + </collectionViewFlowLayout> | |
144 | + <cells> | |
145 | + <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="cell1" id="E1U-aK-U8z" customClass="ExcellentTVInforViewCell" customModule="YouerLiveVideo" customModuleProvider="target"> | |
146 | + <rect key="frame" x="0.0" y="0.0" width="170" height="167"/> | |
147 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | |
148 | + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> | |
149 | + <rect key="frame" x="0.0" y="0.0" width="170" height="167"/> | |
150 | + <autoresizingMask key="autoresizingMask"/> | |
151 | + </view> | |
152 | + <color key="backgroundColor" red="0.024445036430000001" green="0.37366014720000001" blue="0.72428816559999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
153 | + </collectionViewCell> | |
154 | + </cells> | |
155 | + <connections> | |
156 | + <outlet property="dataSource" destination="fGR-8c-fGE" id="u36-wA-CKH"/> | |
157 | + <outlet property="delegate" destination="fGR-8c-fGE" id="IBZ-Vo-3of"/> | |
158 | + </connections> | |
159 | + </collectionView> | |
160 | + </subviews> | |
161 | + </view> | |
162 | + <constraints> | |
163 | + <constraint firstItem="r6p-zi-d85" firstAttribute="leading" secondItem="fGR-8c-fGE" secondAttribute="leading" id="XnS-Y3-JXe"/> | |
164 | + <constraint firstAttribute="bottom" secondItem="r6p-zi-d85" secondAttribute="bottom" id="Zyh-g8-MW7"/> | |
165 | + <constraint firstAttribute="trailing" secondItem="r6p-zi-d85" secondAttribute="trailing" id="dK8-ok-Snv"/> | |
166 | + <constraint firstItem="r6p-zi-d85" firstAttribute="top" secondItem="fGR-8c-fGE" secondAttribute="top" id="iDI-iF-maj"/> | |
167 | + </constraints> | |
168 | + <connections> | |
169 | + <outlet property="inforCollectionView" destination="r6p-zi-d85" id="XvH-nv-OHv"/> | |
170 | + </connections> | |
171 | + </collectionViewCell> | |
172 | + </cells> | |
173 | + <connections> | |
174 | + <outlet property="dataSource" destination="b8W-aX-LnV" id="CCT-nv-YZq"/> | |
175 | + <outlet property="delegate" destination="b8W-aX-LnV" id="1Cr-xP-bzP"/> | |
176 | + </connections> | |
177 | + </collectionView> | |
178 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="IdI-17-KVq"> | |
179 | + <rect key="frame" x="0.0" y="221" width="375" height="51"/> | |
180 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | |
181 | + <constraints> | |
182 | + <constraint firstAttribute="height" constant="51" id="unU-1q-P1u"/> | |
183 | + </constraints> | |
184 | + </view> | |
185 | + </subviews> | |
186 | + <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/> | |
187 | + <constraints> | |
188 | + <constraint firstItem="zGg-HQ-hQ6" firstAttribute="leading" secondItem="Gv8-KK-Axo" secondAttribute="leading" id="08r-BK-AYj"/> | |
189 | + <constraint firstAttribute="trailing" secondItem="IdI-17-KVq" secondAttribute="trailing" id="5vb-9d-uXn"/> | |
190 | + <constraint firstItem="IdI-17-KVq" firstAttribute="top" secondItem="Mhl-sd-KB9" secondAttribute="bottom" id="7rQ-6N-24t"/> | |
191 | + <constraint firstAttribute="trailing" secondItem="98q-Zu-qPj" secondAttribute="trailing" id="9fs-x7-fIS"/> | |
192 | + <constraint firstItem="IdI-17-KVq" firstAttribute="leading" secondItem="Gv8-KK-Axo" secondAttribute="leading" id="F2C-pE-qYZ"/> | |
193 | + <constraint firstItem="zGg-HQ-hQ6" firstAttribute="top" secondItem="4i9-Tx-rg9" secondAttribute="bottom" id="J68-Pn-0Bu"/> | |
194 | + <constraint firstAttribute="trailing" secondItem="Mhl-sd-KB9" secondAttribute="trailing" id="Lt7-n0-tWt"/> | |
195 | + <constraint firstItem="lho-df-W25" firstAttribute="top" secondItem="98q-Zu-qPj" secondAttribute="bottom" id="MIT-SW-TOS"/> | |
196 | + <constraint firstItem="89T-Tx-OBE" firstAttribute="leading" secondItem="Gv8-KK-Axo" secondAttribute="leading" id="NED-o8-Gz5"/> | |
197 | + <constraint firstItem="89T-Tx-OBE" firstAttribute="top" secondItem="IdI-17-KVq" secondAttribute="bottom" id="Pc7-DI-fyn"/> | |
198 | + <constraint firstAttribute="trailing" secondItem="zGg-HQ-hQ6" secondAttribute="trailing" id="WPf-27-9bg"/> | |
199 | + <constraint firstItem="Mhl-sd-KB9" firstAttribute="leading" secondItem="Gv8-KK-Axo" secondAttribute="leading" id="anA-G9-sCy"/> | |
200 | + <constraint firstItem="98q-Zu-qPj" firstAttribute="leading" secondItem="Gv8-KK-Axo" secondAttribute="leading" id="coP-ED-djd"/> | |
201 | + <constraint firstAttribute="trailing" secondItem="89T-Tx-OBE" secondAttribute="trailing" id="d3u-hS-Fv0"/> | |
202 | + <constraint firstItem="98q-Zu-qPj" firstAttribute="top" secondItem="89T-Tx-OBE" secondAttribute="bottom" id="vDI-ni-7Iu"/> | |
203 | + <constraint firstItem="Mhl-sd-KB9" firstAttribute="top" secondItem="zGg-HQ-hQ6" secondAttribute="bottom" id="zJx-8Q-hdK"/> | |
204 | + </constraints> | |
205 | + </view> | |
206 | + <connections> | |
207 | + <outlet property="AllTitleView" destination="IdI-17-KVq" id="q4z-D9-yZi"/> | |
208 | + <outlet property="TVStationClass" destination="89T-Tx-OBE" id="ru3-Dy-X1Z"/> | |
209 | + <outlet property="collectionView" destination="98q-Zu-qPj" id="0J9-bV-tnM"/> | |
210 | + <outlet property="lunboView" destination="Mhl-sd-KB9" id="R0Q-io-hip"/> | |
211 | + </connections> | |
212 | + </viewController> | |
213 | + <placeholder placeholderIdentifier="IBFirstResponder" id="KWc-cP-YUd" userLabel="First Responder" sceneMemberID="firstResponder"/> | |
214 | + </objects> | |
215 | + <point key="canvasLocation" x="-572" y="785.75712143928047"/> | |
216 | + </scene> | |
88 | 217 | <!--SearchTV Station List View Controller--> |
89 | 218 | <scene sceneID="FC9-ii-4gV"> |
90 | 219 | <objects> |
... | ... | @@ -408,5 +537,127 @@ |
408 | 537 | </objects> |
409 | 538 | <point key="canvasLocation" x="799.20000000000005" y="129.98500749625188"/> |
410 | 539 | </scene> |
540 | + <!--Station Channel View Controller--> | |
541 | + <scene sceneID="9jT-qD-wyU"> | |
542 | + <objects> | |
543 | + <viewController storyboardIdentifier="TVStationChannelViewControllerVC" id="CLL-z0-29E" customClass="TVStationChannelViewController" customModule="YouerLiveVideo" customModuleProvider="target" sceneMemberID="viewController"> | |
544 | + <layoutGuides> | |
545 | + <viewControllerLayoutGuide type="top" id="Lr1-Rk-hqR"/> | |
546 | + <viewControllerLayoutGuide type="bottom" id="PET-wp-1k0"/> | |
547 | + </layoutGuides> | |
548 | + <view key="view" contentMode="scaleToFill" id="1fP-l5-4K3"> | |
549 | + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | |
550 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | |
551 | + <subviews> | |
552 | + <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="EVv-oR-qoV"> | |
553 | + <rect key="frame" x="0.0" y="20" width="375" height="647"/> | |
554 | + <color key="backgroundColor" red="0.89713114500000002" green="0.89431768659999999" blue="0.90413767099999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
555 | + <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="nT1-EI-DzL"> | |
556 | + <size key="itemSize" width="160" height="176"/> | |
557 | + <size key="headerReferenceSize" width="50" height="50"/> | |
558 | + <size key="footerReferenceSize" width="0.0" height="0.0"/> | |
559 | + <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/> | |
560 | + </collectionViewFlowLayout> | |
561 | + <cells> | |
562 | + <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="cell" id="XS8-dM-fSF" customClass="TVStationChannelCell" customModule="YouerLiveVideo" customModuleProvider="target"> | |
563 | + <rect key="frame" x="0.0" y="50" width="160" height="176"/> | |
564 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | |
565 | + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> | |
566 | + <rect key="frame" x="0.0" y="0.0" width="160" height="176"/> | |
567 | + <autoresizingMask key="autoresizingMask"/> | |
568 | + <subviews> | |
569 | + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="1ZJ-ao-hBx"> | |
570 | + <rect key="frame" x="0.0" y="0.0" width="160" height="120"/> | |
571 | + <color key="backgroundColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="calibratedRGB"/> | |
572 | + </imageView> | |
573 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EE2-Y8-SP4"> | |
574 | + <rect key="frame" x="59" y="139" width="42" height="21"/> | |
575 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
576 | + <nil key="textColor"/> | |
577 | + <nil key="highlightedColor"/> | |
578 | + </label> | |
579 | + </subviews> | |
580 | + </view> | |
581 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | |
582 | + <constraints> | |
583 | + <constraint firstAttribute="bottom" secondItem="EE2-Y8-SP4" secondAttribute="bottom" constant="16" id="6w0-JP-ybD"/> | |
584 | + <constraint firstItem="1ZJ-ao-hBx" firstAttribute="leading" secondItem="XS8-dM-fSF" secondAttribute="leading" id="Fdm-sT-5np"/> | |
585 | + <constraint firstItem="1ZJ-ao-hBx" firstAttribute="top" secondItem="XS8-dM-fSF" secondAttribute="top" id="HmI-98-WDB"/> | |
586 | + <constraint firstItem="EE2-Y8-SP4" firstAttribute="top" secondItem="1ZJ-ao-hBx" secondAttribute="bottom" constant="19" id="KZ9-YD-2dJ"/> | |
587 | + <constraint firstItem="EE2-Y8-SP4" firstAttribute="centerX" secondItem="XS8-dM-fSF" secondAttribute="centerX" id="nFb-gE-ru0"/> | |
588 | + <constraint firstAttribute="trailing" secondItem="1ZJ-ao-hBx" secondAttribute="trailing" id="p1m-WJ-Z3K"/> | |
589 | + </constraints> | |
590 | + <connections> | |
591 | + <outlet property="tvStationLogo" destination="1ZJ-ao-hBx" id="1NC-ds-qqX"/> | |
592 | + <outlet property="tvStationName" destination="EE2-Y8-SP4" id="lSz-1S-YnW"/> | |
593 | + </connections> | |
594 | + </collectionViewCell> | |
595 | + </cells> | |
596 | + <collectionReusableView key="sectionHeaderView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="HeaderView" id="Jdh-dY-FAu" customClass="TVStationChannelHeaderView" customModule="YouerLiveVideo" customModuleProvider="target"> | |
597 | + <rect key="frame" x="0.0" y="0.0" width="375" height="50"/> | |
598 | + <autoresizingMask key="autoresizingMask"/> | |
599 | + <subviews> | |
600 | + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="8TH-3g-UsI"> | |
601 | + <rect key="frame" x="8" y="7" width="35" height="35"/> | |
602 | + <constraints> | |
603 | + <constraint firstAttribute="height" constant="35" id="5yj-bt-Jn8"/> | |
604 | + <constraint firstAttribute="width" secondItem="8TH-3g-UsI" secondAttribute="height" multiplier="1:1" id="Kxf-yE-A3T"/> | |
605 | + </constraints> | |
606 | + </imageView> | |
607 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yem-uG-4a8"> | |
608 | + <rect key="frame" x="51" y="14" width="42" height="21"/> | |
609 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
610 | + <nil key="textColor"/> | |
611 | + <nil key="highlightedColor"/> | |
612 | + </label> | |
613 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="HPj-Yv-YzO"> | |
614 | + <rect key="frame" x="337" y="10" width="30" height="30"/> | |
615 | + <constraints> | |
616 | + <constraint firstAttribute="height" constant="30" id="tPQ-hz-bM8"/> | |
617 | + <constraint firstAttribute="width" constant="30" id="weL-na-eER"/> | |
618 | + </constraints> | |
619 | + <state key="normal" image="arrow"/> | |
620 | + </button> | |
621 | + </subviews> | |
622 | + <constraints> | |
623 | + <constraint firstItem="yem-uG-4a8" firstAttribute="leading" secondItem="8TH-3g-UsI" secondAttribute="trailing" constant="8" id="3hn-Wo-NOT"/> | |
624 | + <constraint firstItem="HPj-Yv-YzO" firstAttribute="centerY" secondItem="Jdh-dY-FAu" secondAttribute="centerY" id="HS5-Sr-TvH"/> | |
625 | + <constraint firstAttribute="trailing" secondItem="HPj-Yv-YzO" secondAttribute="trailing" constant="8" id="Ih6-EB-p7N"/> | |
626 | + <constraint firstItem="yem-uG-4a8" firstAttribute="centerY" secondItem="Jdh-dY-FAu" secondAttribute="centerY" id="Xvl-o7-bO2"/> | |
627 | + <constraint firstItem="8TH-3g-UsI" firstAttribute="centerY" secondItem="Jdh-dY-FAu" secondAttribute="centerY" id="fy9-TI-eoE"/> | |
628 | + <constraint firstItem="HPj-Yv-YzO" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="yem-uG-4a8" secondAttribute="trailing" constant="8" id="k2d-sv-rfG"/> | |
629 | + <constraint firstItem="8TH-3g-UsI" firstAttribute="leading" secondItem="Jdh-dY-FAu" secondAttribute="leading" constant="8" id="wQg-ux-5gP"/> | |
630 | + </constraints> | |
631 | + <connections> | |
632 | + <outlet property="logo" destination="8TH-3g-UsI" id="3e0-Qr-HHs"/> | |
633 | + <outlet property="moreBtn" destination="HPj-Yv-YzO" id="CXg-Sc-E5B"/> | |
634 | + <outlet property="title" destination="yem-uG-4a8" id="jgP-c2-8rY"/> | |
635 | + </connections> | |
636 | + </collectionReusableView> | |
637 | + <connections> | |
638 | + <outlet property="dataSource" destination="CLL-z0-29E" id="maz-ws-hfl"/> | |
639 | + <outlet property="delegate" destination="CLL-z0-29E" id="EEF-Mt-3m2"/> | |
640 | + </connections> | |
641 | + </collectionView> | |
642 | + </subviews> | |
643 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
644 | + <constraints> | |
645 | + <constraint firstItem="PET-wp-1k0" firstAttribute="top" secondItem="EVv-oR-qoV" secondAttribute="bottom" id="E8l-rG-D5Z"/> | |
646 | + <constraint firstItem="EVv-oR-qoV" firstAttribute="leading" secondItem="1fP-l5-4K3" secondAttribute="leading" id="eWd-hq-hwR"/> | |
647 | + <constraint firstItem="EVv-oR-qoV" firstAttribute="top" secondItem="Lr1-Rk-hqR" secondAttribute="bottom" id="l0i-7E-YUv"/> | |
648 | + <constraint firstAttribute="trailing" secondItem="EVv-oR-qoV" secondAttribute="trailing" id="xf3-fQ-aK5"/> | |
649 | + </constraints> | |
650 | + </view> | |
651 | + <connections> | |
652 | + <outlet property="collectionView" destination="EVv-oR-qoV" id="B1b-Pw-i7S"/> | |
653 | + </connections> | |
654 | + </viewController> | |
655 | + <placeholder placeholderIdentifier="IBFirstResponder" id="Thy-DG-e5P" userLabel="First Responder" sceneMemberID="firstResponder"/> | |
656 | + </objects> | |
657 | + <point key="canvasLocation" x="93.599999999999994" y="785.75712143928047"/> | |
658 | + </scene> | |
411 | 659 | </scenes> |
660 | + <resources> | |
661 | + <image name="arrow" width="13" height="13"/> | |
662 | + </resources> | |
412 | 663 | </document> | ... | ... |
YouerLiveVideo/YouerLiveVideo/controllers/TVStation/TVStationChannelViewController.swift
0 → 100644
... | ... | @@ -0,0 +1,108 @@ |
1 | +// | |
2 | +// TVStationChannelViewController.swift | |
3 | +// YouerLiveVideo | |
4 | +// | |
5 | +// Created by 左丞 on 2017/5/20. | |
6 | +// Copyright © 2017年 左丞. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +import UIKit | |
10 | + | |
11 | +class TVStationChannelViewController: UIViewController { | |
12 | + | |
13 | + @IBOutlet weak var collectionView: UICollectionView! | |
14 | + var typeList:[String] = ["直播节目","点播"] | |
15 | + override func viewDidLoad() { | |
16 | + super.viewDidLoad() | |
17 | + self.automaticallyAdjustsScrollViewInsets = false | |
18 | + // Do any additional setup after loading the view. | |
19 | + } | |
20 | + | |
21 | + override func didReceiveMemoryWarning() { | |
22 | + super.didReceiveMemoryWarning() | |
23 | + // Dispose of any resources that can be recreated. | |
24 | + } | |
25 | + | |
26 | + | |
27 | + func moreBtnClick(send:UIButton){ | |
28 | + | |
29 | + } | |
30 | + | |
31 | + /* | |
32 | + // MARK: - Navigation | |
33 | + | |
34 | + // In a storyboard-based application, you will often want to do a little preparation before navigation | |
35 | + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | |
36 | + // Get the new view controller using segue.destinationViewController. | |
37 | + // Pass the selected object to the new view controller. | |
38 | + } | |
39 | + */ | |
40 | + | |
41 | +} | |
42 | + | |
43 | +extension TVStationChannelViewController:UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{ | |
44 | + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { | |
45 | + | |
46 | + } | |
47 | + | |
48 | + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { | |
49 | + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) | |
50 | + return cell | |
51 | + } | |
52 | + | |
53 | + func numberOfSections(in collectionView: UICollectionView) -> Int { | |
54 | + return 2 | |
55 | + } | |
56 | + | |
57 | + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { | |
58 | + return 4 | |
59 | + } | |
60 | + | |
61 | + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize { | |
62 | + return CGSize(width: getScreenWidth(), height: 44) | |
63 | + } | |
64 | + | |
65 | + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { | |
66 | + return UIEdgeInsetsMake(10, 10, 10, 10) | |
67 | + } | |
68 | + | |
69 | + | |
70 | + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { | |
71 | + return CGSize(width: (getScreenWidth()-30)/2, height: 200) | |
72 | + } | |
73 | + | |
74 | + func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { | |
75 | + var reusableView:UICollectionReusableView! | |
76 | + if kind == UICollectionElementKindSectionHeader{ | |
77 | + let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "HeaderView", for: indexPath) as! TVStationChannelHeaderView | |
78 | + headerView.title.text = typeList[indexPath.section] | |
79 | + headerView.moreBtn.tag = 100+indexPath.section | |
80 | + headerView.moreBtn.addTarget(self, action: #selector(TVStationChannelViewController.moreBtnClick(send:)), for: .touchUpInside) | |
81 | + headerView.logo.image = UIImage(named: "icon") | |
82 | + reusableView = headerView | |
83 | + } | |
84 | + return reusableView | |
85 | + } | |
86 | + | |
87 | +} | |
88 | + | |
89 | +class TVStationChannelCell: UICollectionViewCell { | |
90 | + | |
91 | + @IBOutlet weak var tvStationLogo: UIImageView! | |
92 | + @IBOutlet weak var tvStationName: UILabel! | |
93 | +} | |
94 | + | |
95 | + | |
96 | +class TVStationChannelHeaderView: UICollectionReusableView { | |
97 | + | |
98 | + | |
99 | + @IBOutlet weak var moreBtn: UIButton! | |
100 | + @IBOutlet weak var logo: UIImageView! | |
101 | + @IBOutlet weak var title: UILabel! | |
102 | + | |
103 | +} | |
104 | + | |
105 | + | |
106 | + | |
107 | + | |
108 | + | ... | ... |
YouerLiveVideo/YouerLiveVideo/controllers/TVStation/TVStationViewController.swift
... | ... | @@ -19,6 +19,7 @@ class TVStationViewController: UIViewController { |
19 | 19 | super.viewDidLoad() |
20 | 20 | self.configTheme() |
21 | 21 | getDataList() |
22 | + self.automaticallyAdjustsScrollViewInsets = false | |
22 | 23 | self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .search, target: self, action: #selector(TVStationViewController.pushToSeachViewController)) |
23 | 24 | // Do any additional setup after loading the view. |
24 | 25 | } |
... | ... | @@ -147,11 +148,10 @@ extension TVStationViewController:UICollectionViewDelegate,UICollectionViewDeleg |
147 | 148 | |
148 | 149 | func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { |
149 | 150 | if collectionView.tag == 3{ |
150 | - let vc = Story.instantiateViewControllerWithIdentifier("TVStationInforViewControllerVC", storyName: "TVStation") as! TVStationInforViewController | |
151 | - vc.excellentTVStationProgram = excellentTVStationProgram[indexPath.row] | |
151 | + let vc = Story.instantiateViewControllerWithIdentifier("ExcellentTVViewControllerVC", storyName: "TVStation") as! ExcellentTVViewController | |
152 | 152 | self.navigationController?.pushViewController(vc, animated: true) |
153 | 153 | }else{ |
154 | - let vc = Story.instantiateViewControllerWithIdentifier("LiveInforViewControllerVC", storyName: "Resource") as! LiveInforViewController | |
154 | + let vc = Story.instantiateViewControllerWithIdentifier("TVStationChannelViewControllerVC", storyName: "TVStation") as! TVStationChannelViewController | |
155 | 155 | self.navigationController?.pushViewController(vc, animated: true) |
156 | 156 | } |
157 | 157 | } | ... | ... |