Commit aa722845b908ed9516f3d16692261e2382f5e02f
Exists in
newLive
Merge branch 'newLive' of http://git.shunzhi.net/iosgroup/newlive into newLive
# Conflicts: # YouerLiveVideo/YouerLiveVideo.xcodeproj/project.pbxproj # YouerLiveVideo/YouerLiveVideo.xcodeproj/project.xcworkspace/xcuserdata/jun.xcuserdatad/UserInterfaceState.xcuserstate
Showing
17 changed files
with
2193 additions
and
24 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 */; }; |
... | ... | @@ -24,6 +25,10 @@ |
24 | 25 | 596026501DDD469200C6B5E8 /* RiverRunCommentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5960264C1DDD469200C6B5E8 /* RiverRunCommentManager.m */; }; |
25 | 26 | 596026511DDD469200C6B5E8 /* RiverRunCommentUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 5960264E1DDD469200C6B5E8 /* RiverRunCommentUtil.m */; }; |
26 | 27 | 597185B51ECA990C00D7F478 /* Resource.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 597185B41ECA990C00D7F478 /* Resource.storyboard */; }; |
28 | + 598939491ED3CFD8005DA462 /* UserEditViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 598939481ED3CFD8005DA462 /* UserEditViewController.swift */; }; | |
29 | + 5989394B1ED3CFF4005DA462 /* AppSettingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5989394A1ED3CFF4005DA462 /* AppSettingViewController.swift */; }; | |
30 | + 5989394D1ED4016D005DA462 /* HistoryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5989394C1ED4016D005DA462 /* HistoryViewController.swift */; }; | |
31 | + 598939501ED41C44005DA462 /* ChangePassWordViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5989394F1ED41C44005DA462 /* ChangePassWordViewController.swift */; }; | |
27 | 32 | 598A0E531E51941300273AB8 /* libNIMSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 598A0E4D1E51941300273AB8 /* libNIMSDK.a */; }; |
28 | 33 | 598A0E541E51941300273AB8 /* libaacplus.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 598A0E4F1E51941300273AB8 /* libaacplus.a */; }; |
29 | 34 | 598A0E551E51941300273AB8 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 598A0E501E51941300273AB8 /* libcrypto.a */; }; |
... | ... | @@ -49,6 +54,7 @@ |
49 | 54 | 59AE3DF91ECE8A90003E2C62 /* pinyin.c in Sources */ = {isa = PBXBuildFile; fileRef = 59AE3DF71ECE8A90003E2C62 /* pinyin.c */; }; |
50 | 55 | 59AE3DFB1ECECD7D003E2C62 /* LiveInforViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59AE3DFA1ECECD7D003E2C62 /* LiveInforViewController.swift */; }; |
51 | 56 | 59AE3DFD1ECED5B1003E2C62 /* MoivePlayerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59AE3DFC1ECED5B1003E2C62 /* MoivePlayerViewController.swift */; }; |
57 | + 59AE3DFF1ECFDAFD003E2C62 /* TVStationChannelViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59AE3DFE1ECFDAFD003E2C62 /* TVStationChannelViewController.swift */; }; | |
52 | 58 | 59BA13251E25CF2B00540DE0 /* AliyunPlayerSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59BA13241E25CF2B00540DE0 /* AliyunPlayerSDK.framework */; }; |
53 | 59 | 59BA13271E25CF4B00540DE0 /* AliyunPlayerSDK.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 59BA13241E25CF2B00540DE0 /* AliyunPlayerSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; |
54 | 60 | 59BA13311E25D1C000540DE0 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 59BA13301E25D1C000540DE0 /* Reachability.m */; }; |
... | ... | @@ -227,6 +233,7 @@ |
227 | 233 | 5904FC521ECA8BB500E631FF /* MicroCourse.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = MicroCourse.storyboard; sourceTree = "<group>"; }; |
228 | 234 | 5904FC541ECA8BCB00E631FF /* HomePage.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = HomePage.storyboard; sourceTree = "<group>"; }; |
229 | 235 | 5904FC601ECA930D00E631FF /* MViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MViewController.swift; sourceTree = "<group>"; }; |
236 | + 595071021ED02C140056E078 /* ExcellentTVViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExcellentTVViewController.swift; sourceTree = "<group>"; }; | |
230 | 237 | 5960263A1DD94D3100C6B5E8 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; }; |
231 | 238 | 5960263C1DD94D5E00C6B5E8 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; |
232 | 239 | 5960263E1DD94D7D00C6B5E8 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; }; |
... | ... | @@ -239,6 +246,10 @@ |
239 | 246 | 5960264D1DDD469200C6B5E8 /* RiverRunCommentUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RiverRunCommentUtil.h; sourceTree = "<group>"; }; |
240 | 247 | 5960264E1DDD469200C6B5E8 /* RiverRunCommentUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RiverRunCommentUtil.m; sourceTree = "<group>"; }; |
241 | 248 | 597185B41ECA990C00D7F478 /* Resource.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Resource.storyboard; sourceTree = "<group>"; }; |
249 | + 598939481ED3CFD8005DA462 /* UserEditViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserEditViewController.swift; sourceTree = "<group>"; }; | |
250 | + 5989394A1ED3CFF4005DA462 /* AppSettingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppSettingViewController.swift; sourceTree = "<group>"; }; | |
251 | + 5989394C1ED4016D005DA462 /* HistoryViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HistoryViewController.swift; sourceTree = "<group>"; }; | |
252 | + 5989394F1ED41C44005DA462 /* ChangePassWordViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChangePassWordViewController.swift; sourceTree = "<group>"; }; | |
242 | 253 | 598A0E121E51941300273AB8 /* NIMChatroom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIMChatroom.h; sourceTree = "<group>"; }; |
243 | 254 | 598A0E131E51941300273AB8 /* NIMChatroomEnterRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIMChatroomEnterRequest.h; sourceTree = "<group>"; }; |
244 | 255 | 598A0E141E51941300273AB8 /* NIMChatroomMember.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIMChatroomMember.h; sourceTree = "<group>"; }; |
... | ... | @@ -341,6 +352,7 @@ |
341 | 352 | 59AE3DF81ECE8A90003E2C62 /* pinyin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pinyin.h; sourceTree = "<group>"; }; |
342 | 353 | 59AE3DFA1ECECD7D003E2C62 /* LiveInforViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiveInforViewController.swift; sourceTree = "<group>"; }; |
343 | 354 | 59AE3DFC1ECED5B1003E2C62 /* MoivePlayerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoivePlayerViewController.swift; sourceTree = "<group>"; }; |
355 | + 59AE3DFE1ECFDAFD003E2C62 /* TVStationChannelViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TVStationChannelViewController.swift; sourceTree = "<group>"; }; | |
344 | 356 | 59BA13241E25CF2B00540DE0 /* AliyunPlayerSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AliyunPlayerSDK.framework; path = YouerLiveVideo/lib/AliyunPlayerSDK.framework; sourceTree = "<group>"; }; |
345 | 357 | 59BA132F1E25D1C000540DE0 /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = "<group>"; }; |
346 | 358 | 59BA13301E25D1C000540DE0 /* Reachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Reachability.m; sourceTree = "<group>"; }; |
... | ... | @@ -647,6 +659,8 @@ |
647 | 659 | 5904FC4A1ECA8B8C00E631FF /* TVStation.storyboard */, |
648 | 660 | 59C25B481ECAD643009FF276 /* MoreTVStationViewController.swift */, |
649 | 661 | 59C25B4A1ECAD84C009FF276 /* TVStationInforViewController.swift */, |
662 | + 59AE3DFE1ECFDAFD003E2C62 /* TVStationChannelViewController.swift */, | |
663 | + 595071021ED02C140056E078 /* ExcellentTVViewController.swift */, | |
650 | 664 | ); |
651 | 665 | path = TVStation; |
652 | 666 | sourceTree = "<group>"; |
... | ... | @@ -677,6 +691,14 @@ |
677 | 691 | path = lib/DanmakuLib; |
678 | 692 | sourceTree = "<group>"; |
679 | 693 | }; |
694 | + 5989394E1ED41C31005DA462 /* Setting */ = { | |
695 | + isa = PBXGroup; | |
696 | + children = ( | |
697 | + 5989394F1ED41C44005DA462 /* ChangePassWordViewController.swift */, | |
698 | + ); | |
699 | + path = Setting; | |
700 | + sourceTree = "<group>"; | |
701 | + }; | |
680 | 702 | 598A0E0F1E51941300273AB8 /* SDK */ = { |
681 | 703 | isa = PBXGroup; |
682 | 704 | children = ( |
... | ... | @@ -1189,6 +1211,10 @@ |
1189 | 1211 | children = ( |
1190 | 1212 | BFBB83D91ECC445D008B404B /* User.storyboard */, |
1191 | 1213 | BFBB83E21ECC445D008B404B /* UserViewController.swift */, |
1214 | + 598939481ED3CFD8005DA462 /* UserEditViewController.swift */, | |
1215 | + 5989394A1ED3CFF4005DA462 /* AppSettingViewController.swift */, | |
1216 | + 5989394C1ED4016D005DA462 /* HistoryViewController.swift */, | |
1217 | + 5989394E1ED41C31005DA462 /* Setting */, | |
1192 | 1218 | BFBB83DA1ECC445D008B404B /* UserCenter */, |
1193 | 1219 | ); |
1194 | 1220 | path = User; |
... | ... | @@ -1493,6 +1519,7 @@ |
1493 | 1519 | BF7B75991E305A6D0011D5C7 /* MJRefreshFooter.m in Sources */, |
1494 | 1520 | 59F801571DD2C7AE000A78B0 /* YouerLiveVideo.xcdatamodeld in Sources */, |
1495 | 1521 | BF7722F91ED3C3E900226D44 /* FilterView.swift in Sources */, |
1522 | + 595071031ED02C140056E078 /* ExcellentTVViewController.swift in Sources */, | |
1496 | 1523 | 59BA13311E25D1C000540DE0 /* Reachability.m in Sources */, |
1497 | 1524 | BFBB83EB1ECC445D008B404B /* UserViewController.swift in Sources */, |
1498 | 1525 | 5904FC4E1ECA8B8C00E631FF /* ResourceViewController.swift in Sources */, |
... | ... | @@ -1520,13 +1547,16 @@ |
1520 | 1547 | BF7B759C1E305A6D0011D5C7 /* MJRefreshAutoNormalFooter.m in Sources */, |
1521 | 1548 | 5904FC4F1ECA8B8C00E631FF /* SearchTVStationListViewController.swift in Sources */, |
1522 | 1549 | BFC076781E3445F3008BAC79 /* DownLoad.swift in Sources */, |
1550 | + 59AE3DFF1ECFDAFD003E2C62 /* TVStationChannelViewController.swift in Sources */, | |
1523 | 1551 | BF25DFE71DDAA36A003EC0C1 /* MultipartFormData.swift in Sources */, |
1552 | + 5989394D1ED4016D005DA462 /* HistoryViewController.swift in Sources */, | |
1524 | 1553 | BF25DFF71DDAA36A003EC0C1 /* MKAnnotationView+WebCache.m in Sources */, |
1525 | 1554 | BF25DFFB1DDAA36A003EC0C1 /* SDImageCacheConfig.m in Sources */, |
1526 | 1555 | 5904FC4D1ECA8B8C00E631FF /* MicroCourseViewController.swift in Sources */, |
1527 | 1556 | BFBB83E61ECC445D008B404B /* LoginViewController.swift in Sources */, |
1528 | 1557 | BF25DFE21DDAA36A003EC0C1 /* AFError.swift in Sources */, |
1529 | 1558 | BF25DFEF1DDAA36A003EC0C1 /* ServerTrustPolicy.swift in Sources */, |
1559 | + 598939491ED3CFD8005DA462 /* UserEditViewController.swift in Sources */, | |
1530 | 1560 | BF25E0061DDAA36A003EC0C1 /* UIImageView+HighlightedWebCache.m in Sources */, |
1531 | 1561 | BF25DFE41DDAA36A003EC0C1 /* DispatchQueue+Alamofire.swift in Sources */, |
1532 | 1562 | BF25DFE81DDAA36A003EC0C1 /* NetworkReachabilityManager.swift in Sources */, |
... | ... | @@ -1542,6 +1572,8 @@ |
1542 | 1572 | BF25DFF81DDAA36A003EC0C1 /* NSData+ImageContentType.m in Sources */, |
1543 | 1573 | BF25E0151DDAAF73003EC0C1 /* SVIndefiniteAnimatedView.m in Sources */, |
1544 | 1574 | BFF5F4921DD5B7CA00D33B89 /* SwiftyJSON.swift in Sources */, |
1575 | + 5989394B1ED3CFF4005DA462 /* AppSettingViewController.swift in Sources */, | |
1576 | + 598939501ED41C44005DA462 /* ChangePassWordViewController.swift in Sources */, | |
1545 | 1577 | BF682F1E1ECE8772007632CA /* MainHomeTableViewController.swift in Sources */, |
1546 | 1578 | BF7B75A91E305A6D0011D5C7 /* UIView+MJExtension.m in Sources */, |
1547 | 1579 | BF25DFEE1DDAA36A003EC0C1 /* Result.swift in Sources */, | ... | ... |
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.xcodeproj/xcuserdata/jun.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
... | ... | @@ -2,4 +2,22 @@ |
2 | 2 | <Bucket |
3 | 3 | type = "1" |
4 | 4 | version = "2.0"> |
5 | + <Breakpoints> | |
6 | + <BreakpointProxy | |
7 | + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> | |
8 | + <BreakpointContent | |
9 | + shouldBeEnabled = "Yes" | |
10 | + ignoreCount = "0" | |
11 | + continueAfterRunningActions = "No" | |
12 | + filePath = "YouerLiveVideo/controllers/User/UserCenter/RegisterViewController.swift" | |
13 | + timestampString = "516767766.610948" | |
14 | + startingColumnNumber = "9223372036854775807" | |
15 | + endingColumnNumber = "9223372036854775807" | |
16 | + startingLineNumber = "85" | |
17 | + endingLineNumber = "85" | |
18 | + landmarkName = "registerBtnAction(_:)" | |
19 | + landmarkType = "7"> | |
20 | + </BreakpointContent> | |
21 | + </BreakpointProxy> | |
22 | + </Breakpoints> | |
5 | 23 | </Bucket> | ... | ... |
YouerLiveVideo/YouerLiveVideo/Assets.xcassets/arrow.imageset/Contents.json
0 → 100644
... | ... | @@ -0,0 +1,21 @@ |
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "idiom" : "universal", | |
5 | + "scale" : "1x" | |
6 | + }, | |
7 | + { | |
8 | + "idiom" : "universal", | |
9 | + "filename" : "收拢.png", | |
10 | + "scale" : "2x" | |
11 | + }, | |
12 | + { | |
13 | + "idiom" : "universal", | |
14 | + "scale" : "3x" | |
15 | + } | |
16 | + ], | |
17 | + "info" : { | |
18 | + "version" : 1, | |
19 | + "author" : "xcode" | |
20 | + } | |
21 | +} | |
0 | 22 | \ No newline at end of file | ... | ... |
3.05 KB
YouerLiveVideo/YouerLiveVideo/Base.lproj/Main.storyboard
1 | -<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
2 | -<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11762" systemVersion="15G1217" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="fhe-aI-EYq"> | |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11762" systemVersion="16A323" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="fhe-aI-EYq"> | |
3 | 3 | <device id="retina4_7" orientation="portrait"> |
4 | 4 | <adaptation id="fullscreen"/> |
5 | 5 | </device> |
... | ... | @@ -823,13 +823,124 @@ |
823 | 823 | <view key="view" contentMode="scaleToFill" id="gTL-Bi-K7K"> |
824 | 824 | <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> |
825 | 825 | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
826 | - <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
826 | + <subviews> | |
827 | + <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="CFz-Ro-N17"> | |
828 | + <rect key="frame" x="0.0" y="184" width="375" height="434"/> | |
829 | + <color key="backgroundColor" red="0.89713114500000002" green="0.89431768659999999" blue="0.90413767099999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
830 | + <prototypes> | |
831 | + <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="cell" id="dJF-O6-zOW" customClass="UserCenterHistoryCell" customModule="YouerLiveVideo" customModuleProvider="target"> | |
832 | + <rect key="frame" x="0.0" y="28" width="375" height="44"/> | |
833 | + <autoresizingMask key="autoresizingMask"/> | |
834 | + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="dJF-O6-zOW" id="3wg-qZ-Ccm"> | |
835 | + <rect key="frame" x="0.0" y="0.0" width="375" height="44"/> | |
836 | + <autoresizingMask key="autoresizingMask"/> | |
837 | + <subviews> | |
838 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Rfw-U6-vsh"> | |
839 | + <rect key="frame" x="40" y="11" width="42" height="21"/> | |
840 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
841 | + <nil key="textColor"/> | |
842 | + <nil key="highlightedColor"/> | |
843 | + </label> | |
844 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZcI-ei-CRK"> | |
845 | + <rect key="frame" x="40" y="43" width="319" height="1"/> | |
846 | + <color key="backgroundColor" red="0.89713114500000002" green="0.89431768659999999" blue="0.90413767099999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
847 | + <constraints> | |
848 | + <constraint firstAttribute="height" constant="1" id="x7b-Er-eeL"/> | |
849 | + </constraints> | |
850 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
851 | + <nil key="textColor"/> | |
852 | + <nil key="highlightedColor"/> | |
853 | + </label> | |
854 | + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="arrow" translatesAutoresizingMaskIntoConstraints="NO" id="95T-hp-hYn"> | |
855 | + <rect key="frame" x="350" y="14.5" width="9" height="15"/> | |
856 | + <constraints> | |
857 | + <constraint firstAttribute="width" secondItem="95T-hp-hYn" secondAttribute="height" multiplier="3:5" id="DmD-vc-Zm5"/> | |
858 | + <constraint firstAttribute="height" constant="15" id="N6u-lf-nHQ"/> | |
859 | + </constraints> | |
860 | + </imageView> | |
861 | + </subviews> | |
862 | + <constraints> | |
863 | + <constraint firstItem="ZcI-ei-CRK" firstAttribute="leading" secondItem="Rfw-U6-vsh" secondAttribute="leading" id="Nzi-ts-Hez"/> | |
864 | + <constraint firstAttribute="trailing" secondItem="ZcI-ei-CRK" secondAttribute="trailing" constant="16" id="d70-H8-SxF"/> | |
865 | + <constraint firstItem="95T-hp-hYn" firstAttribute="centerY" secondItem="3wg-qZ-Ccm" secondAttribute="centerY" id="reE-Cq-jwx"/> | |
866 | + <constraint firstItem="Rfw-U6-vsh" firstAttribute="leading" secondItem="3wg-qZ-Ccm" secondAttribute="leading" constant="40" id="sXN-8Z-QZq"/> | |
867 | + <constraint firstAttribute="trailing" secondItem="95T-hp-hYn" secondAttribute="trailing" constant="16" id="wJE-Ch-hxD"/> | |
868 | + <constraint firstItem="Rfw-U6-vsh" firstAttribute="centerY" secondItem="3wg-qZ-Ccm" secondAttribute="centerY" id="z32-br-U2n"/> | |
869 | + <constraint firstAttribute="bottom" secondItem="ZcI-ei-CRK" secondAttribute="bottom" id="zAy-lk-L8V"/> | |
870 | + </constraints> | |
871 | + </tableViewCellContentView> | |
872 | + <connections> | |
873 | + <outlet property="titleName" destination="Rfw-U6-vsh" id="Dkz-aT-h6h"/> | |
874 | + </connections> | |
875 | + </tableViewCell> | |
876 | + </prototypes> | |
877 | + <connections> | |
878 | + <outlet property="dataSource" destination="BZx-0y-T5Q" id="UvW-WJ-LpD"/> | |
879 | + <outlet property="delegate" destination="BZx-0y-T5Q" id="r0G-v1-ycw"/> | |
880 | + </connections> | |
881 | + </tableView> | |
882 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bvl-OP-Mho"> | |
883 | + <rect key="frame" x="0.0" y="79" width="375" height="90"/> | |
884 | + <subviews> | |
885 | + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="defphoto.png" translatesAutoresizingMaskIntoConstraints="NO" id="brI-5l-hmz"> | |
886 | + <rect key="frame" x="16" y="20" width="47" height="50"/> | |
887 | + <constraints> | |
888 | + <constraint firstAttribute="height" constant="50" id="VpN-jf-Kgx"/> | |
889 | + <constraint firstAttribute="width" secondItem="brI-5l-hmz" secondAttribute="height" multiplier="17:18" id="lia-o4-ohd"/> | |
890 | + </constraints> | |
891 | + </imageView> | |
892 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Nqw-kl-w72"> | |
893 | + <rect key="frame" x="79" y="35" width="42" height="21"/> | |
894 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
895 | + <nil key="textColor"/> | |
896 | + <nil key="highlightedColor"/> | |
897 | + </label> | |
898 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yK0-QJ-bRM"> | |
899 | + <rect key="frame" x="337" y="30" width="30" height="30"/> | |
900 | + <constraints> | |
901 | + <constraint firstAttribute="width" secondItem="yK0-QJ-bRM" secondAttribute="height" multiplier="1:1" id="3YU-P4-ctC"/> | |
902 | + <constraint firstAttribute="height" constant="30" id="HhD-eg-tVW"/> | |
903 | + </constraints> | |
904 | + <state key="normal" image="arrow"/> | |
905 | + <connections> | |
906 | + <action selector="userEditClcik:" destination="BZx-0y-T5Q" eventType="touchUpInside" id="KOe-u4-Y7x"/> | |
907 | + </connections> | |
908 | + </button> | |
909 | + </subviews> | |
910 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
911 | + <constraints> | |
912 | + <constraint firstItem="yK0-QJ-bRM" firstAttribute="centerY" secondItem="bvl-OP-Mho" secondAttribute="centerY" id="8rD-kC-wG0"/> | |
913 | + <constraint firstAttribute="height" constant="90" id="OgG-Ww-2w0"/> | |
914 | + <constraint firstItem="brI-5l-hmz" firstAttribute="centerY" secondItem="bvl-OP-Mho" secondAttribute="centerY" id="YFV-yt-DAA"/> | |
915 | + <constraint firstAttribute="trailing" secondItem="yK0-QJ-bRM" secondAttribute="trailing" constant="8" id="hGo-7T-muV"/> | |
916 | + <constraint firstItem="Nqw-kl-w72" firstAttribute="centerY" secondItem="bvl-OP-Mho" secondAttribute="centerY" id="lw6-Jl-KC5"/> | |
917 | + <constraint firstItem="Nqw-kl-w72" firstAttribute="leading" secondItem="brI-5l-hmz" secondAttribute="trailing" constant="16" id="unR-ks-0nT"/> | |
918 | + <constraint firstItem="yK0-QJ-bRM" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="Nqw-kl-w72" secondAttribute="trailing" constant="8" id="vhw-0q-WYU"/> | |
919 | + <constraint firstItem="brI-5l-hmz" firstAttribute="leading" secondItem="bvl-OP-Mho" secondAttribute="leading" constant="16" id="xXW-xf-5Ra"/> | |
920 | + </constraints> | |
921 | + </view> | |
922 | + </subviews> | |
923 | + <color key="backgroundColor" red="0.89713114500000002" green="0.89431768659999999" blue="0.90413767099999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
924 | + <constraints> | |
925 | + <constraint firstAttribute="trailing" secondItem="bvl-OP-Mho" secondAttribute="trailing" id="98d-su-BYc"/> | |
926 | + <constraint firstItem="CFz-Ro-N17" firstAttribute="top" secondItem="bvl-OP-Mho" secondAttribute="bottom" constant="15" id="Bio-5s-xo1"/> | |
927 | + <constraint firstItem="bvl-OP-Mho" firstAttribute="leading" secondItem="gTL-Bi-K7K" secondAttribute="leading" id="FNR-Mg-Bk7"/> | |
928 | + <constraint firstAttribute="trailing" secondItem="CFz-Ro-N17" secondAttribute="trailing" id="G3m-0A-QJE"/> | |
929 | + <constraint firstItem="04n-Q1-RCL" firstAttribute="top" secondItem="CFz-Ro-N17" secondAttribute="bottom" id="L1W-bl-RTD"/> | |
930 | + <constraint firstItem="CFz-Ro-N17" firstAttribute="leading" secondItem="gTL-Bi-K7K" secondAttribute="leading" id="NYQ-VV-dtX"/> | |
931 | + <constraint firstItem="bvl-OP-Mho" firstAttribute="top" secondItem="Kng-4W-y6v" secondAttribute="bottom" constant="15" id="Ylp-Rg-JJV"/> | |
932 | + </constraints> | |
827 | 933 | </view> |
828 | 934 | <navigationItem key="navigationItem" title="用户" id="KBV-ql-Taf"/> |
935 | + <connections> | |
936 | + <outlet property="historyList" destination="CFz-Ro-N17" id="XkV-zV-Rj9"/> | |
937 | + <outlet property="userName" destination="Nqw-kl-w72" id="3HY-fb-c91"/> | |
938 | + <outlet property="userPhoto" destination="brI-5l-hmz" id="XG3-nG-OZG"/> | |
939 | + </connections> | |
829 | 940 | </viewController> |
830 | 941 | <placeholder placeholderIdentifier="IBFirstResponder" id="yJD-YG-4bQ" userLabel="First Responder" sceneMemberID="firstResponder"/> |
831 | 942 | </objects> |
832 | - <point key="canvasLocation" x="1206" y="2113"/> | |
943 | + <point key="canvasLocation" x="1205.5999999999999" y="2112.5937031484259"/> | |
833 | 944 | </scene> |
834 | 945 | <!--用户--> |
835 | 946 | <scene sceneID="LVY-SG-ceP"> |
... | ... | @@ -1182,7 +1293,7 @@ |
1182 | 1293 | <rect key="frame" x="0.0" y="28" width="375" height="178"/> |
1183 | 1294 | <autoresizingMask key="autoresizingMask"/> |
1184 | 1295 | <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="8PR-k0-hwX" id="Bb0-oI-ccB"> |
1185 | - <rect key="frame" x="0.0" y="0.0" width="375" height="178"/> | |
1296 | + <rect key="frame" x="0.0" y="0.0" width="375" height="177"/> | |
1186 | 1297 | <autoresizingMask key="autoresizingMask"/> |
1187 | 1298 | <subviews> |
1188 | 1299 | <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="m0I-jk-Iru"> |
... | ... | @@ -1518,7 +1629,7 @@ |
1518 | 1629 | </scene> |
1519 | 1630 | </scenes> |
1520 | 1631 | <resources> |
1521 | - <image name="arrow" width="33" height="33"/> | |
1632 | + <image name="arrow" width="7" height="12"/> | |
1522 | 1633 | <image name="default" width="375" height="167"/> |
1523 | 1634 | <image name="default_userRoom" width="19" height="17"/> |
1524 | 1635 | <image name="defphoto.png" width="256" height="256"/> | ... | ... |
YouerLiveVideo/YouerLiveVideo/controllers/TVStation/ExcellentTVViewController.swift
0 → 100644
... | ... | @@ -0,0 +1,318 @@ |
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 | +import AVKit | |
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 | + classSelectBtn = 0 | |
107 | + for i in 0..<TVStationClasses.count{ | |
108 | + let item = AllTitleView.viewWithTag(200+i) as! UIButton | |
109 | + item.backgroundColor = UIColor.white | |
110 | + item.setTitleColor(UIColor.black, for: .normal) | |
111 | + TVStationClass.viewWithTag(2000+i)?.isHidden = true | |
112 | + } | |
113 | + btn.setTitleColor(UIColor.white, for: .normal) | |
114 | + btn.backgroundColor = UIColor.blue | |
115 | + TVStationClass.viewWithTag(2000+btn.tag%10)?.isHidden = false | |
116 | + collectionView.reloadData() | |
117 | + } | |
118 | + | |
119 | + func TVStationClassBtnClick(btn:UIButton){ | |
120 | + classSelectBtn = btn.tag%10 | |
121 | + let index = btn.tag%1000/100 | |
122 | + isForbidScrollDelegate = true | |
123 | + collectionView.scrollToItem(at: IndexPath(item: classSelectBtn, section: 0), at: .centeredHorizontally, animated: false) | |
124 | + for i in 0..<TVStationClasses[index].ch.count{ | |
125 | + let item = TVStationClass.viewWithTag(2000+titleSelectBtn)!.viewWithTag(1000+100*index+i) as! UIButton | |
126 | + item.backgroundColor = UIColor.white | |
127 | + item.setTitleColor(UIColor.black, for: .normal) | |
128 | + } | |
129 | + btn.setTitleColor(UIColor.white, for: .normal) | |
130 | + btn.backgroundColor = UIColor.blue | |
131 | + } | |
132 | + | |
133 | + /* | |
134 | + // MARK: - Navigation | |
135 | + | |
136 | + // In a storyboard-based application, you will often want to do a little preparation before navigation | |
137 | + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | |
138 | + // Get the new view controller using segue.destinationViewController. | |
139 | + // Pass the selected object to the new view controller. | |
140 | + } | |
141 | + */ | |
142 | + | |
143 | +} | |
144 | + | |
145 | + | |
146 | +//下方的所有电视节目所在的collcetionView | |
147 | +extension ExcellentTVViewController:UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{ | |
148 | + func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { | |
149 | + startOffsetX = scrollView.contentOffset.x | |
150 | + isForbidScrollDelegate = false | |
151 | + } | |
152 | + | |
153 | + func scrollViewDidScroll(_ scrollView: UIScrollView) { | |
154 | + if isForbidScrollDelegate { return } | |
155 | + NSLog("\(scrollView.contentOffset.x)") | |
156 | + var btn:UIButton! | |
157 | + var num:CGFloat! | |
158 | + let btnIndex = scrollView.contentOffset.x/getScreenWidth() | |
159 | + let view = TVStationClass.viewWithTag(2000+titleSelectBtn)! as! UIScrollView | |
160 | + if view.contentSize.width > getScreenWidth(){ | |
161 | + if scrollView.contentOffset.x > startOffsetX{ | |
162 | + if scrollView.contentOffset.x - startOffsetX == getScreenWidth(){ | |
163 | + num = btnIndex | |
164 | + }else{ | |
165 | + num = btnIndex+1 | |
166 | + } | |
167 | + if Int(num) >= TVStationClasses[titleSelectBtn].ch.count { | |
168 | + return | |
169 | + } | |
170 | + btn = view.viewWithTag(1000+100*titleSelectBtn+Int(num))! as! UIButton | |
171 | + let TVStationContentOffset = btn.frame.origin.x+btn.frame.width/2 | |
172 | + if TVStationContentOffset < view.contentSize.width-getScreenWidth()/2 && TVStationContentOffset >= getScreenWidth()/2{ | |
173 | + view.contentOffset.x = TVStationContentOffset - getScreenWidth()/2 | |
174 | + } | |
175 | + if TVStationContentOffset >= view.contentSize.width-getScreenWidth()/2{ | |
176 | + view.contentOffset.x = view.contentSize.width-getScreenWidth() | |
177 | + } | |
178 | + } | |
179 | + else{ | |
180 | + let num = btnIndex | |
181 | + if num < 0{ | |
182 | + return | |
183 | + } | |
184 | + btn = view.viewWithTag(1000+100*titleSelectBtn+Int(num))! as! UIButton | |
185 | + let TVStationContentOffset = btn.frame.origin.x+btn.frame.width/2 | |
186 | + if TVStationContentOffset < view.contentSize.width-getScreenWidth()/2 && TVStationContentOffset >= getScreenWidth()/2{ | |
187 | + view.contentOffset.x = TVStationContentOffset-getScreenWidth()/2 | |
188 | + } | |
189 | + if TVStationContentOffset < getScreenWidth()/2{ | |
190 | + view.contentOffset.x = 0 | |
191 | + } | |
192 | + } | |
193 | + }else{ | |
194 | + btn = view.viewWithTag(1000+100*titleSelectBtn+Int(btnIndex))! as! UIButton | |
195 | + } | |
196 | + for i in 0..<TVStationClasses[titleSelectBtn].ch.count{ | |
197 | + let item = view.viewWithTag(i+1000+100*titleSelectBtn) as! UIButton | |
198 | + item.backgroundColor = UIColor.white | |
199 | + item.setTitleColor(UIColor.black, for: .normal) | |
200 | + } | |
201 | + btn.setTitleColor(UIColor.white, for: .normal) | |
202 | + btn.backgroundColor = UIColor.blue | |
203 | + } | |
204 | + | |
205 | + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { | |
206 | + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ExcellentTVViewCell | |
207 | + cell.superNacigation = self.navigationController | |
208 | + AppDelegate.instance().httpServer.postExcellentProgram(parameters: ["f_TelevisionId":TVStationClasses[titleSelectBtn].ch[classSelectBtn].id as AnyObject,"pageIndex":1 as AnyObject]) { (str, error) in | |
209 | + httpJsonResule(jsonString: str, error: error, successHandler: { (json) in | |
210 | + for item in json.contentData()["resultData"].arrayValue{ | |
211 | + cell.datatSet.append(TVStationSubject(json: item)) | |
212 | + } | |
213 | + cell.inforCollectionView.reloadData() | |
214 | + }, failHandler: { (error) in | |
215 | + | |
216 | + }) | |
217 | + } | |
218 | + return cell | |
219 | + } | |
220 | + | |
221 | + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { | |
222 | + if TVStationClasses.count > 0{ | |
223 | + return TVStationClasses[titleSelectBtn].ch.count | |
224 | + } | |
225 | + return 0 | |
226 | + } | |
227 | + | |
228 | + | |
229 | + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { | |
230 | + return CGSize(width: getScreenWidth(), height: collectionView.frame.size.height) | |
231 | + | |
232 | + } | |
233 | +} | |
234 | + | |
235 | +//单项选项中的CollectionView | |
236 | +class ExcellentTVViewCell: UICollectionViewCell,UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{ | |
237 | + var f_TelevisionId:String! | |
238 | + @IBOutlet weak var inforCollectionView: UICollectionView! | |
239 | + var datatSet:[TVStationSubject] = [] | |
240 | + var superNacigation:UINavigationController! | |
241 | + | |
242 | + | |
243 | + override func awakeFromNib() { | |
244 | + super.awakeFromNib() | |
245 | + } | |
246 | + | |
247 | + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { | |
248 | + | |
249 | + } | |
250 | + | |
251 | + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { | |
252 | + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell1", for: indexPath) as! ExcellentTVInforViewCell | |
253 | + let item = datatSet[indexPath.row] | |
254 | + cell.model = item | |
255 | + cell.superNavigation = superNacigation | |
256 | + return cell | |
257 | + } | |
258 | + | |
259 | + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { | |
260 | + return datatSet.count | |
261 | + } | |
262 | + | |
263 | + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { | |
264 | + return CGSize(width: (getScreenWidth()-30)/2, height: 200) | |
265 | + } | |
266 | + | |
267 | + | |
268 | + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { | |
269 | + return UIEdgeInsetsMake(10, 10, 10, 10) | |
270 | + } | |
271 | + | |
272 | +} | |
273 | + | |
274 | +class ExcellentTVInforViewCell: UICollectionViewCell{ | |
275 | + | |
276 | + @IBOutlet weak var tvStationLogo: UIImageView! | |
277 | + @IBOutlet weak var subjectType: UILabel! | |
278 | + @IBOutlet weak var playCount: UILabel! | |
279 | + var superNavigation:UINavigationController! | |
280 | + var model:TVStationSubject? { | |
281 | + didSet{ | |
282 | + self.tvStationLogo.sd_setImage(with: URL(string: model!.f_Img), placeholderImage: #imageLiteral(resourceName: "placeholder")) | |
283 | + self.playCount.text = "播放次数:" + "\(model!.f_Pv!)" | |
284 | + self.subjectType.text = model!.f_Title | |
285 | + } | |
286 | + | |
287 | + } | |
288 | + | |
289 | + @IBAction func playBtnClick(_ sender: UIButton) { | |
290 | + AppDelegate.instance().httpServer.addHistoryView(parameters: ["f_ViewType":self.model!.f_ResourceType as AnyObject,"f_ViewId":self.model!.f_Id as AnyObject,"f_ViewName":self.model!.f_Title as AnyObject]) { (str, error) in | |
291 | + if JSON.fromString(jsonString: str)?["status"].intValue == 1{ | |
292 | + | |
293 | + } | |
294 | + } | |
295 | + let url = URL(string:self.model!.f_ResourceUrl) | |
296 | + let player = AVPlayerViewController() | |
297 | + player.player = AVPlayer(url: url!) | |
298 | + player.videoGravity = AVLayerVideoGravityResizeAspect | |
299 | + superNavigation.present(player, animated: true, completion: nil) | |
300 | + } | |
301 | +} | |
302 | + | |
303 | +class TVSubjectInfor{ | |
304 | + var id:String! | |
305 | + var name:String! | |
306 | + var text:String! | |
307 | + var open:Bool! | |
308 | + var ch:[TVSubjectInfor]=[] | |
309 | + init(json:JSON){ | |
310 | + id = json["id"].stringValue | |
311 | + name = json["name"].stringValue | |
312 | + text = json["text"].stringValue | |
313 | + name = json["name"].stringValue | |
314 | + for item in json["children"].arrayValue { | |
315 | + ch.append(TVSubjectInfor(json: item)) | |
316 | + } | |
317 | + } | |
318 | +} | ... | ... |
YouerLiveVideo/YouerLiveVideo/controllers/TVStation/TVStation.storyboard
... | ... | @@ -85,6 +85,189 @@ |
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="262"/> | |
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="262"/> | |
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="262"/> | |
150 | + <autoresizingMask key="autoresizingMask"/> | |
151 | + <subviews> | |
152 | + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="fcz-OQ-94m"> | |
153 | + <rect key="frame" x="0.0" y="0.0" width="170" height="134.5"/> | |
154 | + <constraints> | |
155 | + <constraint firstAttribute="width" secondItem="fcz-OQ-94m" secondAttribute="height" multiplier="81:64" id="BM3-Lc-rwo"/> | |
156 | + </constraints> | |
157 | + </imageView> | |
158 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="v40-tv-azp"> | |
159 | + <rect key="frame" x="0.0" y="134.5" width="170" height="127.5"/> | |
160 | + <subviews> | |
161 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VsV-Bf-hCY"> | |
162 | + <rect key="frame" x="8" y="8" width="42" height="20.5"/> | |
163 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
164 | + <nil key="textColor"/> | |
165 | + <nil key="highlightedColor"/> | |
166 | + </label> | |
167 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9MF-Zt-fqc"> | |
168 | + <rect key="frame" x="8" y="98.5" width="42" height="21"/> | |
169 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
170 | + <nil key="textColor"/> | |
171 | + <nil key="highlightedColor"/> | |
172 | + </label> | |
173 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="R2I-qS-V0B"> | |
174 | + <rect key="frame" x="116" y="49" width="46" height="30"/> | |
175 | + <state key="normal" title="Button"/> | |
176 | + <connections> | |
177 | + <action selector="playBtnClick:" destination="E1U-aK-U8z" eventType="touchUpInside" id="uuk-j5-fzl"/> | |
178 | + </connections> | |
179 | + </button> | |
180 | + </subviews> | |
181 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
182 | + <constraints> | |
183 | + <constraint firstItem="9MF-Zt-fqc" firstAttribute="leading" secondItem="v40-tv-azp" secondAttribute="leading" constant="8" id="2Kr-Vk-cl8"/> | |
184 | + <constraint firstAttribute="bottom" secondItem="9MF-Zt-fqc" secondAttribute="bottom" constant="8" id="Per-3M-nJ4"/> | |
185 | + <constraint firstAttribute="trailing" secondItem="R2I-qS-V0B" secondAttribute="trailing" constant="8" id="asC-Mg-7ac"/> | |
186 | + <constraint firstItem="VsV-Bf-hCY" firstAttribute="leading" secondItem="v40-tv-azp" secondAttribute="leading" constant="8" id="trW-Yh-6Yt"/> | |
187 | + <constraint firstItem="R2I-qS-V0B" firstAttribute="centerY" secondItem="v40-tv-azp" secondAttribute="centerY" id="ybv-GH-Lkg"/> | |
188 | + <constraint firstItem="VsV-Bf-hCY" firstAttribute="top" secondItem="v40-tv-azp" secondAttribute="top" constant="8" id="zLU-CS-C8S"/> | |
189 | + </constraints> | |
190 | + </view> | |
191 | + </subviews> | |
192 | + </view> | |
193 | + <constraints> | |
194 | + <constraint firstItem="v40-tv-azp" firstAttribute="top" secondItem="fcz-OQ-94m" secondAttribute="bottom" id="IHm-KI-Mgh"/> | |
195 | + <constraint firstAttribute="trailing" secondItem="fcz-OQ-94m" secondAttribute="trailing" id="YNR-ad-G4t"/> | |
196 | + <constraint firstItem="fcz-OQ-94m" firstAttribute="leading" secondItem="E1U-aK-U8z" secondAttribute="leading" id="dFl-og-rZ7"/> | |
197 | + <constraint firstAttribute="trailing" secondItem="v40-tv-azp" secondAttribute="trailing" id="gRV-Qv-d29"/> | |
198 | + <constraint firstItem="fcz-OQ-94m" firstAttribute="top" secondItem="E1U-aK-U8z" secondAttribute="top" id="roE-zo-bkK"/> | |
199 | + <constraint firstAttribute="bottom" secondItem="v40-tv-azp" secondAttribute="bottom" id="sT9-jY-pdA"/> | |
200 | + <constraint firstItem="v40-tv-azp" firstAttribute="leading" secondItem="E1U-aK-U8z" secondAttribute="leading" id="tdS-jP-AdZ"/> | |
201 | + </constraints> | |
202 | + <connections> | |
203 | + <outlet property="playCount" destination="9MF-Zt-fqc" id="iHW-0H-dJW"/> | |
204 | + <outlet property="subjectType" destination="VsV-Bf-hCY" id="jBF-p7-4zm"/> | |
205 | + <outlet property="tvStationLogo" destination="fcz-OQ-94m" id="aJ8-f4-qoh"/> | |
206 | + </connections> | |
207 | + </collectionViewCell> | |
208 | + </cells> | |
209 | + <connections> | |
210 | + <outlet property="dataSource" destination="fGR-8c-fGE" id="u36-wA-CKH"/> | |
211 | + <outlet property="delegate" destination="fGR-8c-fGE" id="IBZ-Vo-3of"/> | |
212 | + </connections> | |
213 | + </collectionView> | |
214 | + </subviews> | |
215 | + </view> | |
216 | + <constraints> | |
217 | + <constraint firstItem="r6p-zi-d85" firstAttribute="leading" secondItem="fGR-8c-fGE" secondAttribute="leading" id="XnS-Y3-JXe"/> | |
218 | + <constraint firstAttribute="bottom" secondItem="r6p-zi-d85" secondAttribute="bottom" id="Zyh-g8-MW7"/> | |
219 | + <constraint firstAttribute="trailing" secondItem="r6p-zi-d85" secondAttribute="trailing" id="dK8-ok-Snv"/> | |
220 | + <constraint firstItem="r6p-zi-d85" firstAttribute="top" secondItem="fGR-8c-fGE" secondAttribute="top" id="iDI-iF-maj"/> | |
221 | + </constraints> | |
222 | + <connections> | |
223 | + <outlet property="inforCollectionView" destination="r6p-zi-d85" id="XvH-nv-OHv"/> | |
224 | + </connections> | |
225 | + </collectionViewCell> | |
226 | + </cells> | |
227 | + <connections> | |
228 | + <outlet property="dataSource" destination="b8W-aX-LnV" id="CCT-nv-YZq"/> | |
229 | + <outlet property="delegate" destination="b8W-aX-LnV" id="1Cr-xP-bzP"/> | |
230 | + </connections> | |
231 | + </collectionView> | |
232 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="IdI-17-KVq"> | |
233 | + <rect key="frame" x="0.0" y="221" width="375" height="51"/> | |
234 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | |
235 | + <constraints> | |
236 | + <constraint firstAttribute="height" constant="51" id="unU-1q-P1u"/> | |
237 | + </constraints> | |
238 | + </view> | |
239 | + </subviews> | |
240 | + <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/> | |
241 | + <constraints> | |
242 | + <constraint firstItem="zGg-HQ-hQ6" firstAttribute="leading" secondItem="Gv8-KK-Axo" secondAttribute="leading" id="08r-BK-AYj"/> | |
243 | + <constraint firstAttribute="trailing" secondItem="IdI-17-KVq" secondAttribute="trailing" id="5vb-9d-uXn"/> | |
244 | + <constraint firstItem="IdI-17-KVq" firstAttribute="top" secondItem="Mhl-sd-KB9" secondAttribute="bottom" id="7rQ-6N-24t"/> | |
245 | + <constraint firstAttribute="trailing" secondItem="98q-Zu-qPj" secondAttribute="trailing" id="9fs-x7-fIS"/> | |
246 | + <constraint firstItem="IdI-17-KVq" firstAttribute="leading" secondItem="Gv8-KK-Axo" secondAttribute="leading" id="F2C-pE-qYZ"/> | |
247 | + <constraint firstItem="zGg-HQ-hQ6" firstAttribute="top" secondItem="4i9-Tx-rg9" secondAttribute="bottom" id="J68-Pn-0Bu"/> | |
248 | + <constraint firstAttribute="trailing" secondItem="Mhl-sd-KB9" secondAttribute="trailing" id="Lt7-n0-tWt"/> | |
249 | + <constraint firstItem="lho-df-W25" firstAttribute="top" secondItem="98q-Zu-qPj" secondAttribute="bottom" id="MIT-SW-TOS"/> | |
250 | + <constraint firstItem="89T-Tx-OBE" firstAttribute="leading" secondItem="Gv8-KK-Axo" secondAttribute="leading" id="NED-o8-Gz5"/> | |
251 | + <constraint firstItem="89T-Tx-OBE" firstAttribute="top" secondItem="IdI-17-KVq" secondAttribute="bottom" id="Pc7-DI-fyn"/> | |
252 | + <constraint firstAttribute="trailing" secondItem="zGg-HQ-hQ6" secondAttribute="trailing" id="WPf-27-9bg"/> | |
253 | + <constraint firstItem="Mhl-sd-KB9" firstAttribute="leading" secondItem="Gv8-KK-Axo" secondAttribute="leading" id="anA-G9-sCy"/> | |
254 | + <constraint firstItem="98q-Zu-qPj" firstAttribute="leading" secondItem="Gv8-KK-Axo" secondAttribute="leading" id="coP-ED-djd"/> | |
255 | + <constraint firstAttribute="trailing" secondItem="89T-Tx-OBE" secondAttribute="trailing" id="d3u-hS-Fv0"/> | |
256 | + <constraint firstItem="98q-Zu-qPj" firstAttribute="top" secondItem="89T-Tx-OBE" secondAttribute="bottom" id="vDI-ni-7Iu"/> | |
257 | + <constraint firstItem="Mhl-sd-KB9" firstAttribute="top" secondItem="zGg-HQ-hQ6" secondAttribute="bottom" id="zJx-8Q-hdK"/> | |
258 | + </constraints> | |
259 | + </view> | |
260 | + <connections> | |
261 | + <outlet property="AllTitleView" destination="IdI-17-KVq" id="q4z-D9-yZi"/> | |
262 | + <outlet property="TVStationClass" destination="89T-Tx-OBE" id="ru3-Dy-X1Z"/> | |
263 | + <outlet property="collectionView" destination="98q-Zu-qPj" id="0J9-bV-tnM"/> | |
264 | + <outlet property="lunboView" destination="Mhl-sd-KB9" id="R0Q-io-hip"/> | |
265 | + </connections> | |
266 | + </viewController> | |
267 | + <placeholder placeholderIdentifier="IBFirstResponder" id="KWc-cP-YUd" userLabel="First Responder" sceneMemberID="firstResponder"/> | |
268 | + </objects> | |
269 | + <point key="canvasLocation" x="-572" y="785.75712143928047"/> | |
270 | + </scene> | |
88 | 271 | <!--SearchTV Station List View Controller--> |
89 | 272 | <scene sceneID="FC9-ii-4gV"> |
90 | 273 | <objects> |
... | ... | @@ -408,5 +591,127 @@ |
408 | 591 | </objects> |
409 | 592 | <point key="canvasLocation" x="799.20000000000005" y="129.98500749625188"/> |
410 | 593 | </scene> |
594 | + <!--Station Channel View Controller--> | |
595 | + <scene sceneID="9jT-qD-wyU"> | |
596 | + <objects> | |
597 | + <viewController storyboardIdentifier="TVStationChannelViewControllerVC" id="CLL-z0-29E" customClass="TVStationChannelViewController" customModule="YouerLiveVideo" customModuleProvider="target" sceneMemberID="viewController"> | |
598 | + <layoutGuides> | |
599 | + <viewControllerLayoutGuide type="top" id="Lr1-Rk-hqR"/> | |
600 | + <viewControllerLayoutGuide type="bottom" id="PET-wp-1k0"/> | |
601 | + </layoutGuides> | |
602 | + <view key="view" contentMode="scaleToFill" id="1fP-l5-4K3"> | |
603 | + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | |
604 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | |
605 | + <subviews> | |
606 | + <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="EVv-oR-qoV"> | |
607 | + <rect key="frame" x="0.0" y="20" width="375" height="647"/> | |
608 | + <color key="backgroundColor" red="0.89713114500000002" green="0.89431768659999999" blue="0.90413767099999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
609 | + <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="nT1-EI-DzL"> | |
610 | + <size key="itemSize" width="160" height="176"/> | |
611 | + <size key="headerReferenceSize" width="50" height="50"/> | |
612 | + <size key="footerReferenceSize" width="0.0" height="0.0"/> | |
613 | + <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/> | |
614 | + </collectionViewFlowLayout> | |
615 | + <cells> | |
616 | + <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="cell" id="XS8-dM-fSF" customClass="TVStationChannelCell" customModule="YouerLiveVideo" customModuleProvider="target"> | |
617 | + <rect key="frame" x="0.0" y="50" width="160" height="176"/> | |
618 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | |
619 | + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> | |
620 | + <rect key="frame" x="0.0" y="0.0" width="160" height="176"/> | |
621 | + <autoresizingMask key="autoresizingMask"/> | |
622 | + <subviews> | |
623 | + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="1ZJ-ao-hBx"> | |
624 | + <rect key="frame" x="0.0" y="0.0" width="160" height="120"/> | |
625 | + <color key="backgroundColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="calibratedRGB"/> | |
626 | + </imageView> | |
627 | + <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"> | |
628 | + <rect key="frame" x="59" y="139" width="42" height="21"/> | |
629 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
630 | + <nil key="textColor"/> | |
631 | + <nil key="highlightedColor"/> | |
632 | + </label> | |
633 | + </subviews> | |
634 | + </view> | |
635 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | |
636 | + <constraints> | |
637 | + <constraint firstAttribute="bottom" secondItem="EE2-Y8-SP4" secondAttribute="bottom" constant="16" id="6w0-JP-ybD"/> | |
638 | + <constraint firstItem="1ZJ-ao-hBx" firstAttribute="leading" secondItem="XS8-dM-fSF" secondAttribute="leading" id="Fdm-sT-5np"/> | |
639 | + <constraint firstItem="1ZJ-ao-hBx" firstAttribute="top" secondItem="XS8-dM-fSF" secondAttribute="top" id="HmI-98-WDB"/> | |
640 | + <constraint firstItem="EE2-Y8-SP4" firstAttribute="top" secondItem="1ZJ-ao-hBx" secondAttribute="bottom" constant="19" id="KZ9-YD-2dJ"/> | |
641 | + <constraint firstItem="EE2-Y8-SP4" firstAttribute="centerX" secondItem="XS8-dM-fSF" secondAttribute="centerX" id="nFb-gE-ru0"/> | |
642 | + <constraint firstAttribute="trailing" secondItem="1ZJ-ao-hBx" secondAttribute="trailing" id="p1m-WJ-Z3K"/> | |
643 | + </constraints> | |
644 | + <connections> | |
645 | + <outlet property="tvStationLogo" destination="1ZJ-ao-hBx" id="1NC-ds-qqX"/> | |
646 | + <outlet property="tvStationName" destination="EE2-Y8-SP4" id="lSz-1S-YnW"/> | |
647 | + </connections> | |
648 | + </collectionViewCell> | |
649 | + </cells> | |
650 | + <collectionReusableView key="sectionHeaderView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="HeaderView" id="Jdh-dY-FAu" customClass="TVStationChannelHeaderView" customModule="YouerLiveVideo" customModuleProvider="target"> | |
651 | + <rect key="frame" x="0.0" y="0.0" width="375" height="50"/> | |
652 | + <autoresizingMask key="autoresizingMask"/> | |
653 | + <subviews> | |
654 | + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="8TH-3g-UsI"> | |
655 | + <rect key="frame" x="8" y="7" width="35" height="35"/> | |
656 | + <constraints> | |
657 | + <constraint firstAttribute="height" constant="35" id="5yj-bt-Jn8"/> | |
658 | + <constraint firstAttribute="width" secondItem="8TH-3g-UsI" secondAttribute="height" multiplier="1:1" id="Kxf-yE-A3T"/> | |
659 | + </constraints> | |
660 | + </imageView> | |
661 | + <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"> | |
662 | + <rect key="frame" x="51" y="14" width="42" height="21"/> | |
663 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
664 | + <nil key="textColor"/> | |
665 | + <nil key="highlightedColor"/> | |
666 | + </label> | |
667 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="HPj-Yv-YzO"> | |
668 | + <rect key="frame" x="337" y="10" width="30" height="30"/> | |
669 | + <constraints> | |
670 | + <constraint firstAttribute="height" constant="30" id="tPQ-hz-bM8"/> | |
671 | + <constraint firstAttribute="width" constant="30" id="weL-na-eER"/> | |
672 | + </constraints> | |
673 | + <state key="normal" image="arrow"/> | |
674 | + </button> | |
675 | + </subviews> | |
676 | + <constraints> | |
677 | + <constraint firstItem="yem-uG-4a8" firstAttribute="leading" secondItem="8TH-3g-UsI" secondAttribute="trailing" constant="8" id="3hn-Wo-NOT"/> | |
678 | + <constraint firstItem="HPj-Yv-YzO" firstAttribute="centerY" secondItem="Jdh-dY-FAu" secondAttribute="centerY" id="HS5-Sr-TvH"/> | |
679 | + <constraint firstAttribute="trailing" secondItem="HPj-Yv-YzO" secondAttribute="trailing" constant="8" id="Ih6-EB-p7N"/> | |
680 | + <constraint firstItem="yem-uG-4a8" firstAttribute="centerY" secondItem="Jdh-dY-FAu" secondAttribute="centerY" id="Xvl-o7-bO2"/> | |
681 | + <constraint firstItem="8TH-3g-UsI" firstAttribute="centerY" secondItem="Jdh-dY-FAu" secondAttribute="centerY" id="fy9-TI-eoE"/> | |
682 | + <constraint firstItem="HPj-Yv-YzO" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="yem-uG-4a8" secondAttribute="trailing" constant="8" id="k2d-sv-rfG"/> | |
683 | + <constraint firstItem="8TH-3g-UsI" firstAttribute="leading" secondItem="Jdh-dY-FAu" secondAttribute="leading" constant="8" id="wQg-ux-5gP"/> | |
684 | + </constraints> | |
685 | + <connections> | |
686 | + <outlet property="logo" destination="8TH-3g-UsI" id="3e0-Qr-HHs"/> | |
687 | + <outlet property="moreBtn" destination="HPj-Yv-YzO" id="CXg-Sc-E5B"/> | |
688 | + <outlet property="title" destination="yem-uG-4a8" id="jgP-c2-8rY"/> | |
689 | + </connections> | |
690 | + </collectionReusableView> | |
691 | + <connections> | |
692 | + <outlet property="dataSource" destination="CLL-z0-29E" id="maz-ws-hfl"/> | |
693 | + <outlet property="delegate" destination="CLL-z0-29E" id="EEF-Mt-3m2"/> | |
694 | + </connections> | |
695 | + </collectionView> | |
696 | + </subviews> | |
697 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
698 | + <constraints> | |
699 | + <constraint firstItem="PET-wp-1k0" firstAttribute="top" secondItem="EVv-oR-qoV" secondAttribute="bottom" id="E8l-rG-D5Z"/> | |
700 | + <constraint firstItem="EVv-oR-qoV" firstAttribute="leading" secondItem="1fP-l5-4K3" secondAttribute="leading" id="eWd-hq-hwR"/> | |
701 | + <constraint firstItem="EVv-oR-qoV" firstAttribute="top" secondItem="Lr1-Rk-hqR" secondAttribute="bottom" id="l0i-7E-YUv"/> | |
702 | + <constraint firstAttribute="trailing" secondItem="EVv-oR-qoV" secondAttribute="trailing" id="xf3-fQ-aK5"/> | |
703 | + </constraints> | |
704 | + </view> | |
705 | + <connections> | |
706 | + <outlet property="collectionView" destination="EVv-oR-qoV" id="B1b-Pw-i7S"/> | |
707 | + </connections> | |
708 | + </viewController> | |
709 | + <placeholder placeholderIdentifier="IBFirstResponder" id="Thy-DG-e5P" userLabel="First Responder" sceneMemberID="firstResponder"/> | |
710 | + </objects> | |
711 | + <point key="canvasLocation" x="93.599999999999994" y="785.75712143928047"/> | |
712 | + </scene> | |
411 | 713 | </scenes> |
714 | + <resources> | |
715 | + <image name="arrow" width="7" height="12"/> | |
716 | + </resources> | |
412 | 717 | </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 | } | ... | ... |
YouerLiveVideo/YouerLiveVideo/controllers/User/AppSettingViewController.swift
0 → 100644
... | ... | @@ -0,0 +1,102 @@ |
1 | +// | |
2 | +// AppSettingViewController.swift | |
3 | +// YouerLiveVideo | |
4 | +// | |
5 | +// Created by 左丞 on 2017/5/23. | |
6 | +// Copyright © 2017年 左丞. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +import UIKit | |
10 | + | |
11 | +class AppSettingViewController: UIViewController { | |
12 | + var titleArr:[String] = ["密码修改"] | |
13 | + override func viewDidLoad() { | |
14 | + super.viewDidLoad() | |
15 | + | |
16 | + // Do any additional setup after loading the view. | |
17 | + } | |
18 | + | |
19 | + override func didReceiveMemoryWarning() { | |
20 | + super.didReceiveMemoryWarning() | |
21 | + // Dispose of any resources that can be recreated. | |
22 | + } | |
23 | + | |
24 | + override func viewWillAppear(_ animated: Bool) { | |
25 | + super.viewWillAppear(animated) | |
26 | + self.tabBarController?.tabBar.isHidden = true | |
27 | + } | |
28 | + | |
29 | + override func viewWillDisappear(_ animated: Bool) { | |
30 | + super.viewWillDisappear(animated) | |
31 | + self.tabBarController?.hidesBottomBarWhenPushed = false | |
32 | + } | |
33 | + | |
34 | + | |
35 | + /* | |
36 | + // MARK: - Navigation | |
37 | + | |
38 | + // In a storyboard-based application, you will often want to do a little preparation before navigation | |
39 | + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | |
40 | + // Get the new view controller using segue.destinationViewController. | |
41 | + // Pass the selected object to the new view controller. | |
42 | + } | |
43 | + */ | |
44 | + | |
45 | +} | |
46 | + | |
47 | +extension AppSettingViewController:UITableViewDelegate,UITableViewDataSource{ | |
48 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
49 | + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! AppSettingCell | |
50 | + cell.titleName.text = titleArr[indexPath.row] | |
51 | + return cell | |
52 | + } | |
53 | + | |
54 | + func numberOfSections(in tableView: UITableView) -> Int { | |
55 | + return titleArr.count | |
56 | + } | |
57 | + | |
58 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
59 | + return 1 | |
60 | + } | |
61 | + | |
62 | + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | |
63 | + switch indexPath.section { | |
64 | + case 0: | |
65 | + let vc = Story.instantiateViewControllerWithIdentifier("ChangePassWordViewControllerVC", storyName: "User") as! ChangePassWordViewController | |
66 | + vc.title = "密码修改" | |
67 | + self.navigationController?.pushViewController(vc, animated: true) | |
68 | + break | |
69 | + default: | |
70 | + break | |
71 | + } | |
72 | + } | |
73 | + | |
74 | + func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { | |
75 | + let view = UILabel(frame: CGRect(x:0,y:0,width:getScreenWidth(),height:1)) | |
76 | + view.backgroundColor = tableView.backgroundColor | |
77 | + return view | |
78 | + } | |
79 | + | |
80 | + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { | |
81 | + let view = UILabel(frame: CGRect(x:0,y:0,width:getScreenWidth(),height:15)) | |
82 | + view.backgroundColor = tableView.backgroundColor | |
83 | + return view | |
84 | + | |
85 | + } | |
86 | + func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { | |
87 | + return 1 | |
88 | + } | |
89 | + | |
90 | + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { | |
91 | + return 15 | |
92 | + } | |
93 | +} | |
94 | + | |
95 | + | |
96 | + | |
97 | +class AppSettingCell: UITableViewCell { | |
98 | + | |
99 | + | |
100 | + @IBOutlet weak var titleName: UILabel! | |
101 | + | |
102 | +} | ... | ... |
YouerLiveVideo/YouerLiveVideo/controllers/User/HistoryViewController.swift
0 → 100644
... | ... | @@ -0,0 +1,102 @@ |
1 | +// | |
2 | +// HistoryViewController.swift | |
3 | +// YouerLiveVideo | |
4 | +// | |
5 | +// Created by 左丞 on 2017/5/23. | |
6 | +// Copyright © 2017年 左丞. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +import UIKit | |
10 | + | |
11 | +class HistoryViewController: UIViewController { | |
12 | + | |
13 | + @IBOutlet weak var collectionView: UICollectionView! | |
14 | + | |
15 | + var datatSet:[TVStationSubject] = [] | |
16 | + var type:Int = 0// 资源类型 0-微课 1-资源 | |
17 | + var isHistory:Int = 0 | |
18 | + override func viewDidLoad() { | |
19 | + super.viewDidLoad() | |
20 | + if isHistory == 0{ | |
21 | + AppDelegate.instance().httpServer.getHistroyView(parameters: ["f_ViewType":type as AnyObject,"pageIndex":1 as AnyObject]) { (str, error) in | |
22 | + httpJsonResule(jsonString: str, error: error, successHandler: { (json) in | |
23 | + for item in json.contentData()["resultData"].arrayValue{ | |
24 | + self.datatSet.append(TVStationSubject(json: item)) | |
25 | + } | |
26 | + self.collectionView.reloadData() | |
27 | + }, failHandler: { (error) in | |
28 | + | |
29 | + }) | |
30 | + } | |
31 | + }else{ | |
32 | + AppDelegate.instance().httpServer.getHistroyView(parameters: ["f_ViewType":type as AnyObject,"pageIndex":1 as AnyObject]) { (str, error) in | |
33 | + httpJsonResule(jsonString: str, error: error, successHandler: { (json) in | |
34 | + for item in json.contentData()["resultData"].arrayValue{ | |
35 | + self.datatSet.append(TVStationSubject(json: item)) | |
36 | + } | |
37 | + self.collectionView.reloadData() | |
38 | + }, failHandler: { (error) in | |
39 | + | |
40 | + }) | |
41 | + } | |
42 | + } | |
43 | + // Do any additional setup after loading the view. | |
44 | + } | |
45 | + | |
46 | + override func didReceiveMemoryWarning() { | |
47 | + super.didReceiveMemoryWarning() | |
48 | + // Dispose of any resources that can be recreated. | |
49 | + } | |
50 | + | |
51 | + | |
52 | + /* | |
53 | + // MARK: - Navigation | |
54 | + | |
55 | + // In a storyboard-based application, you will often want to do a little preparation before navigation | |
56 | + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | |
57 | + // Get the new view controller using segue.destinationViewController. | |
58 | + // Pass the selected object to the new view controller. | |
59 | + } | |
60 | + */ | |
61 | + | |
62 | +} | |
63 | + | |
64 | +extension HistoryViewController:UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{ | |
65 | + | |
66 | + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { | |
67 | + | |
68 | + } | |
69 | + | |
70 | + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { | |
71 | + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! TVStationClassCell | |
72 | + let item = datatSet[indexPath.row] | |
73 | + cell.model = item | |
74 | + return cell | |
75 | + } | |
76 | + | |
77 | + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { | |
78 | + return datatSet.count | |
79 | + } | |
80 | + | |
81 | + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { | |
82 | + return CGSize(width: (getScreenWidth()-30)/2, height: 200) | |
83 | + } | |
84 | + | |
85 | + | |
86 | + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { | |
87 | + return UIEdgeInsetsMake(10, 10, 10, 10) | |
88 | + } | |
89 | + | |
90 | +} | |
91 | + | |
92 | +class TVStationClassCell: UICollectionViewCell { | |
93 | + | |
94 | + @IBOutlet weak var name: UILabel! | |
95 | + @IBOutlet weak var photo: UIImageView! | |
96 | + var model:TVStationSubject?{ | |
97 | + didSet{ | |
98 | + name.text = model!.f_Title | |
99 | + photo.sd_setImage(with: URL(string:model!.f_Img), placeholderImage: #imageLiteral(resourceName: "placeholder")) | |
100 | + } | |
101 | + } | |
102 | +} | ... | ... |
YouerLiveVideo/YouerLiveVideo/controllers/User/Setting/ChangePassWordViewController.swift
0 → 100644
... | ... | @@ -0,0 +1,84 @@ |
1 | +// | |
2 | +// ChangePassWordViewController.swift | |
3 | +// YouerLiveVideo | |
4 | +// | |
5 | +// Created by 左丞 on 2017/5/23. | |
6 | +// Copyright © 2017年 左丞. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +import UIKit | |
10 | + | |
11 | +class ChangePassWordViewController: UIViewController { | |
12 | + | |
13 | + @IBOutlet weak var scrollView: UIScrollView! | |
14 | + @IBOutlet weak var scrollViewHeight: NSLayoutConstraint! | |
15 | + | |
16 | + @IBOutlet weak var passwordTextFiled: UITextField! | |
17 | + @IBOutlet weak var agrenPasswordTextFiled: UITextField! | |
18 | + @IBOutlet weak var userCodeTextFiled: UITextField! | |
19 | + | |
20 | + | |
21 | + var scrollViewH:CGFloat! | |
22 | + | |
23 | + @IBAction func editKeyboard(_ sender: Any) { | |
24 | + self.view.endEditing(true) | |
25 | + } | |
26 | + | |
27 | + override func viewDidLoad() { | |
28 | + super.viewDidLoad() | |
29 | + scrollViewH = scrollViewHeight.constant | |
30 | + NotificationCenter.default.addObserver(self, selector: #selector(ChangePassWordViewController.keyboardWIllChange), name: NSNotification.Name.UIKeyboardWillChangeFrame, object: nil) | |
31 | + | |
32 | + // Do any additional setup after loading the view. | |
33 | + } | |
34 | + | |
35 | + override func didReceiveMemoryWarning() { | |
36 | + super.didReceiveMemoryWarning() | |
37 | + // Dispose of any resources that can be recreated. | |
38 | + } | |
39 | + | |
40 | + @IBAction func agrenChangePasswordBtnClick(_ sender: UIButton) { | |
41 | + | |
42 | + } | |
43 | + | |
44 | + @IBAction func sendUserCodeBtnClick(_ sender: UIButton) { | |
45 | + | |
46 | + } | |
47 | + | |
48 | + // MARK: - 输入密码点击return回收键盘 | |
49 | + func textFieldShouldReturn(_ textField: UITextField) -> Bool { | |
50 | + textField.resignFirstResponder() | |
51 | + return true | |
52 | + } | |
53 | + // MARK: - 键盘监听 | |
54 | + func keyboardWIllChange(noti: NSNotification){ | |
55 | + let userInfo:NSDictionary=noti.userInfo! as NSDictionary | |
56 | + let endFrame=(userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue | |
57 | + if endFrame?.origin.y==getScreenHeight() { | |
58 | + scrollViewHeight.constant=scrollViewH | |
59 | + }else{ | |
60 | + if ((endFrame?.origin.y)!-64) < scrollViewH { | |
61 | + scrollViewHeight.constant=((endFrame?.origin.y)!-64) | |
62 | + }else{ | |
63 | + scrollViewHeight.constant=scrollViewH | |
64 | + } | |
65 | + } | |
66 | + } | |
67 | + // MARK: - 销毁通知 | |
68 | + deinit { | |
69 | + NotificationCenter.default.removeObserver(self) | |
70 | + } | |
71 | + | |
72 | + /* | |
73 | + // MARK: - Navigation | |
74 | + | |
75 | + // In a storyboard-based application, you will often want to do a little preparation before navigation | |
76 | + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | |
77 | + // Get the new view controller using segue.destinationViewController. | |
78 | + // Pass the selected object to the new view controller. | |
79 | + } | |
80 | + */ | |
81 | + | |
82 | +} | |
83 | + | |
84 | + | ... | ... |
YouerLiveVideo/YouerLiveVideo/controllers/User/User.storyboard
... | ... | @@ -5,6 +5,561 @@ |
5 | 5 | </device> |
6 | 6 | <dependencies> |
7 | 7 | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11757"/> |
8 | + <capability name="Aspect ratio constraints" minToolsVersion="5.1"/> | |
9 | + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | |
8 | 10 | </dependencies> |
9 | - <scenes/> | |
11 | + <scenes> | |
12 | + <!--User Edit View Controller--> | |
13 | + <scene sceneID="pS1-j4-eWs"> | |
14 | + <objects> | |
15 | + <viewController storyboardIdentifier="UserEditViewControllerVC" id="e3H-9T-9vN" customClass="UserEditViewController" customModule="YouerLiveVideo" customModuleProvider="target" sceneMemberID="viewController"> | |
16 | + <layoutGuides> | |
17 | + <viewControllerLayoutGuide type="top" id="FSu-Pn-e9e"/> | |
18 | + <viewControllerLayoutGuide type="bottom" id="xWX-Qt-Zg4"/> | |
19 | + </layoutGuides> | |
20 | + <view key="view" contentMode="scaleToFill" id="sEf-LI-up1"> | |
21 | + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | |
22 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | |
23 | + <subviews> | |
24 | + <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="80" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="7cQ-8j-yH7"> | |
25 | + <rect key="frame" x="0.0" y="20" width="375" height="647"/> | |
26 | + <color key="backgroundColor" red="0.93503493069999999" green="0.93562394380000002" blue="0.96585971120000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
27 | + <view key="tableFooterView" alpha="0.0" contentMode="scaleToFill" id="gdX-lf-V9T"> | |
28 | + <rect key="frame" x="0.0" y="233" width="375" height="1"/> | |
29 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | |
30 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
31 | + </view> | |
32 | + <prototypes> | |
33 | + <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" reuseIdentifier="cell" rowHeight="65" id="VaS-c5-fyN" customClass="UserEditCell" customModule="YouerLiveVideo" customModuleProvider="target"> | |
34 | + <rect key="frame" x="0.0" y="28" width="375" height="65"/> | |
35 | + <autoresizingMask key="autoresizingMask"/> | |
36 | + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="VaS-c5-fyN" id="BHG-Ro-sxn"> | |
37 | + <rect key="frame" x="0.0" y="0.0" width="375" height="65"/> | |
38 | + <autoresizingMask key="autoresizingMask"/> | |
39 | + <subviews> | |
40 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1Fz-jx-xRr"> | |
41 | + <rect key="frame" x="0.0" y="0.0" width="375" height="55"/> | |
42 | + <subviews> | |
43 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wur-aa-kt0"> | |
44 | + <rect key="frame" x="16" y="17" width="42" height="21"/> | |
45 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
46 | + <nil key="textColor"/> | |
47 | + <nil key="highlightedColor"/> | |
48 | + </label> | |
49 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lKD-cm-cma"> | |
50 | + <rect key="frame" x="100" y="17" width="42" height="21"/> | |
51 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
52 | + <nil key="textColor"/> | |
53 | + <nil key="highlightedColor"/> | |
54 | + </label> | |
55 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="修改" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="p7D-OG-Yvb"> | |
56 | + <rect key="frame" x="324" y="17" width="35" height="21"/> | |
57 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
58 | + <nil key="textColor"/> | |
59 | + <nil key="highlightedColor"/> | |
60 | + </label> | |
61 | + </subviews> | |
62 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
63 | + <constraints> | |
64 | + <constraint firstItem="lKD-cm-cma" firstAttribute="leading" secondItem="1Fz-jx-xRr" secondAttribute="leading" constant="100" id="82k-40-ps7"/> | |
65 | + <constraint firstItem="lKD-cm-cma" firstAttribute="centerY" secondItem="1Fz-jx-xRr" secondAttribute="centerY" id="CKm-pY-Oa5"/> | |
66 | + <constraint firstItem="p7D-OG-Yvb" firstAttribute="centerY" secondItem="1Fz-jx-xRr" secondAttribute="centerY" id="GLx-N0-nO4"/> | |
67 | + <constraint firstAttribute="trailing" secondItem="p7D-OG-Yvb" secondAttribute="trailing" constant="16" id="aeE-4O-uX0"/> | |
68 | + <constraint firstItem="wur-aa-kt0" firstAttribute="leading" secondItem="1Fz-jx-xRr" secondAttribute="leading" constant="16" id="dzA-qy-Cb4"/> | |
69 | + <constraint firstItem="wur-aa-kt0" firstAttribute="centerY" secondItem="1Fz-jx-xRr" secondAttribute="centerY" id="inn-Xl-Jd6"/> | |
70 | + </constraints> | |
71 | + </view> | |
72 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ixZ-3y-Vbw"> | |
73 | + <rect key="frame" x="0.0" y="50" width="375" height="15"/> | |
74 | + <color key="backgroundColor" red="0.93503493069999999" green="0.93562394380000002" blue="0.96585971120000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
75 | + <constraints> | |
76 | + <constraint firstAttribute="height" constant="15" id="EhR-gh-BOo"/> | |
77 | + </constraints> | |
78 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
79 | + <nil key="textColor"/> | |
80 | + <nil key="highlightedColor"/> | |
81 | + </label> | |
82 | + </subviews> | |
83 | + <constraints> | |
84 | + <constraint firstAttribute="bottom" secondItem="ixZ-3y-Vbw" secondAttribute="bottom" id="Hhs-no-unI"/> | |
85 | + <constraint firstAttribute="trailing" secondItem="1Fz-jx-xRr" secondAttribute="trailing" id="PMA-PU-hcw"/> | |
86 | + <constraint firstItem="1Fz-jx-xRr" firstAttribute="leading" secondItem="BHG-Ro-sxn" secondAttribute="leading" id="Voj-d0-Qey"/> | |
87 | + <constraint firstAttribute="trailing" secondItem="ixZ-3y-Vbw" secondAttribute="trailing" id="Yzp-pT-xwG"/> | |
88 | + <constraint firstItem="1Fz-jx-xRr" firstAttribute="top" secondItem="BHG-Ro-sxn" secondAttribute="top" id="ZeA-nu-6OB"/> | |
89 | + <constraint firstAttribute="bottom" secondItem="1Fz-jx-xRr" secondAttribute="bottom" constant="10" id="h50-sQ-e7l"/> | |
90 | + <constraint firstItem="ixZ-3y-Vbw" firstAttribute="leading" secondItem="BHG-Ro-sxn" secondAttribute="leading" id="xG1-Oa-Jgs"/> | |
91 | + </constraints> | |
92 | + </tableViewCellContentView> | |
93 | + <connections> | |
94 | + <outlet property="changeBtn" destination="p7D-OG-Yvb" id="AOH-ne-h5Q"/> | |
95 | + <outlet property="name" destination="lKD-cm-cma" id="FUs-tv-gRh"/> | |
96 | + <outlet property="titleName" destination="wur-aa-kt0" id="33B-f4-9wH"/> | |
97 | + </connections> | |
98 | + </tableViewCell> | |
99 | + <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="UserPhotoCell" rowHeight="140" id="ST2-cP-6pc" customClass="UserPhotoCell" customModule="YouerLiveVideo" customModuleProvider="target"> | |
100 | + <rect key="frame" x="0.0" y="93" width="375" height="140"/> | |
101 | + <autoresizingMask key="autoresizingMask"/> | |
102 | + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="ST2-cP-6pc" id="Sbp-Hc-H1F"> | |
103 | + <rect key="frame" x="0.0" y="0.0" width="375" height="140"/> | |
104 | + <autoresizingMask key="autoresizingMask"/> | |
105 | + <subviews> | |
106 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uzU-Fp-mNB"> | |
107 | + <rect key="frame" x="0.0" y="0.0" width="375" height="140"/> | |
108 | + <subviews> | |
109 | + <imageView contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="MvT-1n-2RV"> | |
110 | + <rect key="frame" x="147" y="29.5" width="80" height="80"/> | |
111 | + <gestureRecognizers/> | |
112 | + <constraints> | |
113 | + <constraint firstAttribute="height" constant="80" id="ilj-wE-mjh"/> | |
114 | + <constraint firstAttribute="width" secondItem="MvT-1n-2RV" secondAttribute="height" multiplier="1:1" id="kzh-Ni-nkL"/> | |
115 | + </constraints> | |
116 | + </imageView> | |
117 | + </subviews> | |
118 | + <color key="backgroundColor" red="0.93503493069999999" green="0.93562394380000002" blue="0.96585971120000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
119 | + <constraints> | |
120 | + <constraint firstItem="MvT-1n-2RV" firstAttribute="centerX" secondItem="uzU-Fp-mNB" secondAttribute="centerX" id="ZHN-Gp-Ij9"/> | |
121 | + <constraint firstItem="MvT-1n-2RV" firstAttribute="centerY" secondItem="uzU-Fp-mNB" secondAttribute="centerY" id="zuC-Cf-7x2"/> | |
122 | + </constraints> | |
123 | + </view> | |
124 | + </subviews> | |
125 | + <constraints> | |
126 | + <constraint firstItem="uzU-Fp-mNB" firstAttribute="top" secondItem="Sbp-Hc-H1F" secondAttribute="top" id="Zyb-Ns-MhD"/> | |
127 | + <constraint firstAttribute="bottom" secondItem="uzU-Fp-mNB" secondAttribute="bottom" id="jDv-GK-OaY"/> | |
128 | + <constraint firstItem="uzU-Fp-mNB" firstAttribute="leading" secondItem="Sbp-Hc-H1F" secondAttribute="leading" id="n0L-Ff-SUt"/> | |
129 | + <constraint firstAttribute="trailing" secondItem="uzU-Fp-mNB" secondAttribute="trailing" id="wYN-Vy-l2u"/> | |
130 | + </constraints> | |
131 | + </tableViewCellContentView> | |
132 | + <connections> | |
133 | + <outlet property="userPhoto" destination="MvT-1n-2RV" id="xxF-2C-1kE"/> | |
134 | + </connections> | |
135 | + </tableViewCell> | |
136 | + </prototypes> | |
137 | + <connections> | |
138 | + <outlet property="dataSource" destination="e3H-9T-9vN" id="UvO-ae-JX9"/> | |
139 | + <outlet property="delegate" destination="e3H-9T-9vN" id="BbH-AF-6nl"/> | |
140 | + </connections> | |
141 | + </tableView> | |
142 | + </subviews> | |
143 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
144 | + <constraints> | |
145 | + <constraint firstAttribute="trailing" secondItem="7cQ-8j-yH7" secondAttribute="trailing" id="NEK-vl-XRa"/> | |
146 | + <constraint firstItem="xWX-Qt-Zg4" firstAttribute="top" secondItem="7cQ-8j-yH7" secondAttribute="bottom" id="faO-w8-Ha9"/> | |
147 | + <constraint firstItem="7cQ-8j-yH7" firstAttribute="leading" secondItem="sEf-LI-up1" secondAttribute="leading" id="geO-bM-2Wp"/> | |
148 | + <constraint firstItem="7cQ-8j-yH7" firstAttribute="top" secondItem="FSu-Pn-e9e" secondAttribute="bottom" id="jn4-oS-0aN"/> | |
149 | + </constraints> | |
150 | + </view> | |
151 | + <connections> | |
152 | + <outlet property="tableView" destination="7cQ-8j-yH7" id="haS-Sg-rw6"/> | |
153 | + </connections> | |
154 | + </viewController> | |
155 | + <placeholder placeholderIdentifier="IBFirstResponder" id="Ghq-3c-AqX" userLabel="First Responder" sceneMemberID="firstResponder"/> | |
156 | + </objects> | |
157 | + <point key="canvasLocation" x="776.79999999999995" y="-130.88455772113943"/> | |
158 | + </scene> | |
159 | + <!--App Setting View Controller--> | |
160 | + <scene sceneID="eJC-vi-wHZ"> | |
161 | + <objects> | |
162 | + <viewController storyboardIdentifier="AppSettingViewControllerVC" id="DOf-c9-nNw" customClass="AppSettingViewController" customModule="YouerLiveVideo" customModuleProvider="target" sceneMemberID="viewController"> | |
163 | + <layoutGuides> | |
164 | + <viewControllerLayoutGuide type="top" id="UTZ-Kh-YfO"/> | |
165 | + <viewControllerLayoutGuide type="bottom" id="ZkS-Lb-DA8"/> | |
166 | + </layoutGuides> | |
167 | + <view key="view" contentMode="scaleToFill" id="BaA-H1-b7T"> | |
168 | + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | |
169 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | |
170 | + <subviews> | |
171 | + <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="RU1-zL-XaA"> | |
172 | + <rect key="frame" x="0.0" y="20" width="375" height="577"/> | |
173 | + <color key="backgroundColor" red="0.93503493069999999" green="0.93562394380000002" blue="0.96585971120000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
174 | + <prototypes> | |
175 | + <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" reuseIdentifier="cell" id="6lf-ye-czT" customClass="AppSettingCell" customModule="YouerLiveVideo" customModuleProvider="target"> | |
176 | + <rect key="frame" x="0.0" y="28" width="375" height="44"/> | |
177 | + <autoresizingMask key="autoresizingMask"/> | |
178 | + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="6lf-ye-czT" id="EpN-M2-4mo"> | |
179 | + <rect key="frame" x="0.0" y="0.0" width="342" height="44"/> | |
180 | + <autoresizingMask key="autoresizingMask"/> | |
181 | + <subviews> | |
182 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wrs-53-euO"> | |
183 | + <rect key="frame" x="16" y="11" width="42" height="21"/> | |
184 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
185 | + <nil key="textColor"/> | |
186 | + <nil key="highlightedColor"/> | |
187 | + </label> | |
188 | + </subviews> | |
189 | + <constraints> | |
190 | + <constraint firstItem="wrs-53-euO" firstAttribute="leading" secondItem="EpN-M2-4mo" secondAttribute="leading" constant="16" id="ce2-Gd-BXl"/> | |
191 | + <constraint firstItem="wrs-53-euO" firstAttribute="centerY" secondItem="EpN-M2-4mo" secondAttribute="centerY" id="qO6-ij-bMv"/> | |
192 | + </constraints> | |
193 | + </tableViewCellContentView> | |
194 | + <connections> | |
195 | + <outlet property="titleName" destination="wrs-53-euO" id="ar5-gT-Peh"/> | |
196 | + </connections> | |
197 | + </tableViewCell> | |
198 | + </prototypes> | |
199 | + <connections> | |
200 | + <outlet property="dataSource" destination="DOf-c9-nNw" id="M1L-uf-l3f"/> | |
201 | + <outlet property="delegate" destination="DOf-c9-nNw" id="fXo-ce-spA"/> | |
202 | + </connections> | |
203 | + </tableView> | |
204 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="pPn-F1-n9K"> | |
205 | + <rect key="frame" x="0.0" y="597" width="375" height="70"/> | |
206 | + <subviews> | |
207 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Qpd-f0-dKF"> | |
208 | + <rect key="frame" x="0.0" y="0.0" width="375" height="1"/> | |
209 | + <color key="backgroundColor" red="0.93503493069999999" green="0.93562394380000002" blue="0.96585971120000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
210 | + <constraints> | |
211 | + <constraint firstAttribute="height" constant="1" id="45v-g5-KI8"/> | |
212 | + </constraints> | |
213 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
214 | + <nil key="textColor"/> | |
215 | + <nil key="highlightedColor"/> | |
216 | + </label> | |
217 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="CIJ-c9-Tc0"> | |
218 | + <rect key="frame" x="50" y="11" width="274" height="48"/> | |
219 | + <color key="backgroundColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="calibratedRGB"/> | |
220 | + <state key="normal" title="退出当前账号"> | |
221 | + <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
222 | + </state> | |
223 | + </button> | |
224 | + </subviews> | |
225 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
226 | + <constraints> | |
227 | + <constraint firstAttribute="trailing" secondItem="Qpd-f0-dKF" secondAttribute="trailing" id="7tR-mL-cT5"/> | |
228 | + <constraint firstAttribute="height" constant="70" id="ETn-OW-sdW"/> | |
229 | + <constraint firstItem="CIJ-c9-Tc0" firstAttribute="top" secondItem="Qpd-f0-dKF" secondAttribute="bottom" constant="10" id="bEc-1f-7Ff"/> | |
230 | + <constraint firstItem="Qpd-f0-dKF" firstAttribute="top" secondItem="pPn-F1-n9K" secondAttribute="top" id="cba-oN-PUb"/> | |
231 | + <constraint firstItem="CIJ-c9-Tc0" firstAttribute="centerY" secondItem="pPn-F1-n9K" secondAttribute="centerY" id="hyB-EM-Ohu"/> | |
232 | + <constraint firstItem="CIJ-c9-Tc0" firstAttribute="leading" secondItem="pPn-F1-n9K" secondAttribute="leading" constant="50" id="kCo-OY-3EF"/> | |
233 | + <constraint firstItem="Qpd-f0-dKF" firstAttribute="leading" secondItem="pPn-F1-n9K" secondAttribute="leading" id="ojR-h1-w1Z"/> | |
234 | + <constraint firstItem="CIJ-c9-Tc0" firstAttribute="centerX" secondItem="pPn-F1-n9K" secondAttribute="centerX" id="s4p-Dq-MJz"/> | |
235 | + </constraints> | |
236 | + </view> | |
237 | + </subviews> | |
238 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
239 | + <constraints> | |
240 | + <constraint firstItem="pPn-F1-n9K" firstAttribute="leading" secondItem="BaA-H1-b7T" secondAttribute="leading" id="0Bi-aX-P1k"/> | |
241 | + <constraint firstItem="ZkS-Lb-DA8" firstAttribute="top" secondItem="pPn-F1-n9K" secondAttribute="bottom" id="0r4-3W-Ify"/> | |
242 | + <constraint firstAttribute="trailing" secondItem="pPn-F1-n9K" secondAttribute="trailing" id="K3f-78-bFd"/> | |
243 | + <constraint firstItem="RU1-zL-XaA" firstAttribute="leading" secondItem="BaA-H1-b7T" secondAttribute="leading" id="Rpb-Ug-YCv"/> | |
244 | + <constraint firstItem="RU1-zL-XaA" firstAttribute="top" secondItem="UTZ-Kh-YfO" secondAttribute="bottom" id="gIV-4m-XSg"/> | |
245 | + <constraint firstAttribute="trailing" secondItem="RU1-zL-XaA" secondAttribute="trailing" id="ml9-a6-THg"/> | |
246 | + <constraint firstItem="pPn-F1-n9K" firstAttribute="top" secondItem="RU1-zL-XaA" secondAttribute="bottom" id="voC-9E-czN"/> | |
247 | + </constraints> | |
248 | + </view> | |
249 | + </viewController> | |
250 | + <placeholder placeholderIdentifier="IBFirstResponder" id="44z-Sl-H4j" userLabel="First Responder" sceneMemberID="firstResponder"/> | |
251 | + </objects> | |
252 | + <point key="canvasLocation" x="1509.5999999999999" y="-131.78410794602701"/> | |
253 | + </scene> | |
254 | + <!--Change Pass Word View Controller--> | |
255 | + <scene sceneID="opx-Sc-v2W"> | |
256 | + <objects> | |
257 | + <viewController storyboardIdentifier="ChangePassWordViewControllerVC" id="HIn-e8-Pzh" customClass="ChangePassWordViewController" customModule="YouerLiveVideo" customModuleProvider="target" sceneMemberID="viewController"> | |
258 | + <layoutGuides> | |
259 | + <viewControllerLayoutGuide type="top" id="fMj-B9-eEF"/> | |
260 | + <viewControllerLayoutGuide type="bottom" id="Gxk-Dg-G3D"/> | |
261 | + </layoutGuides> | |
262 | + <view key="view" contentMode="scaleToFill" id="bs0-1B-XZt" customClass="UIControl"> | |
263 | + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | |
264 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | |
265 | + <subviews> | |
266 | + <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8Vd-3T-3CR"> | |
267 | + <rect key="frame" x="0.0" y="0.0" width="375" height="597"/> | |
268 | + <subviews> | |
269 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1DA-t8-OEm"> | |
270 | + <rect key="frame" x="0.0" y="0.0" width="375" height="597"/> | |
271 | + <subviews> | |
272 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YjI-UW-Ova"> | |
273 | + <rect key="frame" x="0.0" y="100" width="375" height="50"/> | |
274 | + <subviews> | |
275 | + <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入您收到的验证码" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="dtg-hq-Nhp"> | |
276 | + <rect key="frame" x="20" y="17" width="147" height="17"/> | |
277 | + <nil key="textColor"/> | |
278 | + <fontDescription key="fontDescription" type="system" pointSize="14"/> | |
279 | + <textInputTraits key="textInputTraits" keyboardType="numberPad"/> | |
280 | + <connections> | |
281 | + <outlet property="delegate" destination="HIn-e8-Pzh" id="Rk2-Rg-WTc"/> | |
282 | + </connections> | |
283 | + </textField> | |
284 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lFa-PY-Lg1"> | |
285 | + <rect key="frame" x="16" y="49" width="343" height="1"/> | |
286 | + <color key="backgroundColor" red="0.93503493069999999" green="0.93562394380000002" blue="0.96585971120000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
287 | + <constraints> | |
288 | + <constraint firstAttribute="height" constant="1" id="Lfw-Yi-UtD"/> | |
289 | + </constraints> | |
290 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
291 | + <nil key="textColor"/> | |
292 | + <nil key="highlightedColor"/> | |
293 | + </label> | |
294 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="i2a-hL-oad"> | |
295 | + <rect key="frame" x="274" y="10" width="85" height="30"/> | |
296 | + <color key="backgroundColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="calibratedRGB"/> | |
297 | + <state key="normal" title=" 获取验证码 "> | |
298 | + <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
299 | + </state> | |
300 | + <connections> | |
301 | + <action selector="sendUserCodeBtnClick:" destination="HIn-e8-Pzh" eventType="touchUpInside" id="Hmd-rM-a0h"/> | |
302 | + </connections> | |
303 | + </button> | |
304 | + </subviews> | |
305 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
306 | + <constraints> | |
307 | + <constraint firstItem="i2a-hL-oad" firstAttribute="centerY" secondItem="YjI-UW-Ova" secondAttribute="centerY" id="6tN-tx-hH2"/> | |
308 | + <constraint firstItem="lFa-PY-Lg1" firstAttribute="leading" secondItem="YjI-UW-Ova" secondAttribute="leading" constant="16" id="AUg-bg-Q14"/> | |
309 | + <constraint firstAttribute="bottom" secondItem="lFa-PY-Lg1" secondAttribute="bottom" id="KLR-8O-Gec"/> | |
310 | + <constraint firstItem="dtg-hq-Nhp" firstAttribute="leading" secondItem="YjI-UW-Ova" secondAttribute="leading" constant="20" id="Tbt-To-MnF"/> | |
311 | + <constraint firstItem="lFa-PY-Lg1" firstAttribute="centerX" secondItem="YjI-UW-Ova" secondAttribute="centerX" id="UMn-tr-iSe"/> | |
312 | + <constraint firstAttribute="height" constant="50" id="Zdw-rZ-eCg"/> | |
313 | + <constraint firstAttribute="trailing" secondItem="i2a-hL-oad" secondAttribute="trailing" constant="16" id="nhQ-oH-HBd"/> | |
314 | + <constraint firstItem="dtg-hq-Nhp" firstAttribute="centerY" secondItem="YjI-UW-Ova" secondAttribute="centerY" id="pYp-kV-v06"/> | |
315 | + <constraint firstItem="i2a-hL-oad" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="dtg-hq-Nhp" secondAttribute="trailing" constant="8" id="tCf-jM-Z0F"/> | |
316 | + </constraints> | |
317 | + </view> | |
318 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="DSL-73-rUm"> | |
319 | + <rect key="frame" x="0.0" y="0.0" width="375" height="50"/> | |
320 | + <subviews> | |
321 | + <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入新密码" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="KOX-8X-bEC"> | |
322 | + <rect key="frame" x="20" y="17" width="335" height="17"/> | |
323 | + <nil key="textColor"/> | |
324 | + <fontDescription key="fontDescription" type="system" pointSize="14"/> | |
325 | + <textInputTraits key="textInputTraits"/> | |
326 | + <connections> | |
327 | + <outlet property="delegate" destination="HIn-e8-Pzh" id="JRe-kh-lW4"/> | |
328 | + </connections> | |
329 | + </textField> | |
330 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xNz-Dn-QcJ"> | |
331 | + <rect key="frame" x="16" y="49" width="343" height="1"/> | |
332 | + <color key="backgroundColor" red="0.93503493069999999" green="0.93562394380000002" blue="0.96585971120000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
333 | + <constraints> | |
334 | + <constraint firstAttribute="height" constant="1" id="jO2-yd-Lfd"/> | |
335 | + </constraints> | |
336 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
337 | + <nil key="textColor"/> | |
338 | + <nil key="highlightedColor"/> | |
339 | + </label> | |
340 | + </subviews> | |
341 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
342 | + <constraints> | |
343 | + <constraint firstAttribute="height" constant="50" id="CLT-v4-ZkO"/> | |
344 | + <constraint firstItem="KOX-8X-bEC" firstAttribute="centerX" secondItem="DSL-73-rUm" secondAttribute="centerX" id="M4r-zi-VnB"/> | |
345 | + <constraint firstItem="xNz-Dn-QcJ" firstAttribute="centerX" secondItem="DSL-73-rUm" secondAttribute="centerX" id="iTN-UG-68h"/> | |
346 | + <constraint firstItem="KOX-8X-bEC" firstAttribute="leading" secondItem="DSL-73-rUm" secondAttribute="leading" constant="20" id="nTe-NB-Iit"/> | |
347 | + <constraint firstAttribute="bottom" secondItem="xNz-Dn-QcJ" secondAttribute="bottom" id="o8H-LN-340"/> | |
348 | + <constraint firstItem="KOX-8X-bEC" firstAttribute="centerY" secondItem="DSL-73-rUm" secondAttribute="centerY" id="oJc-1J-siL"/> | |
349 | + <constraint firstItem="xNz-Dn-QcJ" firstAttribute="leading" secondItem="DSL-73-rUm" secondAttribute="leading" constant="16" id="uSC-7n-UlI"/> | |
350 | + </constraints> | |
351 | + </view> | |
352 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="PPf-BI-ZxE"> | |
353 | + <rect key="frame" x="0.0" y="50" width="375" height="50"/> | |
354 | + <subviews> | |
355 | + <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请重复您输入的新密码" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Qzh-5W-Fdl"> | |
356 | + <rect key="frame" x="20" y="16.5" width="335" height="17"/> | |
357 | + <nil key="textColor"/> | |
358 | + <fontDescription key="fontDescription" type="system" pointSize="14"/> | |
359 | + <textInputTraits key="textInputTraits"/> | |
360 | + <connections> | |
361 | + <outlet property="delegate" destination="HIn-e8-Pzh" id="3FT-zT-ACD"/> | |
362 | + </connections> | |
363 | + </textField> | |
364 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="g5c-gx-Rlr"> | |
365 | + <rect key="frame" x="16" y="49" width="343" height="1"/> | |
366 | + <color key="backgroundColor" red="0.93503493069999999" green="0.93562394380000002" blue="0.96585971120000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
367 | + <constraints> | |
368 | + <constraint firstAttribute="height" constant="1" id="h8G-PP-6FW"/> | |
369 | + </constraints> | |
370 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
371 | + <nil key="textColor"/> | |
372 | + <nil key="highlightedColor"/> | |
373 | + </label> | |
374 | + </subviews> | |
375 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
376 | + <constraints> | |
377 | + <constraint firstItem="Qzh-5W-Fdl" firstAttribute="centerX" secondItem="PPf-BI-ZxE" secondAttribute="centerX" id="ACg-OY-kid"/> | |
378 | + <constraint firstItem="g5c-gx-Rlr" firstAttribute="centerX" secondItem="PPf-BI-ZxE" secondAttribute="centerX" id="GIy-fQ-NqG"/> | |
379 | + <constraint firstAttribute="bottom" secondItem="g5c-gx-Rlr" secondAttribute="bottom" id="VsV-v8-cnP"/> | |
380 | + <constraint firstItem="Qzh-5W-Fdl" firstAttribute="leading" secondItem="PPf-BI-ZxE" secondAttribute="leading" constant="20" id="XxL-fd-Xdk"/> | |
381 | + <constraint firstAttribute="height" constant="50" id="Z4s-6F-BRm"/> | |
382 | + <constraint firstItem="Qzh-5W-Fdl" firstAttribute="centerY" secondItem="PPf-BI-ZxE" secondAttribute="centerY" id="bP8-Ie-B5l"/> | |
383 | + <constraint firstItem="g5c-gx-Rlr" firstAttribute="leading" secondItem="PPf-BI-ZxE" secondAttribute="leading" constant="16" id="mJw-dS-wNd"/> | |
384 | + </constraints> | |
385 | + </view> | |
386 | + </subviews> | |
387 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
388 | + <constraints> | |
389 | + <constraint firstAttribute="trailing" secondItem="YjI-UW-Ova" secondAttribute="trailing" id="4og-BG-yQ2"/> | |
390 | + <constraint firstItem="YjI-UW-Ova" firstAttribute="top" secondItem="PPf-BI-ZxE" secondAttribute="bottom" id="EVk-W9-6ha"/> | |
391 | + <constraint firstAttribute="trailing" secondItem="PPf-BI-ZxE" secondAttribute="trailing" id="KSD-tV-fyr"/> | |
392 | + <constraint firstAttribute="height" constant="597" id="O1w-LD-ENA"/> | |
393 | + <constraint firstItem="DSL-73-rUm" firstAttribute="leading" secondItem="1DA-t8-OEm" secondAttribute="leading" id="P4W-fB-mdJ"/> | |
394 | + <constraint firstItem="PPf-BI-ZxE" firstAttribute="leading" secondItem="1DA-t8-OEm" secondAttribute="leading" id="SZy-V6-tVw"/> | |
395 | + <constraint firstItem="PPf-BI-ZxE" firstAttribute="top" secondItem="DSL-73-rUm" secondAttribute="bottom" id="YFk-eX-dg9"/> | |
396 | + <constraint firstItem="YjI-UW-Ova" firstAttribute="leading" secondItem="1DA-t8-OEm" secondAttribute="leading" id="ZW2-Ge-UHU"/> | |
397 | + <constraint firstItem="DSL-73-rUm" firstAttribute="top" secondItem="1DA-t8-OEm" secondAttribute="top" id="fhq-vI-7jW"/> | |
398 | + <constraint firstAttribute="trailing" secondItem="DSL-73-rUm" secondAttribute="trailing" id="rjR-sC-f1X"/> | |
399 | + </constraints> | |
400 | + </view> | |
401 | + </subviews> | |
402 | + <constraints> | |
403 | + <constraint firstAttribute="bottom" secondItem="1DA-t8-OEm" secondAttribute="bottom" id="SgU-Q9-eey"/> | |
404 | + <constraint firstItem="1DA-t8-OEm" firstAttribute="centerX" secondItem="8Vd-3T-3CR" secondAttribute="centerX" id="V9c-vU-aiU"/> | |
405 | + <constraint firstItem="1DA-t8-OEm" firstAttribute="top" secondItem="8Vd-3T-3CR" secondAttribute="top" id="c1T-M8-TiB"/> | |
406 | + <constraint firstItem="1DA-t8-OEm" firstAttribute="leading" secondItem="8Vd-3T-3CR" secondAttribute="leading" id="dFv-uc-gPl"/> | |
407 | + <constraint firstAttribute="trailing" secondItem="1DA-t8-OEm" secondAttribute="trailing" id="hCM-VP-Yxf"/> | |
408 | + <constraint firstAttribute="height" constant="597" id="riU-A5-eXR"/> | |
409 | + </constraints> | |
410 | + </scrollView> | |
411 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="whH-Oe-owS"> | |
412 | + <rect key="frame" x="0.0" y="597" width="375" height="70"/> | |
413 | + <subviews> | |
414 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kVt-8Z-dIm"> | |
415 | + <rect key="frame" x="0.0" y="0.0" width="375" height="1"/> | |
416 | + <color key="backgroundColor" red="0.93503493069999999" green="0.93562394380000002" blue="0.96585971120000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
417 | + <constraints> | |
418 | + <constraint firstAttribute="height" constant="1" id="sVm-Ul-Tks"/> | |
419 | + </constraints> | |
420 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
421 | + <nil key="textColor"/> | |
422 | + <nil key="highlightedColor"/> | |
423 | + </label> | |
424 | + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="a1z-OP-RVi"> | |
425 | + <rect key="frame" x="50" y="11" width="274" height="48"/> | |
426 | + <color key="backgroundColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="calibratedRGB"/> | |
427 | + <state key="normal" title="确认修改"> | |
428 | + <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
429 | + </state> | |
430 | + <connections> | |
431 | + <action selector="agrenChangePasswordBtnClick:" destination="HIn-e8-Pzh" eventType="touchUpInside" id="qqi-Og-eWN"/> | |
432 | + </connections> | |
433 | + </button> | |
434 | + </subviews> | |
435 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
436 | + <constraints> | |
437 | + <constraint firstAttribute="height" constant="70" id="2q1-vd-aIj"/> | |
438 | + <constraint firstItem="a1z-OP-RVi" firstAttribute="top" secondItem="kVt-8Z-dIm" secondAttribute="bottom" constant="10" id="Cer-Vw-jgp"/> | |
439 | + <constraint firstItem="a1z-OP-RVi" firstAttribute="centerY" secondItem="whH-Oe-owS" secondAttribute="centerY" id="JRI-y7-sxw"/> | |
440 | + <constraint firstItem="kVt-8Z-dIm" firstAttribute="top" secondItem="whH-Oe-owS" secondAttribute="top" id="TJw-qg-Xj5"/> | |
441 | + <constraint firstAttribute="trailing" secondItem="kVt-8Z-dIm" secondAttribute="trailing" id="Yft-zB-u6I"/> | |
442 | + <constraint firstItem="kVt-8Z-dIm" firstAttribute="leading" secondItem="whH-Oe-owS" secondAttribute="leading" id="Yyc-Md-Jf6"/> | |
443 | + <constraint firstItem="a1z-OP-RVi" firstAttribute="leading" secondItem="whH-Oe-owS" secondAttribute="leading" constant="50" id="bj3-p2-4Ev"/> | |
444 | + <constraint firstItem="a1z-OP-RVi" firstAttribute="centerX" secondItem="whH-Oe-owS" secondAttribute="centerX" id="wX9-9q-dFe"/> | |
445 | + </constraints> | |
446 | + </view> | |
447 | + </subviews> | |
448 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
449 | + <constraints> | |
450 | + <constraint firstItem="whH-Oe-owS" firstAttribute="top" secondItem="8Vd-3T-3CR" secondAttribute="bottom" id="71h-u4-NXV"/> | |
451 | + <constraint firstAttribute="trailing" secondItem="8Vd-3T-3CR" secondAttribute="trailing" id="9MH-8S-tRA"/> | |
452 | + <constraint firstItem="whH-Oe-owS" firstAttribute="leading" secondItem="bs0-1B-XZt" secondAttribute="leading" id="B4t-9D-S3Q"/> | |
453 | + <constraint firstItem="8Vd-3T-3CR" firstAttribute="leading" secondItem="bs0-1B-XZt" secondAttribute="leading" id="H8g-fx-ewt"/> | |
454 | + <constraint firstItem="Gxk-Dg-G3D" firstAttribute="top" secondItem="whH-Oe-owS" secondAttribute="bottom" id="LnM-uu-3er"/> | |
455 | + <constraint firstItem="8Vd-3T-3CR" firstAttribute="top" secondItem="bs0-1B-XZt" secondAttribute="top" id="MkB-mh-yZy"/> | |
456 | + <constraint firstAttribute="trailing" secondItem="whH-Oe-owS" secondAttribute="trailing" id="uLu-dR-hbo"/> | |
457 | + </constraints> | |
458 | + <connections> | |
459 | + <action selector="editKeyboard:" destination="HIn-e8-Pzh" eventType="touchUpInside" id="Gqe-4a-Nym"/> | |
460 | + </connections> | |
461 | + </view> | |
462 | + <connections> | |
463 | + <outlet property="agrenPasswordTextFiled" destination="Qzh-5W-Fdl" id="NIs-ap-xHZ"/> | |
464 | + <outlet property="passwordTextFiled" destination="KOX-8X-bEC" id="Rd7-u2-mLM"/> | |
465 | + <outlet property="scrollView" destination="8Vd-3T-3CR" id="dEo-pi-u7a"/> | |
466 | + <outlet property="scrollViewHeight" destination="riU-A5-eXR" id="ihQ-Ne-Y5c"/> | |
467 | + <outlet property="userCodeTextFiled" destination="dtg-hq-Nhp" id="ZYP-US-SH2"/> | |
468 | + </connections> | |
469 | + </viewController> | |
470 | + <placeholder placeholderIdentifier="IBFirstResponder" id="kXj-Be-3l7" userLabel="First Responder" sceneMemberID="firstResponder"/> | |
471 | + </objects> | |
472 | + <point key="canvasLocation" x="776.79999999999995" y="550.97451274362822"/> | |
473 | + </scene> | |
474 | + <!--History View Controller--> | |
475 | + <scene sceneID="U2w-Je-5CE"> | |
476 | + <objects> | |
477 | + <viewController storyboardIdentifier="HistoryViewControllerVC" id="VUt-WI-s3d" customClass="HistoryViewController" customModule="YouerLiveVideo" customModuleProvider="target" sceneMemberID="viewController"> | |
478 | + <layoutGuides> | |
479 | + <viewControllerLayoutGuide type="top" id="pk3-CA-MMH"/> | |
480 | + <viewControllerLayoutGuide type="bottom" id="liG-my-8VL"/> | |
481 | + </layoutGuides> | |
482 | + <view key="view" contentMode="scaleToFill" id="I80-uH-88Q"> | |
483 | + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | |
484 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | |
485 | + <subviews> | |
486 | + <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="ik7-C5-cjj"> | |
487 | + <rect key="frame" x="0.0" y="20" width="375" height="647"/> | |
488 | + <color key="backgroundColor" red="0.93503493069999999" green="0.93562394380000002" blue="0.96585971120000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |
489 | + <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="UDJ-ZI-WP1"> | |
490 | + <size key="itemSize" width="178" height="213"/> | |
491 | + <size key="headerReferenceSize" width="0.0" height="0.0"/> | |
492 | + <size key="footerReferenceSize" width="0.0" height="0.0"/> | |
493 | + <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/> | |
494 | + </collectionViewFlowLayout> | |
495 | + <cells> | |
496 | + <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="cell" id="Aw8-Kt-490" customClass="TVStationClassCell" customModule="YouerLiveVideo" customModuleProvider="target"> | |
497 | + <rect key="frame" x="0.0" y="0.0" width="178" height="213"/> | |
498 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | |
499 | + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> | |
500 | + <rect key="frame" x="0.0" y="0.0" width="178" height="213"/> | |
501 | + <autoresizingMask key="autoresizingMask"/> | |
502 | + <subviews> | |
503 | + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="92W-L6-BhN"> | |
504 | + <rect key="frame" x="0.0" y="0.0" width="178" height="159"/> | |
505 | + <constraints> | |
506 | + <constraint firstAttribute="width" secondItem="92W-L6-BhN" secondAttribute="height" multiplier="178:159" id="2My-SZ-9FI"/> | |
507 | + </constraints> | |
508 | + </imageView> | |
509 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dZx-RX-5Ft"> | |
510 | + <rect key="frame" x="0.0" y="159" width="178" height="54"/> | |
511 | + <subviews> | |
512 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3Lx-WS-Jds"> | |
513 | + <rect key="frame" x="68" y="17" width="42" height="21"/> | |
514 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
515 | + <nil key="textColor"/> | |
516 | + <nil key="highlightedColor"/> | |
517 | + </label> | |
518 | + </subviews> | |
519 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
520 | + <constraints> | |
521 | + <constraint firstItem="3Lx-WS-Jds" firstAttribute="centerY" secondItem="dZx-RX-5Ft" secondAttribute="centerY" id="8xZ-RF-Xo9"/> | |
522 | + <constraint firstItem="3Lx-WS-Jds" firstAttribute="centerX" secondItem="dZx-RX-5Ft" secondAttribute="centerX" id="Iyc-ze-CXx"/> | |
523 | + </constraints> | |
524 | + </view> | |
525 | + </subviews> | |
526 | + </view> | |
527 | + <constraints> | |
528 | + <constraint firstAttribute="trailing" secondItem="92W-L6-BhN" secondAttribute="trailing" id="Hnf-FP-RYB"/> | |
529 | + <constraint firstItem="92W-L6-BhN" firstAttribute="leading" secondItem="Aw8-Kt-490" secondAttribute="leading" id="Qsu-Xp-Ezh"/> | |
530 | + <constraint firstItem="dZx-RX-5Ft" firstAttribute="leading" secondItem="Aw8-Kt-490" secondAttribute="leading" id="UHJ-V1-cnI"/> | |
531 | + <constraint firstAttribute="bottom" secondItem="dZx-RX-5Ft" secondAttribute="bottom" id="bha-Pa-MlI"/> | |
532 | + <constraint firstItem="dZx-RX-5Ft" firstAttribute="top" secondItem="92W-L6-BhN" secondAttribute="bottom" id="i5q-Ju-a8n"/> | |
533 | + <constraint firstAttribute="trailing" secondItem="dZx-RX-5Ft" secondAttribute="trailing" id="q87-7m-rZt"/> | |
534 | + <constraint firstItem="92W-L6-BhN" firstAttribute="top" secondItem="Aw8-Kt-490" secondAttribute="top" id="xil-Wb-gF6"/> | |
535 | + </constraints> | |
536 | + <connections> | |
537 | + <outlet property="name" destination="3Lx-WS-Jds" id="2cM-U4-yyk"/> | |
538 | + <outlet property="photo" destination="92W-L6-BhN" id="Vph-ZW-5X7"/> | |
539 | + </connections> | |
540 | + </collectionViewCell> | |
541 | + </cells> | |
542 | + <connections> | |
543 | + <outlet property="dataSource" destination="VUt-WI-s3d" id="Jtl-TT-zJd"/> | |
544 | + <outlet property="delegate" destination="VUt-WI-s3d" id="wNk-pR-x8E"/> | |
545 | + </connections> | |
546 | + </collectionView> | |
547 | + </subviews> | |
548 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | |
549 | + <constraints> | |
550 | + <constraint firstItem="ik7-C5-cjj" firstAttribute="leading" secondItem="I80-uH-88Q" secondAttribute="leading" id="QNX-pO-YVT"/> | |
551 | + <constraint firstItem="ik7-C5-cjj" firstAttribute="top" secondItem="pk3-CA-MMH" secondAttribute="bottom" id="UPB-FM-dWr"/> | |
552 | + <constraint firstItem="liG-my-8VL" firstAttribute="top" secondItem="ik7-C5-cjj" secondAttribute="bottom" id="lVo-nK-E5H"/> | |
553 | + <constraint firstAttribute="trailing" secondItem="ik7-C5-cjj" secondAttribute="trailing" id="qck-4n-jmn"/> | |
554 | + </constraints> | |
555 | + </view> | |
556 | + <connections> | |
557 | + <outlet property="collectionView" destination="ik7-C5-cjj" id="ZyT-nh-hNI"/> | |
558 | + </connections> | |
559 | + </viewController> | |
560 | + <placeholder placeholderIdentifier="IBFirstResponder" id="XL0-Rz-rxn" userLabel="First Responder" sceneMemberID="firstResponder"/> | |
561 | + </objects> | |
562 | + <point key="canvasLocation" x="2237.5999999999999" y="-131.78410794602701"/> | |
563 | + </scene> | |
564 | + </scenes> | |
10 | 565 | </document> | ... | ... |
YouerLiveVideo/YouerLiveVideo/controllers/User/UserEditViewController.swift
0 → 100644
... | ... | @@ -0,0 +1,222 @@ |
1 | +// | |
2 | +// UserEditViewController.swift | |
3 | +// YouerLiveVideo | |
4 | +// | |
5 | +// Created by 左丞 on 2017/5/23. | |
6 | +// Copyright © 2017年 左丞. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +import UIKit | |
10 | + | |
11 | +class UserEditViewController: UIViewController ,UIImagePickerControllerDelegate,UINavigationControllerDelegate{ | |
12 | + | |
13 | + @IBOutlet weak var tableView: UITableView! | |
14 | + | |
15 | + | |
16 | + var user = AppDelegate.instance().accountManager | |
17 | + var titleArr:[String] = ["昵称","账号","身份","所属学校"] | |
18 | + var contentArr:[String] = [] | |
19 | + override func viewDidLoad() { | |
20 | + super.viewDidLoad() | |
21 | + setContentArr() | |
22 | + // Do any additional setup after loading the view. | |
23 | + } | |
24 | + | |
25 | + func setContentArr(){ | |
26 | + var ident = "" | |
27 | + if user.isParent(){ | |
28 | + ident = "家长" | |
29 | + }else{ | |
30 | + ident = "教师" | |
31 | + } | |
32 | + contentArr = [user.name(),user.userid,ident,user.schoolName()] | |
33 | + } | |
34 | + | |
35 | + override func viewWillAppear(_ animated: Bool) { | |
36 | + super.viewWillAppear(animated) | |
37 | + self.tabBarController?.tabBar.isHidden = true | |
38 | + } | |
39 | + | |
40 | + override func viewWillDisappear(_ animated: Bool) { | |
41 | + super.viewWillDisappear(animated) | |
42 | + self.tabBarController?.hidesBottomBarWhenPushed = false | |
43 | + } | |
44 | + | |
45 | + | |
46 | + | |
47 | + override func didReceiveMemoryWarning() { | |
48 | + super.didReceiveMemoryWarning() | |
49 | + // Dispose of any resources that can be recreated. | |
50 | + } | |
51 | + | |
52 | + | |
53 | + // MARK: -UIImagePickerControllerDelegate | |
54 | + func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { | |
55 | + picker.dismiss(animated: true, completion: { () -> Void in | |
56 | + var oimage = info[UIImagePickerControllerOriginalImage] as? UIImage | |
57 | + oimage = oimage!.imageScaledToScale() | |
58 | + let filePath=FilesManager.imageFilePath(String(format:"%f.jpg",Date().timeIntervalSince1970)) | |
59 | + try? UIImageJPEGRepresentation(oimage!,0.7)!.write(to: URL(fileURLWithPath: filePath), options: [.atomic]) | |
60 | + self.updateImage(file: filePath) | |
61 | + }) | |
62 | + } | |
63 | + func updateImage(file:String){ | |
64 | + SVProgressHUD.show(withStatus: "图片上传中...") | |
65 | + SVProgressHUD.setDefaultMaskType(.black) | |
66 | + AppDelegate.instance().httpServer.uploadFile(file: NSURL(fileURLWithPath: file)) { (str, error) in | |
67 | + SVProgressHUD.dismiss() | |
68 | + if error == nil{ | |
69 | + if JSON.fromString(jsonString: str)!["status"].intValue == 1{ | |
70 | + httpJsonResule(jsonString: str, error: error, successHandler: { (json) in | |
71 | + let str=json.contentData().arrayValue[0].stringValue | |
72 | + AppDelegate.instance().httpServer.postUpdateUser(parameters: ["nickname":self.user.name() as AnyObject,"headimg":str as AnyObject], completionHandler: { (str, error) in | |
73 | + if error == nil{ | |
74 | + if JSON.fromString(jsonString: str)!["status"].intValue == 1{ | |
75 | + httpJsonResule(jsonString: str, error: error, successHandler: { (json) in | |
76 | + AppDelegate.instance().accountManager.refreshUserInfo(completionHandler: { (finish) in | |
77 | + if finish{ | |
78 | + self.user=AppDelegate.instance().accountManager | |
79 | + self.tableView.reloadData() | |
80 | + } | |
81 | + }) | |
82 | + }, failHandler: { (error) in | |
83 | + self.view.makeToast("头像修改失败") | |
84 | + }) | |
85 | + }else{ | |
86 | + self.view.makeToast("头像修改失败") | |
87 | + } | |
88 | + } | |
89 | + }) | |
90 | + }, failHandler: { (error) in | |
91 | + self.view.makeToast("图片上传失败") | |
92 | + }) | |
93 | + }else{ | |
94 | + self.view.makeToast("图片上传失败") | |
95 | + } | |
96 | + } | |
97 | + } | |
98 | + } | |
99 | + | |
100 | + | |
101 | + /* | |
102 | + // MARK: - Navigation | |
103 | + | |
104 | + // In a storyboard-based application, you will often want to do a little preparation before navigation | |
105 | + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | |
106 | + // Get the new view controller using segue.destinationViewController. | |
107 | + // Pass the selected object to the new view controller. | |
108 | + } | |
109 | + */ | |
110 | + | |
111 | +} | |
112 | + | |
113 | +extension UserEditViewController:UITableViewDelegate,UITableViewDataSource{ | |
114 | + | |
115 | + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | |
116 | + switch indexPath.row { | |
117 | + case 0: | |
118 | + let action=UIAlertController(title:"修改头像",message:nil,preferredStyle:UIAlertControllerStyle.actionSheet) | |
119 | + let photoAction=UIAlertAction(title: "从相册选择", style: UIAlertActionStyle.default) { (action) in | |
120 | + if cameraOrPhotPermissions(0, view: self.view){ | |
121 | + let vc = UIImagePickerController() | |
122 | + vc.delegate = self | |
123 | + vc.sourceType = .photoLibrary | |
124 | + self.present(vc, animated: true, completion: nil) | |
125 | + } | |
126 | + } | |
127 | + let cancleAction=UIAlertAction(title: "取消", style: UIAlertActionStyle.cancel) { (action) in | |
128 | + } | |
129 | + action.addAction(photoAction) | |
130 | + action.addAction(cancleAction) | |
131 | + self.present(action, animated: true, completion: nil) | |
132 | + case 1: | |
133 | + let alert=UIAlertController(title: "修改昵称", message: nil, preferredStyle: UIAlertControllerStyle.alert) | |
134 | + let cancle=UIAlertAction(title: "取消", style: UIAlertActionStyle.cancel, handler: nil) | |
135 | + let get=UIAlertAction(title: "修改", style: UIAlertActionStyle.default, handler: { (action) in | |
136 | + if alert.textFields![0].text != "" { | |
137 | + AppDelegate.instance().httpServer.postUpdateUser(parameters: ["nickname":alert.textFields![0].text! as AnyObject,"headimg":self.user.photo() as AnyObject], completionHandler: { (str, error) in | |
138 | + if error == nil{ | |
139 | + if JSON.fromString(jsonString: str)!["status"].intValue == 1{ | |
140 | + httpJsonResule(jsonString: str, error: error, successHandler: { (json) in | |
141 | + self.view.makeToast("昵称修改成功") | |
142 | + AppDelegate.instance().accountManager.refreshUserInfo(completionHandler: { (finish) in | |
143 | + if finish{ | |
144 | + self.user=AppDelegate.instance().accountManager | |
145 | + self.setContentArr() | |
146 | + self.tableView.reloadData() | |
147 | + } | |
148 | + }) | |
149 | + }, failHandler: { (error) in | |
150 | + self.view.makeToast("昵称修改失败") | |
151 | + }) | |
152 | + }else{ | |
153 | + self.view.makeToast("昵称修改失败") | |
154 | + } | |
155 | + } | |
156 | + }) | |
157 | + }else{ | |
158 | + self.view.makeToast("昵称修改不能为空") | |
159 | + } | |
160 | + }) | |
161 | + alert.addTextField(configurationHandler: { (textfield) in | |
162 | + textfield.placeholder="请输入修改的昵称" | |
163 | + }) | |
164 | + alert.addAction(cancle) | |
165 | + alert.addAction(get) | |
166 | + self.present(alert, animated: true, completion: nil) | |
167 | + break | |
168 | + default: | |
169 | + return | |
170 | + } | |
171 | + } | |
172 | + | |
173 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
174 | + if indexPath.row == 0{ | |
175 | + let cell = tableView.dequeueReusableCell(withIdentifier: "UserPhotoCell") as! UserPhotoCell | |
176 | + cell.userPhoto.sd_setImage(with: URL(string:self.user.photo()), placeholderImage: #imageLiteral(resourceName: "defphoto.png")) | |
177 | + return cell | |
178 | + }else{ | |
179 | + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! UserEditCell | |
180 | + cell.titleName.text = titleArr[indexPath.row-1] | |
181 | + cell.name.text = contentArr[indexPath.row-1] | |
182 | + if indexPath.row == 0{ | |
183 | + cell.changeBtn.isHidden = false | |
184 | + cell.changeBtn.tag = indexPath.row+100 | |
185 | + } | |
186 | + return cell | |
187 | + } | |
188 | + } | |
189 | + | |
190 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
191 | + return titleArr.count+1 | |
192 | + } | |
193 | + | |
194 | + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
195 | + if indexPath.row == 0{ | |
196 | + return 140 | |
197 | + } | |
198 | + return 65 | |
199 | + } | |
200 | + | |
201 | + | |
202 | +} | |
203 | + | |
204 | +class UserEditCell: UITableViewCell { | |
205 | + | |
206 | + @IBOutlet weak var changeBtn: UILabel! | |
207 | + @IBOutlet weak var titleName: UILabel! | |
208 | + @IBOutlet weak var name: UILabel! | |
209 | + override func awakeFromNib() { | |
210 | + changeBtn.isHidden = true | |
211 | + } | |
212 | +} | |
213 | + | |
214 | +class UserPhotoCell:UITableViewCell{ | |
215 | + | |
216 | + @IBOutlet weak var userPhoto: UIImageView! | |
217 | + | |
218 | + override func awakeFromNib() { | |
219 | + userPhoto.layer.cornerRadius = userPhoto.frame.size.height/2 | |
220 | + userPhoto.layer.masksToBounds = true | |
221 | + } | |
222 | +} | ... | ... |
YouerLiveVideo/YouerLiveVideo/controllers/User/UserViewController.swift
... | ... | @@ -10,17 +10,60 @@ import UIKit |
10 | 10 | |
11 | 11 | class UserViewController: UIViewController { |
12 | 12 | |
13 | + | |
14 | + @IBOutlet weak var historyList: UITableView! | |
15 | + @IBOutlet weak var userName: UILabel! | |
16 | + @IBOutlet weak var userPhoto: UIImageView! | |
17 | + var historyType:[String] = ["资源历史","微课历史"] | |
18 | + var myResourceType:[String] = ["我的资源","我的微课"] | |
19 | + var sectionList:[String] = ["历史记录","我的"] | |
20 | + var isCloseHistoryList:Bool = false | |
21 | + var isCloseMyResource:Bool = false | |
13 | 22 | override func viewDidLoad() { |
14 | 23 | super.viewDidLoad() |
15 | 24 | self.configTheme() |
25 | + self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "radio_s"), style: .plain, target: self, action: #selector(UserViewController.editBtnClick)) | |
26 | + setUserInfor() | |
16 | 27 | // Do any additional setup after loading the view. |
17 | 28 | } |
29 | + | |
30 | + func setUserInfor(){ | |
31 | + userPhoto.layer.cornerRadius = userPhoto.frame.size.height/2 | |
32 | + userPhoto.layer.masksToBounds = true | |
33 | + userName.text = AppDelegate.instance().accountManager.name() | |
34 | + userPhoto.sd_setImage(with: URL(string: AppDelegate.instance().accountManager.photo()), placeholderImage: #imageLiteral(resourceName: "defphoto.png")) | |
35 | + | |
36 | + } | |
18 | 37 | |
19 | 38 | override func didReceiveMemoryWarning() { |
20 | 39 | super.didReceiveMemoryWarning() |
21 | 40 | // Dispose of any resources that can be recreated. |
22 | 41 | } |
23 | 42 | |
43 | + @IBAction func userEditClcik(_ sender: Any) { | |
44 | + let vc = Story.instantiateViewControllerWithIdentifier("UserEditViewControllerVC", storyName: "User") as! UserEditViewController | |
45 | + self.navigationController?.pushViewController(vc, animated: true) | |
46 | + } | |
47 | + | |
48 | + func editBtnClick(){ | |
49 | + let vc = Story.instantiateViewControllerWithIdentifier("AppSettingViewControllerVC", storyName: "User") as! AppSettingViewController | |
50 | + vc.title = "设置" | |
51 | + self.navigationController?.pushViewController(vc, animated: true) | |
52 | + } | |
53 | + | |
54 | + func headerTap(tap:UITapGestureRecognizer){ | |
55 | + if tap.view?.tag == 200{ | |
56 | + isCloseHistoryList = !isCloseHistoryList | |
57 | + }else{ | |
58 | + isCloseMyResource = !isCloseMyResource | |
59 | + } | |
60 | + historyList.reloadData() | |
61 | + } | |
62 | + | |
63 | + override func viewWillAppear(_ animated: Bool) { | |
64 | + super.viewWillAppear(animated) | |
65 | + self.tabBarController?.tabBar.isHidden = false | |
66 | + } | |
24 | 67 | |
25 | 68 | /* |
26 | 69 | // MARK: - Navigation |
... | ... | @@ -33,3 +76,89 @@ class UserViewController: UIViewController { |
33 | 76 | */ |
34 | 77 | |
35 | 78 | } |
79 | + | |
80 | +extension UserViewController:UITableViewDelegate,UITableViewDataSource{ | |
81 | + | |
82 | + | |
83 | + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | |
84 | + let vc = Story.instantiateViewControllerWithIdentifier("HistoryViewControllerVC", storyName: "User") as! HistoryViewController | |
85 | + vc.type = indexPath.row | |
86 | + vc.isHistory = indexPath.section | |
87 | + vc.title = historyType[indexPath.row] | |
88 | + self.navigationController?.pushViewController(vc, animated: true) | |
89 | + } | |
90 | + | |
91 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
92 | + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! UserCenterHistoryCell | |
93 | + cell.titleName.text = historyType[indexPath.row] | |
94 | + return cell | |
95 | + } | |
96 | + | |
97 | + func numberOfSections(in tableView: UITableView) -> Int { | |
98 | + return sectionList.count | |
99 | + } | |
100 | + | |
101 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
102 | + if section == 0{ | |
103 | + if isCloseHistoryList{ | |
104 | + return 0 | |
105 | + } | |
106 | + return historyType.count | |
107 | + }else if section == 1{ | |
108 | + if isCloseMyResource{ | |
109 | + return 0 | |
110 | + } | |
111 | + return myResourceType.count | |
112 | + }else{ | |
113 | + return 0 | |
114 | + } | |
115 | + } | |
116 | + | |
117 | + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { | |
118 | + let headerView = UIView(frame: CGRect(x: 0, y: 0, width: getScreenWidth(), height: 44)) | |
119 | + headerView.backgroundColor = UIColor.white | |
120 | + let label = UILabel(frame: CGRect(x: 8, y: headerView.frame.height/2-10, width: 100, height: 21)) | |
121 | + label.text = sectionList[section] | |
122 | + label.sizeToFit() | |
123 | + headerView.addSubview(label) | |
124 | + | |
125 | + let image = UIImageView(frame: CGRect(x: 0, y: 0, width: 9, height: 15)) | |
126 | + image.center = CGPoint(x: getScreenWidth() - 20, y: headerView.frame.height/2) | |
127 | + image.image = #imageLiteral(resourceName: "arrow") | |
128 | + image.isUserInteractionEnabled = true | |
129 | + var angle:Double = 0 | |
130 | + if !isCloseHistoryList && section == 0{ | |
131 | + angle = M_PI_2 | |
132 | + } | |
133 | + if !isCloseMyResource && section == 1{ | |
134 | + angle = M_PI_2 | |
135 | + } | |
136 | + image.transform = CGAffineTransform(rotationAngle: CGFloat(angle)) | |
137 | + headerView.addSubview(image) | |
138 | + | |
139 | + let line = UILabel(frame: CGRect(x: 0, y: headerView.frame.height-1, width: getScreenWidth(), height: 1)) | |
140 | + line.backgroundColor = historyList.backgroundColor | |
141 | + headerView.addSubview(line) | |
142 | + headerView.tag = 200+section | |
143 | + headerView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(UserViewController.headerTap(tap:)))) | |
144 | + return headerView | |
145 | + } | |
146 | + | |
147 | + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { | |
148 | + return 44 | |
149 | + } | |
150 | + | |
151 | + func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { | |
152 | + return 1 | |
153 | + } | |
154 | + | |
155 | +} | |
156 | + | |
157 | +class UserCenterHistoryCell:UITableViewCell{ | |
158 | + | |
159 | + @IBOutlet weak var titleName: UILabel! | |
160 | + | |
161 | + | |
162 | + | |
163 | +} | |
164 | + | ... | ... |
YouerLiveVideo/YouerLiveVideo/util/account.swift
... | ... | @@ -71,6 +71,20 @@ class AccountManager{ |
71 | 71 | return "" |
72 | 72 | } |
73 | 73 | |
74 | + func schoolName()->String{ | |
75 | + if let info=rawUserInfo{ | |
76 | + return info.contentData()["f_SchoolName"].stringValue | |
77 | + } | |
78 | + return "" | |
79 | + } | |
80 | + | |
81 | + func isParent()->Bool{ | |
82 | + if let info=rawUserInfo{ | |
83 | + return info.contentData()["f_Identity"].boolValue | |
84 | + } | |
85 | + return false | |
86 | + } | |
87 | + | |
74 | 88 | |
75 | 89 | func logOut(){ |
76 | 90 | //退出云信登录 | ... | ... |