Commit 235e5ed1981a9df19ed17a53afa6b1f2be1fa64c
1 parent
0fcdc1f6
Exists in
newLive
no message
Showing
13 changed files
with
864 additions
and
21 deletions
Show diff stats
YouerLiveVideo/YouerLiveVideo.xcodeproj/project.pbxproj
@@ -25,6 +25,9 @@ | @@ -25,6 +25,9 @@ | ||
25 | 596026501DDD469200C6B5E8 /* RiverRunCommentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5960264C1DDD469200C6B5E8 /* RiverRunCommentManager.m */; }; | 25 | 596026501DDD469200C6B5E8 /* RiverRunCommentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5960264C1DDD469200C6B5E8 /* RiverRunCommentManager.m */; }; |
26 | 596026511DDD469200C6B5E8 /* RiverRunCommentUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 5960264E1DDD469200C6B5E8 /* RiverRunCommentUtil.m */; }; | 26 | 596026511DDD469200C6B5E8 /* RiverRunCommentUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 5960264E1DDD469200C6B5E8 /* RiverRunCommentUtil.m */; }; |
27 | 597185B51ECA990C00D7F478 /* Resource.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 597185B41ECA990C00D7F478 /* Resource.storyboard */; }; | 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 */; }; | ||
28 | 598A0E531E51941300273AB8 /* libNIMSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 598A0E4D1E51941300273AB8 /* libNIMSDK.a */; }; | 31 | 598A0E531E51941300273AB8 /* libNIMSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 598A0E4D1E51941300273AB8 /* libNIMSDK.a */; }; |
29 | 598A0E541E51941300273AB8 /* libaacplus.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 598A0E4F1E51941300273AB8 /* libaacplus.a */; }; | 32 | 598A0E541E51941300273AB8 /* libaacplus.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 598A0E4F1E51941300273AB8 /* libaacplus.a */; }; |
30 | 598A0E551E51941300273AB8 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 598A0E501E51941300273AB8 /* libcrypto.a */; }; | 33 | 598A0E551E51941300273AB8 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 598A0E501E51941300273AB8 /* libcrypto.a */; }; |
@@ -238,6 +241,9 @@ | @@ -238,6 +241,9 @@ | ||
238 | 5960264D1DDD469200C6B5E8 /* RiverRunCommentUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RiverRunCommentUtil.h; sourceTree = "<group>"; }; | 241 | 5960264D1DDD469200C6B5E8 /* RiverRunCommentUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RiverRunCommentUtil.h; sourceTree = "<group>"; }; |
239 | 5960264E1DDD469200C6B5E8 /* RiverRunCommentUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RiverRunCommentUtil.m; sourceTree = "<group>"; }; | 242 | 5960264E1DDD469200C6B5E8 /* RiverRunCommentUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RiverRunCommentUtil.m; sourceTree = "<group>"; }; |
240 | 597185B41ECA990C00D7F478 /* Resource.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Resource.storyboard; sourceTree = "<group>"; }; | 243 | 597185B41ECA990C00D7F478 /* Resource.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Resource.storyboard; sourceTree = "<group>"; }; |
244 | + 598939481ED3CFD8005DA462 /* UserEditViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserEditViewController.swift; sourceTree = "<group>"; }; | ||
245 | + 5989394A1ED3CFF4005DA462 /* AppSettingViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppSettingViewController.swift; sourceTree = "<group>"; }; | ||
246 | + 5989394C1ED4016D005DA462 /* HistoryViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HistoryViewController.swift; sourceTree = "<group>"; }; | ||
241 | 598A0E121E51941300273AB8 /* NIMChatroom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIMChatroom.h; sourceTree = "<group>"; }; | 247 | 598A0E121E51941300273AB8 /* NIMChatroom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIMChatroom.h; sourceTree = "<group>"; }; |
242 | 598A0E131E51941300273AB8 /* NIMChatroomEnterRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIMChatroomEnterRequest.h; sourceTree = "<group>"; }; | 248 | 598A0E131E51941300273AB8 /* NIMChatroomEnterRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIMChatroomEnterRequest.h; sourceTree = "<group>"; }; |
243 | 598A0E141E51941300273AB8 /* NIMChatroomMember.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIMChatroomMember.h; sourceTree = "<group>"; }; | 249 | 598A0E141E51941300273AB8 /* NIMChatroomMember.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NIMChatroomMember.h; sourceTree = "<group>"; }; |
@@ -1175,6 +1181,9 @@ | @@ -1175,6 +1181,9 @@ | ||
1175 | children = ( | 1181 | children = ( |
1176 | BFBB83D91ECC445D008B404B /* User.storyboard */, | 1182 | BFBB83D91ECC445D008B404B /* User.storyboard */, |
1177 | BFBB83E21ECC445D008B404B /* UserViewController.swift */, | 1183 | BFBB83E21ECC445D008B404B /* UserViewController.swift */, |
1184 | + 598939481ED3CFD8005DA462 /* UserEditViewController.swift */, | ||
1185 | + 5989394A1ED3CFF4005DA462 /* AppSettingViewController.swift */, | ||
1186 | + 5989394C1ED4016D005DA462 /* HistoryViewController.swift */, | ||
1178 | BFBB83DA1ECC445D008B404B /* UserCenter */, | 1187 | BFBB83DA1ECC445D008B404B /* UserCenter */, |
1179 | ); | 1188 | ); |
1180 | path = User; | 1189 | path = User; |
@@ -1506,12 +1515,14 @@ | @@ -1506,12 +1515,14 @@ | ||
1506 | BFC076781E3445F3008BAC79 /* DownLoad.swift in Sources */, | 1515 | BFC076781E3445F3008BAC79 /* DownLoad.swift in Sources */, |
1507 | 59AE3DFF1ECFDAFD003E2C62 /* TVStationChannelViewController.swift in Sources */, | 1516 | 59AE3DFF1ECFDAFD003E2C62 /* TVStationChannelViewController.swift in Sources */, |
1508 | BF25DFE71DDAA36A003EC0C1 /* MultipartFormData.swift in Sources */, | 1517 | BF25DFE71DDAA36A003EC0C1 /* MultipartFormData.swift in Sources */, |
1518 | + 5989394D1ED4016D005DA462 /* HistoryViewController.swift in Sources */, | ||
1509 | BF25DFF71DDAA36A003EC0C1 /* MKAnnotationView+WebCache.m in Sources */, | 1519 | BF25DFF71DDAA36A003EC0C1 /* MKAnnotationView+WebCache.m in Sources */, |
1510 | BF25DFFB1DDAA36A003EC0C1 /* SDImageCacheConfig.m in Sources */, | 1520 | BF25DFFB1DDAA36A003EC0C1 /* SDImageCacheConfig.m in Sources */, |
1511 | 5904FC4D1ECA8B8C00E631FF /* MicroCourseViewController.swift in Sources */, | 1521 | 5904FC4D1ECA8B8C00E631FF /* MicroCourseViewController.swift in Sources */, |
1512 | BFBB83E61ECC445D008B404B /* LoginViewController.swift in Sources */, | 1522 | BFBB83E61ECC445D008B404B /* LoginViewController.swift in Sources */, |
1513 | BF25DFE21DDAA36A003EC0C1 /* AFError.swift in Sources */, | 1523 | BF25DFE21DDAA36A003EC0C1 /* AFError.swift in Sources */, |
1514 | BF25DFEF1DDAA36A003EC0C1 /* ServerTrustPolicy.swift in Sources */, | 1524 | BF25DFEF1DDAA36A003EC0C1 /* ServerTrustPolicy.swift in Sources */, |
1525 | + 598939491ED3CFD8005DA462 /* UserEditViewController.swift in Sources */, | ||
1515 | BF25E0061DDAA36A003EC0C1 /* UIImageView+HighlightedWebCache.m in Sources */, | 1526 | BF25E0061DDAA36A003EC0C1 /* UIImageView+HighlightedWebCache.m in Sources */, |
1516 | BF25DFE41DDAA36A003EC0C1 /* DispatchQueue+Alamofire.swift in Sources */, | 1527 | BF25DFE41DDAA36A003EC0C1 /* DispatchQueue+Alamofire.swift in Sources */, |
1517 | BF25DFE81DDAA36A003EC0C1 /* NetworkReachabilityManager.swift in Sources */, | 1528 | BF25DFE81DDAA36A003EC0C1 /* NetworkReachabilityManager.swift in Sources */, |
@@ -1527,6 +1538,7 @@ | @@ -1527,6 +1538,7 @@ | ||
1527 | BF25DFF81DDAA36A003EC0C1 /* NSData+ImageContentType.m in Sources */, | 1538 | BF25DFF81DDAA36A003EC0C1 /* NSData+ImageContentType.m in Sources */, |
1528 | BF25E0151DDAAF73003EC0C1 /* SVIndefiniteAnimatedView.m in Sources */, | 1539 | BF25E0151DDAAF73003EC0C1 /* SVIndefiniteAnimatedView.m in Sources */, |
1529 | BFF5F4921DD5B7CA00D33B89 /* SwiftyJSON.swift in Sources */, | 1540 | BFF5F4921DD5B7CA00D33B89 /* SwiftyJSON.swift in Sources */, |
1541 | + 5989394B1ED3CFF4005DA462 /* AppSettingViewController.swift in Sources */, | ||
1530 | BF682F1E1ECE8772007632CA /* MainHomeTableViewController.swift in Sources */, | 1542 | BF682F1E1ECE8772007632CA /* MainHomeTableViewController.swift in Sources */, |
1531 | BF7B75A91E305A6D0011D5C7 /* UIView+MJExtension.m in Sources */, | 1543 | BF7B75A91E305A6D0011D5C7 /* UIView+MJExtension.m in Sources */, |
1532 | BF25DFEE1DDAA36A003EC0C1 /* Result.swift in Sources */, | 1544 | BF25DFEE1DDAA36A003EC0C1 /* Result.swift in Sources */, |
YouerLiveVideo/YouerLiveVideo/Assets.xcassets/arrow.imageset/Contents.json
@@ -6,7 +6,7 @@ | @@ -6,7 +6,7 @@ | ||
6 | }, | 6 | }, |
7 | { | 7 | { |
8 | "idiom" : "universal", | 8 | "idiom" : "universal", |
9 | - "filename" : "arrow.png", | 9 | + "filename" : "收拢.png", |
10 | "scale" : "2x" | 10 | "scale" : "2x" |
11 | }, | 11 | }, |
12 | { | 12 | { |
@@ -17,8 +17,5 @@ | @@ -17,8 +17,5 @@ | ||
17 | "info" : { | 17 | "info" : { |
18 | "version" : 1, | 18 | "version" : 1, |
19 | "author" : "xcode" | 19 | "author" : "xcode" |
20 | - }, | ||
21 | - "properties" : { | ||
22 | - "template-rendering-intent" : "template" | ||
23 | } | 20 | } |
24 | } | 21 | } |
25 | \ No newline at end of file | 22 | \ No newline at end of file |
YouerLiveVideo/YouerLiveVideo/Assets.xcassets/arrow.imageset/arrow.png
1002 Bytes
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 | <device id="retina4_7" orientation="portrait"> | 3 | <device id="retina4_7" orientation="portrait"> |
4 | <adaptation id="fullscreen"/> | 4 | <adaptation id="fullscreen"/> |
5 | </device> | 5 | </device> |
@@ -823,13 +823,124 @@ | @@ -823,13 +823,124 @@ | ||
823 | <view key="view" contentMode="scaleToFill" id="gTL-Bi-K7K"> | 823 | <view key="view" contentMode="scaleToFill" id="gTL-Bi-K7K"> |
824 | <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | 824 | <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> |
825 | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | 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 | </view> | 933 | </view> |
828 | <navigationItem key="navigationItem" title="用户" id="KBV-ql-Taf"/> | 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 | </viewController> | 940 | </viewController> |
830 | <placeholder placeholderIdentifier="IBFirstResponder" id="yJD-YG-4bQ" userLabel="First Responder" sceneMemberID="firstResponder"/> | 941 | <placeholder placeholderIdentifier="IBFirstResponder" id="yJD-YG-4bQ" userLabel="First Responder" sceneMemberID="firstResponder"/> |
831 | </objects> | 942 | </objects> |
832 | - <point key="canvasLocation" x="1206" y="2113"/> | 943 | + <point key="canvasLocation" x="1205.5999999999999" y="2112.5937031484259"/> |
833 | </scene> | 944 | </scene> |
834 | <!--用户--> | 945 | <!--用户--> |
835 | <scene sceneID="LVY-SG-ceP"> | 946 | <scene sceneID="LVY-SG-ceP"> |
@@ -1182,7 +1293,7 @@ | @@ -1182,7 +1293,7 @@ | ||
1182 | <rect key="frame" x="0.0" y="28" width="375" height="178"/> | 1293 | <rect key="frame" x="0.0" y="28" width="375" height="178"/> |
1183 | <autoresizingMask key="autoresizingMask"/> | 1294 | <autoresizingMask key="autoresizingMask"/> |
1184 | <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="8PR-k0-hwX" id="Bb0-oI-ccB"> | 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 | <autoresizingMask key="autoresizingMask"/> | 1297 | <autoresizingMask key="autoresizingMask"/> |
1187 | <subviews> | 1298 | <subviews> |
1188 | <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="m0I-jk-Iru"> | 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,7 +1629,7 @@ | ||
1518 | </scene> | 1629 | </scene> |
1519 | </scenes> | 1630 | </scenes> |
1520 | <resources> | 1631 | <resources> |
1521 | - <image name="arrow" width="33" height="33"/> | 1632 | + <image name="arrow" width="7" height="12"/> |
1522 | <image name="default" width="375" height="167"/> | 1633 | <image name="default" width="375" height="167"/> |
1523 | <image name="default_userRoom" width="19" height="17"/> | 1634 | <image name="default_userRoom" width="19" height="17"/> |
1524 | <image name="defphoto.png" width="256" height="256"/> | 1635 | <image name="defphoto.png" width="256" height="256"/> |
YouerLiveVideo/YouerLiveVideo/controllers/TVStation/ExcellentTVViewController.swift
@@ -7,7 +7,7 @@ | @@ -7,7 +7,7 @@ | ||
7 | // | 7 | // |
8 | 8 | ||
9 | import UIKit | 9 | import UIKit |
10 | - | 10 | +import AVKit |
11 | class ExcellentTVViewController: UIViewController { | 11 | class ExcellentTVViewController: UIViewController { |
12 | 12 | ||
13 | @IBOutlet weak var AllTitleView: UIView! | 13 | @IBOutlet weak var AllTitleView: UIView! |
@@ -204,6 +204,7 @@ extension ExcellentTVViewController:UICollectionViewDelegate,UICollectionViewDat | @@ -204,6 +204,7 @@ extension ExcellentTVViewController:UICollectionViewDelegate,UICollectionViewDat | ||
204 | 204 | ||
205 | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { | 205 | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
206 | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ExcellentTVViewCell | 206 | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ExcellentTVViewCell |
207 | + cell.superNacigation = self.navigationController | ||
207 | AppDelegate.instance().httpServer.postExcellentProgram(parameters: ["f_TelevisionId":TVStationClasses[titleSelectBtn].ch[classSelectBtn].id as AnyObject,"pageIndex":1 as AnyObject]) { (str, error) in | 208 | AppDelegate.instance().httpServer.postExcellentProgram(parameters: ["f_TelevisionId":TVStationClasses[titleSelectBtn].ch[classSelectBtn].id as AnyObject,"pageIndex":1 as AnyObject]) { (str, error) in |
208 | httpJsonResule(jsonString: str, error: error, successHandler: { (json) in | 209 | httpJsonResule(jsonString: str, error: error, successHandler: { (json) in |
209 | for item in json.contentData()["resultData"].arrayValue{ | 210 | for item in json.contentData()["resultData"].arrayValue{ |
@@ -236,7 +237,7 @@ class ExcellentTVViewCell: UICollectionViewCell,UICollectionViewDelegate,UIColl | @@ -236,7 +237,7 @@ class ExcellentTVViewCell: UICollectionViewCell,UICollectionViewDelegate,UIColl | ||
236 | var f_TelevisionId:String! | 237 | var f_TelevisionId:String! |
237 | @IBOutlet weak var inforCollectionView: UICollectionView! | 238 | @IBOutlet weak var inforCollectionView: UICollectionView! |
238 | var datatSet:[TVStationSubject] = [] | 239 | var datatSet:[TVStationSubject] = [] |
239 | - | 240 | + var superNacigation:UINavigationController! |
240 | 241 | ||
241 | 242 | ||
242 | override func awakeFromNib() { | 243 | override func awakeFromNib() { |
@@ -251,6 +252,7 @@ class ExcellentTVViewCell: UICollectionViewCell,UICollectionViewDelegate,UIColl | @@ -251,6 +252,7 @@ class ExcellentTVViewCell: UICollectionViewCell,UICollectionViewDelegate,UIColl | ||
251 | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell1", for: indexPath) as! ExcellentTVInforViewCell | 252 | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell1", for: indexPath) as! ExcellentTVInforViewCell |
252 | let item = datatSet[indexPath.row] | 253 | let item = datatSet[indexPath.row] |
253 | cell.model = item | 254 | cell.model = item |
255 | + cell.superNavigation = superNacigation | ||
254 | return cell | 256 | return cell |
255 | } | 257 | } |
256 | 258 | ||
@@ -274,7 +276,7 @@ class ExcellentTVInforViewCell: UICollectionViewCell{ | @@ -274,7 +276,7 @@ class ExcellentTVInforViewCell: UICollectionViewCell{ | ||
274 | @IBOutlet weak var tvStationLogo: UIImageView! | 276 | @IBOutlet weak var tvStationLogo: UIImageView! |
275 | @IBOutlet weak var subjectType: UILabel! | 277 | @IBOutlet weak var subjectType: UILabel! |
276 | @IBOutlet weak var playCount: UILabel! | 278 | @IBOutlet weak var playCount: UILabel! |
277 | - | 279 | + var superNavigation:UINavigationController! |
278 | var model:TVStationSubject? { | 280 | var model:TVStationSubject? { |
279 | didSet{ | 281 | didSet{ |
280 | self.tvStationLogo.sd_setImage(with: URL(string: model!.f_Img), placeholderImage: #imageLiteral(resourceName: "placeholder")) | 282 | self.tvStationLogo.sd_setImage(with: URL(string: model!.f_Img), placeholderImage: #imageLiteral(resourceName: "placeholder")) |
@@ -285,9 +287,17 @@ class ExcellentTVInforViewCell: UICollectionViewCell{ | @@ -285,9 +287,17 @@ class ExcellentTVInforViewCell: UICollectionViewCell{ | ||
285 | } | 287 | } |
286 | 288 | ||
287 | @IBAction func playBtnClick(_ sender: UIButton) { | 289 | @IBAction func playBtnClick(_ sender: UIButton) { |
288 | - | 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) | ||
289 | } | 300 | } |
290 | - | ||
291 | } | 301 | } |
292 | 302 | ||
293 | class TVSubjectInfor{ | 303 | class TVSubjectInfor{ |
YouerLiveVideo/YouerLiveVideo/controllers/TVStation/TVStation.storyboard
@@ -159,14 +159,14 @@ | @@ -159,14 +159,14 @@ | ||
159 | <rect key="frame" x="0.0" y="134.5" width="170" height="127.5"/> | 159 | <rect key="frame" x="0.0" y="134.5" width="170" height="127.5"/> |
160 | <subviews> | 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"> | 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="37.5" height="18"/> | ||
163 | - <fontDescription key="fontDescription" type="system" pointSize="15"/> | 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"/> | 164 | <nil key="textColor"/> |
165 | <nil key="highlightedColor"/> | 165 | <nil key="highlightedColor"/> |
166 | </label> | 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"> | 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="103.5" width="33" height="16"/> | ||
169 | - <fontDescription key="fontDescription" type="system" pointSize="13"/> | 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"/> | 170 | <nil key="textColor"/> |
171 | <nil key="highlightedColor"/> | 171 | <nil key="highlightedColor"/> |
172 | </label> | 172 | </label> |
@@ -712,6 +712,6 @@ | @@ -712,6 +712,6 @@ | ||
712 | </scene> | 712 | </scene> |
713 | </scenes> | 713 | </scenes> |
714 | <resources> | 714 | <resources> |
715 | - <image name="arrow" width="13" height="13"/> | 715 | + <image name="arrow" width="7" height="12"/> |
716 | </resources> | 716 | </resources> |
717 | </document> | 717 | </document> |
YouerLiveVideo/YouerLiveVideo/controllers/User/AppSettingViewController.swift
0 → 100644
@@ -0,0 +1,35 @@ | @@ -0,0 +1,35 @@ | ||
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 | + | ||
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 | + | ||
25 | + /* | ||
26 | + // MARK: - Navigation | ||
27 | + | ||
28 | + // In a storyboard-based application, you will often want to do a little preparation before navigation | ||
29 | + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | ||
30 | + // Get the new view controller using segue.destinationViewController. | ||
31 | + // Pass the selected object to the new view controller. | ||
32 | + } | ||
33 | + */ | ||
34 | + | ||
35 | +} |
YouerLiveVideo/YouerLiveVideo/controllers/User/HistoryViewController.swift
0 → 100644
@@ -0,0 +1,88 @@ | @@ -0,0 +1,88 @@ | ||
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-资源 2-电视台 | ||
17 | + override func viewDidLoad() { | ||
18 | + super.viewDidLoad() | ||
19 | + AppDelegate.instance().httpServer.getHistroyView(parameters: ["f_ViewType":type as AnyObject,"pageIndex":1 as AnyObject]) { (str, error) in | ||
20 | + httpJsonResule(jsonString: str, error: error, successHandler: { (json) in | ||
21 | + for item in json.contentData()["resultData"].arrayValue{ | ||
22 | + self.datatSet.append(TVStationSubject(json: item)) | ||
23 | + } | ||
24 | + self.collectionView.reloadData() | ||
25 | + }, failHandler: { (error) in | ||
26 | + | ||
27 | + }) | ||
28 | + } | ||
29 | + // Do any additional setup after loading the view. | ||
30 | + } | ||
31 | + | ||
32 | + override func didReceiveMemoryWarning() { | ||
33 | + super.didReceiveMemoryWarning() | ||
34 | + // Dispose of any resources that can be recreated. | ||
35 | + } | ||
36 | + | ||
37 | + | ||
38 | + /* | ||
39 | + // MARK: - Navigation | ||
40 | + | ||
41 | + // In a storyboard-based application, you will often want to do a little preparation before navigation | ||
42 | + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | ||
43 | + // Get the new view controller using segue.destinationViewController. | ||
44 | + // Pass the selected object to the new view controller. | ||
45 | + } | ||
46 | + */ | ||
47 | + | ||
48 | +} | ||
49 | + | ||
50 | +extension HistoryViewController:UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{ | ||
51 | + | ||
52 | + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { | ||
53 | + | ||
54 | + } | ||
55 | + | ||
56 | + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { | ||
57 | + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! TVStationClassCell | ||
58 | + let item = datatSet[indexPath.row] | ||
59 | + cell.model = item | ||
60 | + return cell | ||
61 | + } | ||
62 | + | ||
63 | + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { | ||
64 | + return datatSet.count | ||
65 | + } | ||
66 | + | ||
67 | + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { | ||
68 | + return CGSize(width: (getScreenWidth()-30)/2, height: 200) | ||
69 | + } | ||
70 | + | ||
71 | + | ||
72 | + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { | ||
73 | + return UIEdgeInsetsMake(10, 10, 10, 10) | ||
74 | + } | ||
75 | + | ||
76 | +} | ||
77 | + | ||
78 | +class TVStationClassCell: UICollectionViewCell { | ||
79 | + | ||
80 | + @IBOutlet weak var name: UILabel! | ||
81 | + @IBOutlet weak var photo: UIImageView! | ||
82 | + var model:TVStationSubject?{ | ||
83 | + didSet{ | ||
84 | + name.text = model!.f_Title | ||
85 | + photo.sd_setImage(with: URL(string:model!.f_Img), placeholderImage: #imageLiteral(resourceName: "placeholder")) | ||
86 | + } | ||
87 | + } | ||
88 | +} |
YouerLiveVideo/YouerLiveVideo/controllers/User/User.storyboard
@@ -5,6 +5,264 @@ | @@ -5,6 +5,264 @@ | ||
5 | </device> | 5 | </device> |
6 | <dependencies> | 6 | <dependencies> |
7 | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11757"/> | 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 | </dependencies> | 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 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | ||
171 | + </view> | ||
172 | + </viewController> | ||
173 | + <placeholder placeholderIdentifier="IBFirstResponder" id="44z-Sl-H4j" userLabel="First Responder" sceneMemberID="firstResponder"/> | ||
174 | + </objects> | ||
175 | + <point key="canvasLocation" x="1510" y="-131"/> | ||
176 | + </scene> | ||
177 | + <!--History View Controller--> | ||
178 | + <scene sceneID="U2w-Je-5CE"> | ||
179 | + <objects> | ||
180 | + <viewController storyboardIdentifier="HistoryViewControllerVC" id="VUt-WI-s3d" customClass="HistoryViewController" customModule="YouerLiveVideo" customModuleProvider="target" sceneMemberID="viewController"> | ||
181 | + <layoutGuides> | ||
182 | + <viewControllerLayoutGuide type="top" id="pk3-CA-MMH"/> | ||
183 | + <viewControllerLayoutGuide type="bottom" id="liG-my-8VL"/> | ||
184 | + </layoutGuides> | ||
185 | + <view key="view" contentMode="scaleToFill" id="I80-uH-88Q"> | ||
186 | + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | ||
187 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | ||
188 | + <subviews> | ||
189 | + <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="ik7-C5-cjj"> | ||
190 | + <rect key="frame" x="0.0" y="20" width="375" height="647"/> | ||
191 | + <color key="backgroundColor" red="0.93503493069999999" green="0.93562394380000002" blue="0.96585971120000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | ||
192 | + <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="UDJ-ZI-WP1"> | ||
193 | + <size key="itemSize" width="178" height="213"/> | ||
194 | + <size key="headerReferenceSize" width="0.0" height="0.0"/> | ||
195 | + <size key="footerReferenceSize" width="0.0" height="0.0"/> | ||
196 | + <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/> | ||
197 | + </collectionViewFlowLayout> | ||
198 | + <cells> | ||
199 | + <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="cell" id="Aw8-Kt-490" customClass="TVStationClassCell" customModule="YouerLiveVideo" customModuleProvider="target"> | ||
200 | + <rect key="frame" x="0.0" y="0.0" width="178" height="213"/> | ||
201 | + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | ||
202 | + <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center"> | ||
203 | + <rect key="frame" x="0.0" y="0.0" width="178" height="213"/> | ||
204 | + <autoresizingMask key="autoresizingMask"/> | ||
205 | + <subviews> | ||
206 | + <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="92W-L6-BhN"> | ||
207 | + <rect key="frame" x="0.0" y="0.0" width="178" height="159"/> | ||
208 | + <constraints> | ||
209 | + <constraint firstAttribute="width" secondItem="92W-L6-BhN" secondAttribute="height" multiplier="178:159" id="2My-SZ-9FI"/> | ||
210 | + </constraints> | ||
211 | + </imageView> | ||
212 | + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dZx-RX-5Ft"> | ||
213 | + <rect key="frame" x="0.0" y="159" width="178" height="54"/> | ||
214 | + <subviews> | ||
215 | + <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"> | ||
216 | + <rect key="frame" x="68" y="17" width="42" height="21"/> | ||
217 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | ||
218 | + <nil key="textColor"/> | ||
219 | + <nil key="highlightedColor"/> | ||
220 | + </label> | ||
221 | + </subviews> | ||
222 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | ||
223 | + <constraints> | ||
224 | + <constraint firstItem="3Lx-WS-Jds" firstAttribute="centerY" secondItem="dZx-RX-5Ft" secondAttribute="centerY" id="8xZ-RF-Xo9"/> | ||
225 | + <constraint firstItem="3Lx-WS-Jds" firstAttribute="centerX" secondItem="dZx-RX-5Ft" secondAttribute="centerX" id="Iyc-ze-CXx"/> | ||
226 | + </constraints> | ||
227 | + </view> | ||
228 | + </subviews> | ||
229 | + </view> | ||
230 | + <constraints> | ||
231 | + <constraint firstAttribute="trailing" secondItem="92W-L6-BhN" secondAttribute="trailing" id="Hnf-FP-RYB"/> | ||
232 | + <constraint firstItem="92W-L6-BhN" firstAttribute="leading" secondItem="Aw8-Kt-490" secondAttribute="leading" id="Qsu-Xp-Ezh"/> | ||
233 | + <constraint firstItem="dZx-RX-5Ft" firstAttribute="leading" secondItem="Aw8-Kt-490" secondAttribute="leading" id="UHJ-V1-cnI"/> | ||
234 | + <constraint firstAttribute="bottom" secondItem="dZx-RX-5Ft" secondAttribute="bottom" id="bha-Pa-MlI"/> | ||
235 | + <constraint firstItem="dZx-RX-5Ft" firstAttribute="top" secondItem="92W-L6-BhN" secondAttribute="bottom" id="i5q-Ju-a8n"/> | ||
236 | + <constraint firstAttribute="trailing" secondItem="dZx-RX-5Ft" secondAttribute="trailing" id="q87-7m-rZt"/> | ||
237 | + <constraint firstItem="92W-L6-BhN" firstAttribute="top" secondItem="Aw8-Kt-490" secondAttribute="top" id="xil-Wb-gF6"/> | ||
238 | + </constraints> | ||
239 | + <connections> | ||
240 | + <outlet property="name" destination="3Lx-WS-Jds" id="2cM-U4-yyk"/> | ||
241 | + <outlet property="photo" destination="92W-L6-BhN" id="Vph-ZW-5X7"/> | ||
242 | + </connections> | ||
243 | + </collectionViewCell> | ||
244 | + </cells> | ||
245 | + <connections> | ||
246 | + <outlet property="dataSource" destination="VUt-WI-s3d" id="Jtl-TT-zJd"/> | ||
247 | + <outlet property="delegate" destination="VUt-WI-s3d" id="wNk-pR-x8E"/> | ||
248 | + </connections> | ||
249 | + </collectionView> | ||
250 | + </subviews> | ||
251 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> | ||
252 | + <constraints> | ||
253 | + <constraint firstItem="ik7-C5-cjj" firstAttribute="leading" secondItem="I80-uH-88Q" secondAttribute="leading" id="QNX-pO-YVT"/> | ||
254 | + <constraint firstItem="ik7-C5-cjj" firstAttribute="top" secondItem="pk3-CA-MMH" secondAttribute="bottom" id="UPB-FM-dWr"/> | ||
255 | + <constraint firstItem="liG-my-8VL" firstAttribute="top" secondItem="ik7-C5-cjj" secondAttribute="bottom" id="lVo-nK-E5H"/> | ||
256 | + <constraint firstAttribute="trailing" secondItem="ik7-C5-cjj" secondAttribute="trailing" id="qck-4n-jmn"/> | ||
257 | + </constraints> | ||
258 | + </view> | ||
259 | + <connections> | ||
260 | + <outlet property="collectionView" destination="ik7-C5-cjj" id="ZyT-nh-hNI"/> | ||
261 | + </connections> | ||
262 | + </viewController> | ||
263 | + <placeholder placeholderIdentifier="IBFirstResponder" id="XL0-Rz-rxn" userLabel="First Responder" sceneMemberID="firstResponder"/> | ||
264 | + </objects> | ||
265 | + <point key="canvasLocation" x="2237.5999999999999" y="-131.78410794602701"/> | ||
266 | + </scene> | ||
267 | + </scenes> | ||
10 | </document> | 268 | </document> |
YouerLiveVideo/YouerLiveVideo/controllers/User/UserEditViewController.swift
0 → 100644
@@ -0,0 +1,211 @@ | @@ -0,0 +1,211 @@ | ||
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 | + | ||
23 | + // Do any additional setup after loading the view. | ||
24 | + } | ||
25 | + | ||
26 | + func setContentArr(){ | ||
27 | + var ident = "" | ||
28 | + if user.isParent(){ | ||
29 | + ident = "家长" | ||
30 | + }else{ | ||
31 | + ident = "教师" | ||
32 | + } | ||
33 | + contentArr = [user.name(),user.userid,ident,user.schoolName()] | ||
34 | + } | ||
35 | + | ||
36 | + override func didReceiveMemoryWarning() { | ||
37 | + super.didReceiveMemoryWarning() | ||
38 | + // Dispose of any resources that can be recreated. | ||
39 | + } | ||
40 | + | ||
41 | + | ||
42 | + // MARK: -UIImagePickerControllerDelegate | ||
43 | + func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { | ||
44 | + picker.dismiss(animated: true, completion: { () -> Void in | ||
45 | + var oimage = info[UIImagePickerControllerOriginalImage] as? UIImage | ||
46 | + oimage = oimage!.imageScaledToScale() | ||
47 | + let filePath=FilesManager.imageFilePath(String(format:"%f.jpg",Date().timeIntervalSince1970)) | ||
48 | + try? UIImageJPEGRepresentation(oimage!,0.7)!.write(to: URL(fileURLWithPath: filePath), options: [.atomic]) | ||
49 | + self.updateImage(file: filePath) | ||
50 | + }) | ||
51 | + } | ||
52 | + func updateImage(file:String){ | ||
53 | + SVProgressHUD.show(withStatus: "图片上传中...") | ||
54 | + SVProgressHUD.setDefaultMaskType(.black) | ||
55 | + AppDelegate.instance().httpServer.uploadFile(file: NSURL(fileURLWithPath: file)) { (str, error) in | ||
56 | + SVProgressHUD.dismiss() | ||
57 | + if error == nil{ | ||
58 | + if JSON.fromString(jsonString: str)!["status"].intValue == 1{ | ||
59 | + httpJsonResule(jsonString: str, error: error, successHandler: { (json) in | ||
60 | + let str=json.contentData().arrayValue[0].stringValue | ||
61 | + AppDelegate.instance().httpServer.postUpdateUser(parameters: ["nickname":self.user.name() as AnyObject,"headimg":str as AnyObject], completionHandler: { (str, error) in | ||
62 | + if error == nil{ | ||
63 | + if JSON.fromString(jsonString: str)!["status"].intValue == 1{ | ||
64 | + httpJsonResule(jsonString: str, error: error, successHandler: { (json) in | ||
65 | + AppDelegate.instance().accountManager.refreshUserInfo(completionHandler: { (finish) in | ||
66 | + if finish{ | ||
67 | + self.user=AppDelegate.instance().accountManager | ||
68 | + self.tableView.reloadData() | ||
69 | + } | ||
70 | + }) | ||
71 | + }, failHandler: { (error) in | ||
72 | + self.view.makeToast("头像修改失败") | ||
73 | + }) | ||
74 | + }else{ | ||
75 | + self.view.makeToast("头像修改失败") | ||
76 | + } | ||
77 | + } | ||
78 | + }) | ||
79 | + }, failHandler: { (error) in | ||
80 | + self.view.makeToast("图片上传失败") | ||
81 | + }) | ||
82 | + }else{ | ||
83 | + self.view.makeToast("图片上传失败") | ||
84 | + } | ||
85 | + } | ||
86 | + } | ||
87 | + } | ||
88 | + | ||
89 | + | ||
90 | + /* | ||
91 | + // MARK: - Navigation | ||
92 | + | ||
93 | + // In a storyboard-based application, you will often want to do a little preparation before navigation | ||
94 | + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { | ||
95 | + // Get the new view controller using segue.destinationViewController. | ||
96 | + // Pass the selected object to the new view controller. | ||
97 | + } | ||
98 | + */ | ||
99 | + | ||
100 | +} | ||
101 | + | ||
102 | +extension UserEditViewController:UITableViewDelegate,UITableViewDataSource{ | ||
103 | + | ||
104 | + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | ||
105 | + switch indexPath.row { | ||
106 | + case 0: | ||
107 | + let action=UIAlertController(title:"修改头像",message:nil,preferredStyle:UIAlertControllerStyle.actionSheet) | ||
108 | + let photoAction=UIAlertAction(title: "从相册选择", style: UIAlertActionStyle.default) { (action) in | ||
109 | + if cameraOrPhotPermissions(0, view: self.view){ | ||
110 | + let vc = UIImagePickerController() | ||
111 | + vc.delegate = self | ||
112 | + vc.sourceType = .photoLibrary | ||
113 | + self.present(vc, animated: true, completion: nil) | ||
114 | + } | ||
115 | + } | ||
116 | + let cancleAction=UIAlertAction(title: "取消", style: UIAlertActionStyle.cancel) { (action) in | ||
117 | + } | ||
118 | + action.addAction(photoAction) | ||
119 | + action.addAction(cancleAction) | ||
120 | + self.present(action, animated: true, completion: nil) | ||
121 | + case 1: | ||
122 | + let alert=UIAlertController(title: "修改昵称", message: nil, preferredStyle: UIAlertControllerStyle.alert) | ||
123 | + let cancle=UIAlertAction(title: "取消", style: UIAlertActionStyle.cancel, handler: nil) | ||
124 | + let get=UIAlertAction(title: "修改", style: UIAlertActionStyle.default, handler: { (action) in | ||
125 | + if alert.textFields![0].text != "" { | ||
126 | + AppDelegate.instance().httpServer.postUpdateUser(parameters: ["nickname":alert.textFields![0].text! as AnyObject,"headimg":self.user.photo() as AnyObject], completionHandler: { (str, error) in | ||
127 | + if error == nil{ | ||
128 | + if JSON.fromString(jsonString: str)!["status"].intValue == 1{ | ||
129 | + httpJsonResule(jsonString: str, error: error, successHandler: { (json) in | ||
130 | + self.view.makeToast("昵称修改成功") | ||
131 | + AppDelegate.instance().accountManager.refreshUserInfo(completionHandler: { (finish) in | ||
132 | + if finish{ | ||
133 | + self.user=AppDelegate.instance().accountManager | ||
134 | + self.setContentArr() | ||
135 | + self.tableView.reloadData() | ||
136 | + } | ||
137 | + }) | ||
138 | + }, failHandler: { (error) in | ||
139 | + self.view.makeToast("昵称修改失败") | ||
140 | + }) | ||
141 | + }else{ | ||
142 | + self.view.makeToast("昵称修改失败") | ||
143 | + } | ||
144 | + } | ||
145 | + }) | ||
146 | + }else{ | ||
147 | + self.view.makeToast("昵称修改不能为空") | ||
148 | + } | ||
149 | + }) | ||
150 | + alert.addTextField(configurationHandler: { (textfield) in | ||
151 | + textfield.placeholder="请输入修改的昵称" | ||
152 | + }) | ||
153 | + alert.addAction(cancle) | ||
154 | + alert.addAction(get) | ||
155 | + self.present(alert, animated: true, completion: nil) | ||
156 | + break | ||
157 | + default: | ||
158 | + return | ||
159 | + } | ||
160 | + } | ||
161 | + | ||
162 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | ||
163 | + if indexPath.row == 0{ | ||
164 | + let cell = tableView.dequeueReusableCell(withIdentifier: "UserPhotoCell") as! UserPhotoCell | ||
165 | + cell.userPhoto.sd_setImage(with: URL(string:self.user.photo()), placeholderImage: #imageLiteral(resourceName: "defphoto.png")) | ||
166 | + return cell | ||
167 | + }else{ | ||
168 | + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! UserEditCell | ||
169 | + cell.titleName.text = titleArr[indexPath.row-1] | ||
170 | + cell.name.text = contentArr[indexPath.row-1] | ||
171 | + if indexPath.row == 0{ | ||
172 | + cell.changeBtn.isHidden = false | ||
173 | + cell.changeBtn.tag = indexPath.row+100 | ||
174 | + } | ||
175 | + return cell | ||
176 | + } | ||
177 | + } | ||
178 | + | ||
179 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | ||
180 | + return titleArr.count+1 | ||
181 | + } | ||
182 | + | ||
183 | + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | ||
184 | + if indexPath.row == 0{ | ||
185 | + return 140 | ||
186 | + } | ||
187 | + return 65 | ||
188 | + } | ||
189 | + | ||
190 | + | ||
191 | +} | ||
192 | + | ||
193 | +class UserEditCell: UITableViewCell { | ||
194 | + | ||
195 | + @IBOutlet weak var changeBtn: UILabel! | ||
196 | + @IBOutlet weak var titleName: UILabel! | ||
197 | + @IBOutlet weak var name: UILabel! | ||
198 | + override func awakeFromNib() { | ||
199 | + changeBtn.isHidden = true | ||
200 | + } | ||
201 | +} | ||
202 | + | ||
203 | +class UserPhotoCell:UITableViewCell{ | ||
204 | + | ||
205 | + @IBOutlet weak var userPhoto: UIImageView! | ||
206 | + | ||
207 | + override func awakeFromNib() { | ||
208 | + userPhoto.layer.cornerRadius = userPhoto.frame.size.height/2 | ||
209 | + userPhoto.layer.masksToBounds = true | ||
210 | + } | ||
211 | +} |
YouerLiveVideo/YouerLiveVideo/controllers/User/UserViewController.swift
@@ -10,18 +10,50 @@ import UIKit | @@ -10,18 +10,50 @@ import UIKit | ||
10 | 10 | ||
11 | class UserViewController: UIViewController { | 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 isCloseHistoryList:Bool = false | ||
13 | override func viewDidLoad() { | 19 | override func viewDidLoad() { |
14 | super.viewDidLoad() | 20 | super.viewDidLoad() |
15 | self.configTheme() | 21 | self.configTheme() |
22 | + self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "radio_s"), style: .plain, target: self, action: #selector(UserViewController.editBtnClick)) | ||
23 | + setUserInfor() | ||
16 | // Do any additional setup after loading the view. | 24 | // Do any additional setup after loading the view. |
17 | } | 25 | } |
26 | + | ||
27 | + func setUserInfor(){ | ||
28 | + userPhoto.layer.cornerRadius = userPhoto.frame.size.height/2 | ||
29 | + userPhoto.layer.masksToBounds = true | ||
30 | + userName.text = AppDelegate.instance().accountManager.name() | ||
31 | + userPhoto.sd_setImage(with: URL(string: AppDelegate.instance().accountManager.photo()), placeholderImage: #imageLiteral(resourceName: "defphoto.png")) | ||
32 | + | ||
33 | + } | ||
18 | 34 | ||
19 | override func didReceiveMemoryWarning() { | 35 | override func didReceiveMemoryWarning() { |
20 | super.didReceiveMemoryWarning() | 36 | super.didReceiveMemoryWarning() |
21 | // Dispose of any resources that can be recreated. | 37 | // Dispose of any resources that can be recreated. |
22 | } | 38 | } |
23 | 39 | ||
40 | + @IBAction func userEditClcik(_ sender: Any) { | ||
41 | + print("编译个人资料") | ||
42 | + let vc = Story.instantiateViewControllerWithIdentifier("UserEditViewControllerVC", storyName: "User") as! UserEditViewController | ||
43 | + self.navigationController?.pushViewController(vc, animated: true) | ||
44 | + } | ||
45 | + | ||
46 | + func editBtnClick(){ | ||
47 | + print("编译设置") | ||
48 | + let vc = Story.instantiateViewControllerWithIdentifier("AppSettingViewControllerVC", storyName: "User") as! AppSettingViewController | ||
49 | + self.navigationController?.pushViewController(vc, animated: true) | ||
50 | + } | ||
24 | 51 | ||
52 | + func headerTap(tap:UITapGestureRecognizer){ | ||
53 | + isCloseHistoryList = !isCloseHistoryList | ||
54 | + historyList.reloadData() | ||
55 | + } | ||
56 | + | ||
25 | /* | 57 | /* |
26 | // MARK: - Navigation | 58 | // MARK: - Navigation |
27 | 59 | ||
@@ -33,3 +65,78 @@ class UserViewController: UIViewController { | @@ -33,3 +65,78 @@ class UserViewController: UIViewController { | ||
33 | */ | 65 | */ |
34 | 66 | ||
35 | } | 67 | } |
68 | + | ||
69 | +extension UserViewController:UITableViewDelegate,UITableViewDataSource{ | ||
70 | + | ||
71 | + | ||
72 | + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | ||
73 | + let vc = Story.instantiateViewControllerWithIdentifier("HistoryViewControllerVC", storyName: "User") as! HistoryViewController | ||
74 | + vc.type = indexPath.row | ||
75 | + vc.title = historyType[indexPath.row] | ||
76 | + self.navigationController?.pushViewController(vc, animated: true) | ||
77 | + } | ||
78 | + | ||
79 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | ||
80 | + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! UserCenterHistoryCell | ||
81 | + cell.titleName.text = historyType[indexPath.row] | ||
82 | + return cell | ||
83 | + } | ||
84 | + | ||
85 | + func numberOfSections(in tableView: UITableView) -> Int { | ||
86 | + return 1 | ||
87 | + } | ||
88 | + | ||
89 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | ||
90 | + if isCloseHistoryList { | ||
91 | + return 0 | ||
92 | + } | ||
93 | + return historyType.count | ||
94 | + } | ||
95 | + | ||
96 | + func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { | ||
97 | + let headerView = UIView(frame: CGRect(x: 0, y: 0, width: getScreenWidth(), height: 44)) | ||
98 | + headerView.backgroundColor = UIColor.white | ||
99 | + let label = UILabel(frame: CGRect(x: 8, y: headerView.frame.height/2-10, width: 100, height: 21)) | ||
100 | + label.text = "历史记录" | ||
101 | + label.sizeToFit() | ||
102 | + headerView.addSubview(label) | ||
103 | + | ||
104 | + let image = UIImageView(frame: CGRect(x: 0, y: 0, width: 9, height: 15)) | ||
105 | + image.center = CGPoint(x: getScreenWidth() - 20, y: headerView.frame.height/2) | ||
106 | + image.image = #imageLiteral(resourceName: "arrow") | ||
107 | + image.isUserInteractionEnabled = true | ||
108 | + var angle:Double = 0 | ||
109 | + if !isCloseHistoryList{ | ||
110 | + angle = M_PI_2 | ||
111 | + } | ||
112 | + image.transform = CGAffineTransform(rotationAngle: CGFloat(angle)) | ||
113 | + headerView.addSubview(image) | ||
114 | + | ||
115 | + let line = UILabel(frame: CGRect(x: 0, y: headerView.frame.height-1, width: getScreenWidth(), height: 1)) | ||
116 | + line.backgroundColor = historyList.backgroundColor | ||
117 | + headerView.addSubview(line) | ||
118 | + | ||
119 | + headerView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(UserViewController.headerTap(tap:)))) | ||
120 | + return headerView | ||
121 | + } | ||
122 | + | ||
123 | + func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { | ||
124 | + return 44 | ||
125 | + } | ||
126 | + | ||
127 | + func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { | ||
128 | + return 1 | ||
129 | + } | ||
130 | + | ||
131 | + | ||
132 | + | ||
133 | +} | ||
134 | + | ||
135 | +class UserCenterHistoryCell:UITableViewCell{ | ||
136 | + | ||
137 | + @IBOutlet weak var titleName: UILabel! | ||
138 | + | ||
139 | + | ||
140 | + | ||
141 | +} | ||
142 | + |
YouerLiveVideo/YouerLiveVideo/util/account.swift
@@ -71,6 +71,20 @@ class AccountManager{ | @@ -71,6 +71,20 @@ class AccountManager{ | ||
71 | return "" | 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 | func logOut(){ | 89 | func logOut(){ |
76 | //退出云信登录 | 90 | //退出云信登录 |