Commit d40cfad713f6f8b51732ba49cfc23aca4e97caf1
1 parent
8388ddfe
屏幕旋转
Showing
31 changed files
with
3218 additions
and
39 deletions
LiveVideoCloud/LiveVideoCloud.xcodeproj/project.pbxproj
| @@ -7,8 +7,18 @@ | @@ -7,8 +7,18 @@ | ||
| 7 | objects = { | 7 | objects = { |
| 8 | 8 | ||
| 9 | /* Begin PBXBuildFile section */ | 9 | /* Begin PBXBuildFile section */ |
| 10 | - 812E503E1E767A8D004F5FCD /* LVCPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 812E503D1E767A8D004F5FCD /* LVCPlayer.m */; }; | ||
| 11 | - 812E50411E768181004F5FCD /* LVCLivePlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 812E50401E768181004F5FCD /* LVCLivePlayerController.m */; }; | 10 | + 810B64E01E779AE900133E15 /* LVCPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 810B64DF1E779AE900133E15 /* LVCPlayer.m */; }; |
| 11 | + 810B64E31E779AFE00133E15 /* LVCLivePlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 810B64E21E779AFE00133E15 /* LVCLivePlayerController.m */; }; | ||
| 12 | + 810B64FE1E779B1F00133E15 /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 810B64E61E779B1F00133E15 /* MASCompositeConstraint.m */; }; | ||
| 13 | + 810B64FF1E779B1F00133E15 /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 810B64E91E779B1F00133E15 /* MASConstraint.m */; }; | ||
| 14 | + 810B65001E779B1F00133E15 /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 810B64EB1E779B1F00133E15 /* MASConstraintMaker.m */; }; | ||
| 15 | + 810B65011E779B1F00133E15 /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 810B64ED1E779B1F00133E15 /* MASLayoutConstraint.m */; }; | ||
| 16 | + 810B65021E779B1F00133E15 /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 810B64F11E779B1F00133E15 /* MASViewAttribute.m */; }; | ||
| 17 | + 810B65031E779B1F00133E15 /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 810B64F31E779B1F00133E15 /* MASViewConstraint.m */; }; | ||
| 18 | + 810B65041E779B1F00133E15 /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 810B64F51E779B1F00133E15 /* NSArray+MASAdditions.m */; }; | ||
| 19 | + 810B65051E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 810B64F81E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.m */; }; | ||
| 20 | + 810B65061E779B1F00133E15 /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 810B64FA1E779B1F00133E15 /* View+MASAdditions.m */; }; | ||
| 21 | + 810B65071E779B1F00133E15 /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 810B64FD1E779B1F00133E15 /* ViewController+MASAdditions.m */; }; | ||
| 12 | 812E50531E7699DC004F5FCD /* CNLivePlayerSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 812E50501E7699DC004F5FCD /* CNLivePlayerSDK.framework */; }; | 22 | 812E50531E7699DC004F5FCD /* CNLivePlayerSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 812E50501E7699DC004F5FCD /* CNLivePlayerSDK.framework */; }; |
| 13 | 812E50541E7699DC004F5FCD /* KSYGPUResource.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 812E50511E7699DC004F5FCD /* KSYGPUResource.bundle */; }; | 23 | 812E50541E7699DC004F5FCD /* KSYGPUResource.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 812E50511E7699DC004F5FCD /* KSYGPUResource.bundle */; }; |
| 14 | 812E50551E7699E9004F5FCD /* CNLiveMsgTools.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 812E504F1E7699DC004F5FCD /* CNLiveMsgTools.framework */; }; | 24 | 812E50551E7699E9004F5FCD /* CNLiveMsgTools.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 812E504F1E7699DC004F5FCD /* CNLiveMsgTools.framework */; }; |
| @@ -153,10 +163,35 @@ | @@ -153,10 +163,35 @@ | ||
| 153 | /* End PBXCopyFilesBuildPhase section */ | 163 | /* End PBXCopyFilesBuildPhase section */ |
| 154 | 164 | ||
| 155 | /* Begin PBXFileReference section */ | 165 | /* Begin PBXFileReference section */ |
| 156 | - 812E503C1E767A8D004F5FCD /* LVCPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCPlayer.h; sourceTree = "<group>"; }; | ||
| 157 | - 812E503D1E767A8D004F5FCD /* LVCPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCPlayer.m; sourceTree = "<group>"; }; | ||
| 158 | - 812E503F1E768181004F5FCD /* LVCLivePlayerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCLivePlayerController.h; sourceTree = "<group>"; }; | ||
| 159 | - 812E50401E768181004F5FCD /* LVCLivePlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCLivePlayerController.m; sourceTree = "<group>"; }; | 166 | + 810B64DE1E779AE900133E15 /* LVCPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCPlayer.h; sourceTree = "<group>"; }; |
| 167 | + 810B64DF1E779AE900133E15 /* LVCPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCPlayer.m; sourceTree = "<group>"; }; | ||
| 168 | + 810B64E11E779AFE00133E15 /* LVCLivePlayerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCLivePlayerController.h; sourceTree = "<group>"; }; | ||
| 169 | + 810B64E21E779AFE00133E15 /* LVCLivePlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCLivePlayerController.m; sourceTree = "<group>"; }; | ||
| 170 | + 810B64E51E779B1F00133E15 /* MASCompositeConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASCompositeConstraint.h; sourceTree = "<group>"; }; | ||
| 171 | + 810B64E61E779B1F00133E15 /* MASCompositeConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASCompositeConstraint.m; sourceTree = "<group>"; }; | ||
| 172 | + 810B64E71E779B1F00133E15 /* MASConstraint+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MASConstraint+Private.h"; sourceTree = "<group>"; }; | ||
| 173 | + 810B64E81E779B1F00133E15 /* MASConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASConstraint.h; sourceTree = "<group>"; }; | ||
| 174 | + 810B64E91E779B1F00133E15 /* MASConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASConstraint.m; sourceTree = "<group>"; }; | ||
| 175 | + 810B64EA1E779B1F00133E15 /* MASConstraintMaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASConstraintMaker.h; sourceTree = "<group>"; }; | ||
| 176 | + 810B64EB1E779B1F00133E15 /* MASConstraintMaker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASConstraintMaker.m; sourceTree = "<group>"; }; | ||
| 177 | + 810B64EC1E779B1F00133E15 /* MASLayoutConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASLayoutConstraint.h; sourceTree = "<group>"; }; | ||
| 178 | + 810B64ED1E779B1F00133E15 /* MASLayoutConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASLayoutConstraint.m; sourceTree = "<group>"; }; | ||
| 179 | + 810B64EE1E779B1F00133E15 /* Masonry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Masonry.h; sourceTree = "<group>"; }; | ||
| 180 | + 810B64EF1E779B1F00133E15 /* MASUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASUtilities.h; sourceTree = "<group>"; }; | ||
| 181 | + 810B64F01E779B1F00133E15 /* MASViewAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASViewAttribute.h; sourceTree = "<group>"; }; | ||
| 182 | + 810B64F11E779B1F00133E15 /* MASViewAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewAttribute.m; sourceTree = "<group>"; }; | ||
| 183 | + 810B64F21E779B1F00133E15 /* MASViewConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASViewConstraint.h; sourceTree = "<group>"; }; | ||
| 184 | + 810B64F31E779B1F00133E15 /* MASViewConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewConstraint.m; sourceTree = "<group>"; }; | ||
| 185 | + 810B64F41E779B1F00133E15 /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MASAdditions.h"; sourceTree = "<group>"; }; | ||
| 186 | + 810B64F51E779B1F00133E15 /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+MASAdditions.m"; sourceTree = "<group>"; }; | ||
| 187 | + 810B64F61E779B1F00133E15 /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MASShorthandAdditions.h"; sourceTree = "<group>"; }; | ||
| 188 | + 810B64F71E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = "<group>"; }; | ||
| 189 | + 810B64F81E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = "<group>"; }; | ||
| 190 | + 810B64F91E779B1F00133E15 /* View+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "View+MASAdditions.h"; sourceTree = "<group>"; }; | ||
| 191 | + 810B64FA1E779B1F00133E15 /* View+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "View+MASAdditions.m"; sourceTree = "<group>"; }; | ||
| 192 | + 810B64FB1E779B1F00133E15 /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "View+MASShorthandAdditions.h"; sourceTree = "<group>"; }; | ||
| 193 | + 810B64FC1E779B1F00133E15 /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ViewController+MASAdditions.h"; sourceTree = "<group>"; }; | ||
| 194 | + 810B64FD1E779B1F00133E15 /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ViewController+MASAdditions.m"; sourceTree = "<group>"; }; | ||
| 160 | 812E504F1E7699DC004F5FCD /* CNLiveMsgTools.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNLiveMsgTools.framework; sourceTree = "<group>"; }; | 195 | 812E504F1E7699DC004F5FCD /* CNLiveMsgTools.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNLiveMsgTools.framework; sourceTree = "<group>"; }; |
| 161 | 812E50501E7699DC004F5FCD /* CNLivePlayerSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNLivePlayerSDK.framework; sourceTree = "<group>"; }; | 196 | 812E50501E7699DC004F5FCD /* CNLivePlayerSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNLivePlayerSDK.framework; sourceTree = "<group>"; }; |
| 162 | 812E50511E7699DC004F5FCD /* KSYGPUResource.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = KSYGPUResource.bundle; sourceTree = "<group>"; }; | 197 | 812E50511E7699DC004F5FCD /* KSYGPUResource.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = KSYGPUResource.bundle; sourceTree = "<group>"; }; |
| @@ -411,6 +446,38 @@ | @@ -411,6 +446,38 @@ | ||
| 411 | /* End PBXFrameworksBuildPhase section */ | 446 | /* End PBXFrameworksBuildPhase section */ |
| 412 | 447 | ||
| 413 | /* Begin PBXGroup section */ | 448 | /* Begin PBXGroup section */ |
| 449 | + 810B64E41E779B1F00133E15 /* Masonry */ = { | ||
| 450 | + isa = PBXGroup; | ||
| 451 | + children = ( | ||
| 452 | + 810B64E51E779B1F00133E15 /* MASCompositeConstraint.h */, | ||
| 453 | + 810B64E61E779B1F00133E15 /* MASCompositeConstraint.m */, | ||
| 454 | + 810B64E71E779B1F00133E15 /* MASConstraint+Private.h */, | ||
| 455 | + 810B64E81E779B1F00133E15 /* MASConstraint.h */, | ||
| 456 | + 810B64E91E779B1F00133E15 /* MASConstraint.m */, | ||
| 457 | + 810B64EA1E779B1F00133E15 /* MASConstraintMaker.h */, | ||
| 458 | + 810B64EB1E779B1F00133E15 /* MASConstraintMaker.m */, | ||
| 459 | + 810B64EC1E779B1F00133E15 /* MASLayoutConstraint.h */, | ||
| 460 | + 810B64ED1E779B1F00133E15 /* MASLayoutConstraint.m */, | ||
| 461 | + 810B64EE1E779B1F00133E15 /* Masonry.h */, | ||
| 462 | + 810B64EF1E779B1F00133E15 /* MASUtilities.h */, | ||
| 463 | + 810B64F01E779B1F00133E15 /* MASViewAttribute.h */, | ||
| 464 | + 810B64F11E779B1F00133E15 /* MASViewAttribute.m */, | ||
| 465 | + 810B64F21E779B1F00133E15 /* MASViewConstraint.h */, | ||
| 466 | + 810B64F31E779B1F00133E15 /* MASViewConstraint.m */, | ||
| 467 | + 810B64F41E779B1F00133E15 /* NSArray+MASAdditions.h */, | ||
| 468 | + 810B64F51E779B1F00133E15 /* NSArray+MASAdditions.m */, | ||
| 469 | + 810B64F61E779B1F00133E15 /* NSArray+MASShorthandAdditions.h */, | ||
| 470 | + 810B64F71E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.h */, | ||
| 471 | + 810B64F81E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.m */, | ||
| 472 | + 810B64F91E779B1F00133E15 /* View+MASAdditions.h */, | ||
| 473 | + 810B64FA1E779B1F00133E15 /* View+MASAdditions.m */, | ||
| 474 | + 810B64FB1E779B1F00133E15 /* View+MASShorthandAdditions.h */, | ||
| 475 | + 810B64FC1E779B1F00133E15 /* ViewController+MASAdditions.h */, | ||
| 476 | + 810B64FD1E779B1F00133E15 /* ViewController+MASAdditions.m */, | ||
| 477 | + ); | ||
| 478 | + path = Masonry; | ||
| 479 | + sourceTree = "<group>"; | ||
| 480 | + }; | ||
| 414 | 812E504D1E769995004F5FCD /* CNLiveSDK */ = { | 481 | 812E504D1E769995004F5FCD /* CNLiveSDK */ = { |
| 415 | isa = PBXGroup; | 482 | isa = PBXGroup; |
| 416 | children = ( | 483 | children = ( |
| @@ -554,6 +621,7 @@ | @@ -554,6 +621,7 @@ | ||
| 554 | D2029BD41E6EADE10027CD92 /* SDK */ = { | 621 | D2029BD41E6EADE10027CD92 /* SDK */ = { |
| 555 | isa = PBXGroup; | 622 | isa = PBXGroup; |
| 556 | children = ( | 623 | children = ( |
| 624 | + 810B64E41E779B1F00133E15 /* Masonry */, | ||
| 557 | D2029BD51E6EADE10027CD92 /* AFNetworking */, | 625 | D2029BD51E6EADE10027CD92 /* AFNetworking */, |
| 558 | D2029BF81E6EADE10027CD92 /* MBProgressHUD */, | 626 | D2029BF81E6EADE10027CD92 /* MBProgressHUD */, |
| 559 | D2029BFB1E6EADE10027CD92 /* MJExtension */, | 627 | D2029BFB1E6EADE10027CD92 /* MJExtension */, |
| @@ -1098,8 +1166,8 @@ | @@ -1098,8 +1166,8 @@ | ||
| 1098 | children = ( | 1166 | children = ( |
| 1099 | D2888DB21E6EC154003A77C8 /* HomeViewController.h */, | 1167 | D2888DB21E6EC154003A77C8 /* HomeViewController.h */, |
| 1100 | D2888DB31E6EC154003A77C8 /* HomeViewController.m */, | 1168 | D2888DB31E6EC154003A77C8 /* HomeViewController.m */, |
| 1101 | - 812E503F1E768181004F5FCD /* LVCLivePlayerController.h */, | ||
| 1102 | - 812E50401E768181004F5FCD /* LVCLivePlayerController.m */, | 1169 | + 810B64E11E779AFE00133E15 /* LVCLivePlayerController.h */, |
| 1170 | + 810B64E21E779AFE00133E15 /* LVCLivePlayerController.m */, | ||
| 1103 | ); | 1171 | ); |
| 1104 | path = Controller; | 1172 | path = Controller; |
| 1105 | sourceTree = "<group>"; | 1173 | sourceTree = "<group>"; |
| @@ -1114,8 +1182,8 @@ | @@ -1114,8 +1182,8 @@ | ||
| 1114 | D2888DAA1E6EC014003A77C8 /* View */ = { | 1182 | D2888DAA1E6EC014003A77C8 /* View */ = { |
| 1115 | isa = PBXGroup; | 1183 | isa = PBXGroup; |
| 1116 | children = ( | 1184 | children = ( |
| 1117 | - 812E503C1E767A8D004F5FCD /* LVCPlayer.h */, | ||
| 1118 | - 812E503D1E767A8D004F5FCD /* LVCPlayer.m */, | 1185 | + 810B64DE1E779AE900133E15 /* LVCPlayer.h */, |
| 1186 | + 810B64DF1E779AE900133E15 /* LVCPlayer.m */, | ||
| 1119 | ); | 1187 | ); |
| 1120 | path = View; | 1188 | path = View; |
| 1121 | sourceTree = "<group>"; | 1189 | sourceTree = "<group>"; |
| @@ -1306,32 +1374,35 @@ | @@ -1306,32 +1374,35 @@ | ||
| 1306 | D2029CB51E6EADE10027CD92 /* SDiOSVersion.m in Sources */, | 1374 | D2029CB51E6EADE10027CD92 /* SDiOSVersion.m in Sources */, |
| 1307 | D2029C9C1E6EADE10027CD92 /* MJPropertyType.m in Sources */, | 1375 | D2029C9C1E6EADE10027CD92 /* MJPropertyType.m in Sources */, |
| 1308 | D2029CCD1E6EADE10027CD92 /* SearchModel.m in Sources */, | 1376 | D2029CCD1E6EADE10027CD92 /* SearchModel.m in Sources */, |
| 1377 | + 810B65051E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */, | ||
| 1309 | D2029CCB1E6EADE10027CD92 /* SVRadialGradientLayer.m in Sources */, | 1378 | D2029CCB1E6EADE10027CD92 /* SVRadialGradientLayer.m in Sources */, |
| 1310 | D2029CAF1E6EADE10027CD92 /* MJRefreshStateHeader.m in Sources */, | 1379 | D2029CAF1E6EADE10027CD92 /* MJRefreshStateHeader.m in Sources */, |
| 1311 | D2029C941E6EADE10027CD92 /* UIRefreshControl+AFNetworking.m in Sources */, | 1380 | D2029C941E6EADE10027CD92 /* UIRefreshControl+AFNetworking.m in Sources */, |
| 1312 | D2029C911E6EADE10027CD92 /* UIButton+AFNetworking.m in Sources */, | 1381 | D2029C911E6EADE10027CD92 /* UIButton+AFNetworking.m in Sources */, |
| 1313 | D2029C931E6EADE10027CD92 /* UIProgressView+AFNetworking.m in Sources */, | 1382 | D2029C931E6EADE10027CD92 /* UIProgressView+AFNetworking.m in Sources */, |
| 1314 | - 812E503E1E767A8D004F5FCD /* LVCPlayer.m in Sources */, | ||
| 1315 | D2029C8D1E6EADE10027CD92 /* AFAutoPurgingImageCache.m in Sources */, | 1383 | D2029C8D1E6EADE10027CD92 /* AFAutoPurgingImageCache.m in Sources */, |
| 1316 | D2029D011E6EAE2E0027CD92 /* UIColor+HexString.m in Sources */, | 1384 | D2029D011E6EAE2E0027CD92 /* UIColor+HexString.m in Sources */, |
| 1317 | D2029CA41E6EADE10027CD92 /* MJRefreshComponent.m in Sources */, | 1385 | D2029CA41E6EADE10027CD92 /* MJRefreshComponent.m in Sources */, |
| 1318 | D2029CBC1E6EADE10027CD92 /* SDWebImageDownloaderOperation.m in Sources */, | 1386 | D2029CBC1E6EADE10027CD92 /* SDWebImageDownloaderOperation.m in Sources */, |
| 1319 | D2029CA51E6EADE10027CD92 /* MJRefreshFooter.m in Sources */, | 1387 | D2029CA51E6EADE10027CD92 /* MJRefreshFooter.m in Sources */, |
| 1388 | + 810B65061E779B1F00133E15 /* View+MASAdditions.m in Sources */, | ||
| 1320 | D2029D161E6EB00D0027CD92 /* AppDelegate.m in Sources */, | 1389 | D2029D161E6EB00D0027CD92 /* AppDelegate.m in Sources */, |
| 1321 | D2029CB71E6EADE10027CD92 /* NSData+ImageContentType.m in Sources */, | 1390 | D2029CB71E6EADE10027CD92 /* NSData+ImageContentType.m in Sources */, |
| 1322 | D2029CD01E6EADE10027CD92 /* SearchPresenter.m in Sources */, | 1391 | D2029CD01E6EADE10027CD92 /* SearchPresenter.m in Sources */, |
| 1323 | D2888DB71E6EC1B8003A77C8 /* LVCMyViewController.m in Sources */, | 1392 | D2888DB71E6EC1B8003A77C8 /* LVCMyViewController.m in Sources */, |
| 1324 | D2029CBE1E6EADE10027CD92 /* SDWebImagePrefetcher.m in Sources */, | 1393 | D2029CBE1E6EADE10027CD92 /* SDWebImagePrefetcher.m in Sources */, |
| 1394 | + 810B65011E779B1F00133E15 /* MASLayoutConstraint.m in Sources */, | ||
| 1325 | D2029CCE1E6EADE10027CD92 /* SearchRecomListModel.m in Sources */, | 1395 | D2029CCE1E6EADE10027CD92 /* SearchRecomListModel.m in Sources */, |
| 1326 | D2029CA11E6EADE10027CD92 /* NSString+MJExtension.m in Sources */, | 1396 | D2029CA11E6EADE10027CD92 /* NSString+MJExtension.m in Sources */, |
| 1327 | D2029BCB1E6EADD70027CD92 /* BaseTableViewCell.m in Sources */, | 1397 | D2029BCB1E6EADD70027CD92 /* BaseTableViewCell.m in Sources */, |
| 1328 | D2029CAA1E6EADE10027CD92 /* MJRefreshBackGifFooter.m in Sources */, | 1398 | D2029CAA1E6EADE10027CD92 /* MJRefreshBackGifFooter.m in Sources */, |
| 1329 | D2029C9B1E6EADE10027CD92 /* MJPropertyKey.m in Sources */, | 1399 | D2029C9B1E6EADE10027CD92 /* MJPropertyKey.m in Sources */, |
| 1330 | - 812E50411E768181004F5FCD /* LVCLivePlayerController.m in Sources */, | ||
| 1331 | D2029CBF1E6EADE10027CD92 /* UIButton+WebCache.m in Sources */, | 1400 | D2029CBF1E6EADE10027CD92 /* UIButton+WebCache.m in Sources */, |
| 1401 | + 810B64E31E779AFE00133E15 /* LVCLivePlayerController.m in Sources */, | ||
| 1332 | D2029CC51E6EADE10027CD92 /* UIView+WebCacheOperation.m in Sources */, | 1402 | D2029CC51E6EADE10027CD92 /* UIView+WebCacheOperation.m in Sources */, |
| 1333 | D2029CAB1E6EADE10027CD92 /* MJRefreshBackNormalFooter.m in Sources */, | 1403 | D2029CAB1E6EADE10027CD92 /* MJRefreshBackNormalFooter.m in Sources */, |
| 1334 | D2029C8F1E6EADE10027CD92 /* AFNetworkActivityIndicatorManager.m in Sources */, | 1404 | D2029C8F1E6EADE10027CD92 /* AFNetworkActivityIndicatorManager.m in Sources */, |
| 1405 | + 810B65031E779B1F00133E15 /* MASViewConstraint.m in Sources */, | ||
| 1335 | D2029BCE1E6EADD70027CD92 /* ZXNavigationController.m in Sources */, | 1406 | D2029BCE1E6EADD70027CD92 /* ZXNavigationController.m in Sources */, |
| 1336 | D2029CA21E6EADE10027CD92 /* MJRefreshAutoFooter.m in Sources */, | 1407 | D2029CA21E6EADE10027CD92 /* MJRefreshAutoFooter.m in Sources */, |
| 1337 | D2029CC71E6EADE10027CD92 /* SVIndefiniteAnimatedView.m in Sources */, | 1408 | D2029CC71E6EADE10027CD92 /* SVIndefiniteAnimatedView.m in Sources */, |
| @@ -1340,9 +1411,11 @@ | @@ -1340,9 +1411,11 @@ | ||
| 1340 | D2029CC41E6EADE10027CD92 /* UIImageView+WebCache.m in Sources */, | 1411 | D2029CC41E6EADE10027CD92 /* UIImageView+WebCache.m in Sources */, |
| 1341 | D2029CC81E6EADE10027CD92 /* SVProgressAnimatedView.m in Sources */, | 1412 | D2029CC81E6EADE10027CD92 /* SVProgressAnimatedView.m in Sources */, |
| 1342 | D2029C961E6EADE10027CD92 /* MBProgressHUD.m in Sources */, | 1413 | D2029C961E6EADE10027CD92 /* MBProgressHUD.m in Sources */, |
| 1414 | + 810B65071E779B1F00133E15 /* ViewController+MASAdditions.m in Sources */, | ||
| 1343 | D2029C9A1E6EADE10027CD92 /* MJProperty.m in Sources */, | 1415 | D2029C9A1E6EADE10027CD92 /* MJProperty.m in Sources */, |
| 1344 | D2029CB91E6EADE10027CD92 /* SDWebImageCompat.m in Sources */, | 1416 | D2029CB91E6EADE10027CD92 /* SDWebImageCompat.m in Sources */, |
| 1345 | D2029CB61E6EADE10027CD92 /* MKAnnotationView+WebCache.m in Sources */, | 1417 | D2029CB61E6EADE10027CD92 /* MKAnnotationView+WebCache.m in Sources */, |
| 1418 | + 810B64FE1E779B1F00133E15 /* MASCompositeConstraint.m in Sources */, | ||
| 1346 | D2029C981E6EADE10027CD92 /* MJExtensionConst.m in Sources */, | 1419 | D2029C981E6EADE10027CD92 /* MJExtensionConst.m in Sources */, |
| 1347 | D2029CAE1E6EADE10027CD92 /* MJRefreshNormalHeader.m in Sources */, | 1420 | D2029CAE1E6EADE10027CD92 /* MJRefreshNormalHeader.m in Sources */, |
| 1348 | D2029C901E6EADE10027CD92 /* UIActivityIndicatorView+AFNetworking.m in Sources */, | 1421 | D2029C901E6EADE10027CD92 /* UIActivityIndicatorView+AFNetworking.m in Sources */, |
| @@ -1358,6 +1431,7 @@ | @@ -1358,6 +1431,7 @@ | ||
| 1358 | D2029C8C1E6EADE10027CD92 /* AFURLSessionManager.m in Sources */, | 1431 | D2029C8C1E6EADE10027CD92 /* AFURLSessionManager.m in Sources */, |
| 1359 | D2029C9F1E6EADE10027CD92 /* NSObject+MJKeyValue.m in Sources */, | 1432 | D2029C9F1E6EADE10027CD92 /* NSObject+MJKeyValue.m in Sources */, |
| 1360 | D2888DB11E6EC05F003A77C8 /* TempViewController.m in Sources */, | 1433 | D2888DB11E6EC05F003A77C8 /* TempViewController.m in Sources */, |
| 1434 | + 810B65021E779B1F00133E15 /* MASViewAttribute.m in Sources */, | ||
| 1361 | D2029CAC1E6EADE10027CD92 /* MJRefreshBackStateFooter.m in Sources */, | 1435 | D2029CAC1E6EADE10027CD92 /* MJRefreshBackStateFooter.m in Sources */, |
| 1362 | D2029CB11E6EADE10027CD92 /* MJRefreshConst.m in Sources */, | 1436 | D2029CB11E6EADE10027CD92 /* MJRefreshConst.m in Sources */, |
| 1363 | D2029CAD1E6EADE10027CD92 /* MJRefreshGifHeader.m in Sources */, | 1437 | D2029CAD1E6EADE10027CD92 /* MJRefreshGifHeader.m in Sources */, |
| @@ -1367,6 +1441,7 @@ | @@ -1367,6 +1441,7 @@ | ||
| 1367 | D2029D091E6EAE2E0027CD92 /* Foundation+Log.m in Sources */, | 1441 | D2029D091E6EAE2E0027CD92 /* Foundation+Log.m in Sources */, |
| 1368 | D2029C8E1E6EADE10027CD92 /* AFImageDownloader.m in Sources */, | 1442 | D2029C8E1E6EADE10027CD92 /* AFImageDownloader.m in Sources */, |
| 1369 | D2029BCA1E6EADD70027CD92 /* BaseModel.m in Sources */, | 1443 | D2029BCA1E6EADD70027CD92 /* BaseModel.m in Sources */, |
| 1444 | + 810B65041E779B1F00133E15 /* NSArray+MASAdditions.m in Sources */, | ||
| 1370 | D2029D031E6EAE2E0027CD92 /* UIImage+ZXExtension.m in Sources */, | 1445 | D2029D031E6EAE2E0027CD92 /* UIImage+ZXExtension.m in Sources */, |
| 1371 | D2029D0A1E6EAE2E0027CD92 /* ZXServerUrl.m in Sources */, | 1446 | D2029D0A1E6EAE2E0027CD92 /* ZXServerUrl.m in Sources */, |
| 1372 | D2029CCA1E6EADE10027CD92 /* SVProgressHUD.m in Sources */, | 1447 | D2029CCA1E6EADE10027CD92 /* SVProgressHUD.m in Sources */, |
| @@ -1376,6 +1451,8 @@ | @@ -1376,6 +1451,8 @@ | ||
| 1376 | D2029D081E6EAE2E0027CD92 /* ZXDeviceInfo.m in Sources */, | 1451 | D2029D081E6EAE2E0027CD92 /* ZXDeviceInfo.m in Sources */, |
| 1377 | D2029CC21E6EADE10027CD92 /* UIImage+WebP.m in Sources */, | 1452 | D2029CC21E6EADE10027CD92 /* UIImage+WebP.m in Sources */, |
| 1378 | D2029BCD1E6EADD70027CD92 /* BaseViewController.m in Sources */, | 1453 | D2029BCD1E6EADD70027CD92 /* BaseViewController.m in Sources */, |
| 1454 | + 810B64E01E779AE900133E15 /* LVCPlayer.m in Sources */, | ||
| 1455 | + 810B64FF1E779B1F00133E15 /* MASConstraint.m in Sources */, | ||
| 1379 | D2029D001E6EAE2E0027CD92 /* NSNumber+ScaleHeight.m in Sources */, | 1456 | D2029D001E6EAE2E0027CD92 /* NSNumber+ScaleHeight.m in Sources */, |
| 1380 | D2888D9E1E6EBF1B003A77C8 /* LVCLiveViewController.m in Sources */, | 1457 | D2888D9E1E6EBF1B003A77C8 /* LVCLiveViewController.m in Sources */, |
| 1381 | D2029C951E6EADE10027CD92 /* UIWebView+AFNetworking.m in Sources */, | 1458 | D2029C951E6EADE10027CD92 /* UIWebView+AFNetworking.m in Sources */, |
| @@ -1385,6 +1462,7 @@ | @@ -1385,6 +1462,7 @@ | ||
| 1385 | D2029D061E6EAE2E0027CD92 /* UIView+Extension.m in Sources */, | 1462 | D2029D061E6EAE2E0027CD92 /* UIView+Extension.m in Sources */, |
| 1386 | D2029C9D1E6EADE10027CD92 /* NSObject+MJClass.m in Sources */, | 1463 | D2029C9D1E6EADE10027CD92 /* NSObject+MJClass.m in Sources */, |
| 1387 | D2029CCF1E6EADE10027CD92 /* SearchHttp.m in Sources */, | 1464 | D2029CCF1E6EADE10027CD92 /* SearchHttp.m in Sources */, |
| 1465 | + 810B65001E779B1F00133E15 /* MASConstraintMaker.m in Sources */, | ||
| 1388 | D2029C881E6EADE10027CD92 /* AFNetworkReachabilityManager.m in Sources */, | 1466 | D2029C881E6EADE10027CD92 /* AFNetworkReachabilityManager.m in Sources */, |
| 1389 | D2029D021E6EAE2E0027CD92 /* UIImage+ScaleImageSize.m in Sources */, | 1467 | D2029D021E6EAE2E0027CD92 /* UIImage+ScaleImageSize.m in Sources */, |
| 1390 | D2029BCC1E6EADD70027CD92 /* BaseView.m in Sources */, | 1468 | D2029BCC1E6EADD70027CD92 /* BaseView.m in Sources */, |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/MASCompositeConstraint.h
0 → 100755
| 1 | +// | ||
| 2 | +// MASCompositeConstraint.h | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 21/07/13. | ||
| 6 | +// Copyright (c) 2013 cloudling. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "MASConstraint.h" | ||
| 10 | +#import "MASUtilities.h" | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * A group of MASConstraint objects | ||
| 14 | + */ | ||
| 15 | +@interface MASCompositeConstraint : MASConstraint | ||
| 16 | + | ||
| 17 | +/** | ||
| 18 | + * Creates a composite with a predefined array of children | ||
| 19 | + * | ||
| 20 | + * @param children child MASConstraints | ||
| 21 | + * | ||
| 22 | + * @return a composite constraint | ||
| 23 | + */ | ||
| 24 | +- (id)initWithChildren:(NSArray *)children; | ||
| 25 | + | ||
| 26 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/MASCompositeConstraint.m
0 → 100755
| 1 | +// | ||
| 2 | +// MASCompositeConstraint.m | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 21/07/13. | ||
| 6 | +// Copyright (c) 2013 cloudling. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "MASCompositeConstraint.h" | ||
| 10 | +#import "MASConstraint+Private.h" | ||
| 11 | + | ||
| 12 | +@interface MASCompositeConstraint () <MASConstraintDelegate> | ||
| 13 | + | ||
| 14 | +@property (nonatomic, strong) id mas_key; | ||
| 15 | +@property (nonatomic, strong) NSMutableArray *childConstraints; | ||
| 16 | + | ||
| 17 | +@end | ||
| 18 | + | ||
| 19 | +@implementation MASCompositeConstraint | ||
| 20 | + | ||
| 21 | +- (id)initWithChildren:(NSArray *)children { | ||
| 22 | + self = [super init]; | ||
| 23 | + if (!self) return nil; | ||
| 24 | + | ||
| 25 | + _childConstraints = [children mutableCopy]; | ||
| 26 | + for (MASConstraint *constraint in _childConstraints) { | ||
| 27 | + constraint.delegate = self; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + return self; | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +#pragma mark - MASConstraintDelegate | ||
| 34 | + | ||
| 35 | +- (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint { | ||
| 36 | + NSUInteger index = [self.childConstraints indexOfObject:constraint]; | ||
| 37 | + NSAssert(index != NSNotFound, @"Could not find constraint %@", constraint); | ||
| 38 | + [self.childConstraints replaceObjectAtIndex:index withObject:replacementConstraint]; | ||
| 39 | +} | ||
| 40 | + | ||
| 41 | +- (MASConstraint *)constraint:(MASConstraint __unused *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute { | ||
| 42 | + id<MASConstraintDelegate> strongDelegate = self.delegate; | ||
| 43 | + MASConstraint *newConstraint = [strongDelegate constraint:self addConstraintWithLayoutAttribute:layoutAttribute]; | ||
| 44 | + newConstraint.delegate = self; | ||
| 45 | + [self.childConstraints addObject:newConstraint]; | ||
| 46 | + return newConstraint; | ||
| 47 | +} | ||
| 48 | + | ||
| 49 | +#pragma mark - NSLayoutConstraint multiplier proxies | ||
| 50 | + | ||
| 51 | +- (MASConstraint * (^)(CGFloat))multipliedBy { | ||
| 52 | + return ^id(CGFloat multiplier) { | ||
| 53 | + for (MASConstraint *constraint in self.childConstraints) { | ||
| 54 | + constraint.multipliedBy(multiplier); | ||
| 55 | + } | ||
| 56 | + return self; | ||
| 57 | + }; | ||
| 58 | +} | ||
| 59 | + | ||
| 60 | +- (MASConstraint * (^)(CGFloat))dividedBy { | ||
| 61 | + return ^id(CGFloat divider) { | ||
| 62 | + for (MASConstraint *constraint in self.childConstraints) { | ||
| 63 | + constraint.dividedBy(divider); | ||
| 64 | + } | ||
| 65 | + return self; | ||
| 66 | + }; | ||
| 67 | +} | ||
| 68 | + | ||
| 69 | +#pragma mark - MASLayoutPriority proxy | ||
| 70 | + | ||
| 71 | +- (MASConstraint * (^)(MASLayoutPriority))priority { | ||
| 72 | + return ^id(MASLayoutPriority priority) { | ||
| 73 | + for (MASConstraint *constraint in self.childConstraints) { | ||
| 74 | + constraint.priority(priority); | ||
| 75 | + } | ||
| 76 | + return self; | ||
| 77 | + }; | ||
| 78 | +} | ||
| 79 | + | ||
| 80 | +#pragma mark - NSLayoutRelation proxy | ||
| 81 | + | ||
| 82 | +- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation { | ||
| 83 | + return ^id(id attr, NSLayoutRelation relation) { | ||
| 84 | + for (MASConstraint *constraint in self.childConstraints.copy) { | ||
| 85 | + constraint.equalToWithRelation(attr, relation); | ||
| 86 | + } | ||
| 87 | + return self; | ||
| 88 | + }; | ||
| 89 | +} | ||
| 90 | + | ||
| 91 | +#pragma mark - attribute chaining | ||
| 92 | + | ||
| 93 | +- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute { | ||
| 94 | + [self constraint:self addConstraintWithLayoutAttribute:layoutAttribute]; | ||
| 95 | + return self; | ||
| 96 | +} | ||
| 97 | + | ||
| 98 | +#pragma mark - Animator proxy | ||
| 99 | + | ||
| 100 | +#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV) | ||
| 101 | + | ||
| 102 | +- (MASConstraint *)animator { | ||
| 103 | + for (MASConstraint *constraint in self.childConstraints) { | ||
| 104 | + [constraint animator]; | ||
| 105 | + } | ||
| 106 | + return self; | ||
| 107 | +} | ||
| 108 | + | ||
| 109 | +#endif | ||
| 110 | + | ||
| 111 | +#pragma mark - debug helpers | ||
| 112 | + | ||
| 113 | +- (MASConstraint * (^)(id))key { | ||
| 114 | + return ^id(id key) { | ||
| 115 | + self.mas_key = key; | ||
| 116 | + int i = 0; | ||
| 117 | + for (MASConstraint *constraint in self.childConstraints) { | ||
| 118 | + constraint.key([NSString stringWithFormat:@"%@[%d]", key, i++]); | ||
| 119 | + } | ||
| 120 | + return self; | ||
| 121 | + }; | ||
| 122 | +} | ||
| 123 | + | ||
| 124 | +#pragma mark - NSLayoutConstraint constant setters | ||
| 125 | + | ||
| 126 | +- (void)setInsets:(MASEdgeInsets)insets { | ||
| 127 | + for (MASConstraint *constraint in self.childConstraints) { | ||
| 128 | + constraint.insets = insets; | ||
| 129 | + } | ||
| 130 | +} | ||
| 131 | + | ||
| 132 | +- (void)setOffset:(CGFloat)offset { | ||
| 133 | + for (MASConstraint *constraint in self.childConstraints) { | ||
| 134 | + constraint.offset = offset; | ||
| 135 | + } | ||
| 136 | +} | ||
| 137 | + | ||
| 138 | +- (void)setSizeOffset:(CGSize)sizeOffset { | ||
| 139 | + for (MASConstraint *constraint in self.childConstraints) { | ||
| 140 | + constraint.sizeOffset = sizeOffset; | ||
| 141 | + } | ||
| 142 | +} | ||
| 143 | + | ||
| 144 | +- (void)setCenterOffset:(CGPoint)centerOffset { | ||
| 145 | + for (MASConstraint *constraint in self.childConstraints) { | ||
| 146 | + constraint.centerOffset = centerOffset; | ||
| 147 | + } | ||
| 148 | +} | ||
| 149 | + | ||
| 150 | +#pragma mark - MASConstraint | ||
| 151 | + | ||
| 152 | +- (void)activate { | ||
| 153 | + for (MASConstraint *constraint in self.childConstraints) { | ||
| 154 | + [constraint activate]; | ||
| 155 | + } | ||
| 156 | +} | ||
| 157 | + | ||
| 158 | +- (void)deactivate { | ||
| 159 | + for (MASConstraint *constraint in self.childConstraints) { | ||
| 160 | + [constraint deactivate]; | ||
| 161 | + } | ||
| 162 | +} | ||
| 163 | + | ||
| 164 | +- (void)install { | ||
| 165 | + for (MASConstraint *constraint in self.childConstraints) { | ||
| 166 | + constraint.updateExisting = self.updateExisting; | ||
| 167 | + [constraint install]; | ||
| 168 | + } | ||
| 169 | +} | ||
| 170 | + | ||
| 171 | +- (void)uninstall { | ||
| 172 | + for (MASConstraint *constraint in self.childConstraints) { | ||
| 173 | + [constraint uninstall]; | ||
| 174 | + } | ||
| 175 | +} | ||
| 176 | + | ||
| 177 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/MASConstraint+Private.h
0 → 100755
| 1 | +// | ||
| 2 | +// MASConstraint+Private.h | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Nick Tymchenko on 29/04/14. | ||
| 6 | +// Copyright (c) 2014 cloudling. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "MASConstraint.h" | ||
| 10 | + | ||
| 11 | +@protocol MASConstraintDelegate; | ||
| 12 | + | ||
| 13 | + | ||
| 14 | +@interface MASConstraint () | ||
| 15 | + | ||
| 16 | +/** | ||
| 17 | + * Whether or not to check for an existing constraint instead of adding constraint | ||
| 18 | + */ | ||
| 19 | +@property (nonatomic, assign) BOOL updateExisting; | ||
| 20 | + | ||
| 21 | +/** | ||
| 22 | + * Usually MASConstraintMaker but could be a parent MASConstraint | ||
| 23 | + */ | ||
| 24 | +@property (nonatomic, weak) id<MASConstraintDelegate> delegate; | ||
| 25 | + | ||
| 26 | +/** | ||
| 27 | + * Based on a provided value type, is equal to calling: | ||
| 28 | + * NSNumber - setOffset: | ||
| 29 | + * NSValue with CGPoint - setPointOffset: | ||
| 30 | + * NSValue with CGSize - setSizeOffset: | ||
| 31 | + * NSValue with MASEdgeInsets - setInsets: | ||
| 32 | + */ | ||
| 33 | +- (void)setLayoutConstantWithValue:(NSValue *)value; | ||
| 34 | + | ||
| 35 | +@end | ||
| 36 | + | ||
| 37 | + | ||
| 38 | +@interface MASConstraint (Abstract) | ||
| 39 | + | ||
| 40 | +/** | ||
| 41 | + * Sets the constraint relation to given NSLayoutRelation | ||
| 42 | + * returns a block which accepts one of the following: | ||
| 43 | + * MASViewAttribute, UIView, NSValue, NSArray | ||
| 44 | + * see readme for more details. | ||
| 45 | + */ | ||
| 46 | +- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation; | ||
| 47 | + | ||
| 48 | +/** | ||
| 49 | + * Override to set a custom chaining behaviour | ||
| 50 | + */ | ||
| 51 | +- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute; | ||
| 52 | + | ||
| 53 | +@end | ||
| 54 | + | ||
| 55 | + | ||
| 56 | +@protocol MASConstraintDelegate <NSObject> | ||
| 57 | + | ||
| 58 | +/** | ||
| 59 | + * Notifies the delegate when the constraint needs to be replaced with another constraint. For example | ||
| 60 | + * A MASViewConstraint may turn into a MASCompositeConstraint when an array is passed to one of the equality blocks | ||
| 61 | + */ | ||
| 62 | +- (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint; | ||
| 63 | + | ||
| 64 | +- (MASConstraint *)constraint:(MASConstraint *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute; | ||
| 65 | + | ||
| 66 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/MASConstraint.h
0 → 100755
| 1 | +// | ||
| 2 | +// MASConstraint.h | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 22/07/13. | ||
| 6 | +// Copyright (c) 2013 cloudling. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "MASUtilities.h" | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * Enables Constraints to be created with chainable syntax | ||
| 13 | + * Constraint can represent single NSLayoutConstraint (MASViewConstraint) | ||
| 14 | + * or a group of NSLayoutConstraints (MASComposisteConstraint) | ||
| 15 | + */ | ||
| 16 | +@interface MASConstraint : NSObject | ||
| 17 | + | ||
| 18 | +// Chaining Support | ||
| 19 | + | ||
| 20 | +/** | ||
| 21 | + * Modifies the NSLayoutConstraint constant, | ||
| 22 | + * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following | ||
| 23 | + * NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight | ||
| 24 | + */ | ||
| 25 | +- (MASConstraint * (^)(MASEdgeInsets insets))insets; | ||
| 26 | + | ||
| 27 | +/** | ||
| 28 | + * Modifies the NSLayoutConstraint constant, | ||
| 29 | + * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following | ||
| 30 | + * NSLayoutAttributeWidth, NSLayoutAttributeHeight | ||
| 31 | + */ | ||
| 32 | +- (MASConstraint * (^)(CGSize offset))sizeOffset; | ||
| 33 | + | ||
| 34 | +/** | ||
| 35 | + * Modifies the NSLayoutConstraint constant, | ||
| 36 | + * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following | ||
| 37 | + * NSLayoutAttributeCenterX, NSLayoutAttributeCenterY | ||
| 38 | + */ | ||
| 39 | +- (MASConstraint * (^)(CGPoint offset))centerOffset; | ||
| 40 | + | ||
| 41 | +/** | ||
| 42 | + * Modifies the NSLayoutConstraint constant | ||
| 43 | + */ | ||
| 44 | +- (MASConstraint * (^)(CGFloat offset))offset; | ||
| 45 | + | ||
| 46 | +/** | ||
| 47 | + * Modifies the NSLayoutConstraint constant based on a value type | ||
| 48 | + */ | ||
| 49 | +- (MASConstraint * (^)(NSValue *value))valueOffset; | ||
| 50 | + | ||
| 51 | +/** | ||
| 52 | + * Sets the NSLayoutConstraint multiplier property | ||
| 53 | + */ | ||
| 54 | +- (MASConstraint * (^)(CGFloat multiplier))multipliedBy; | ||
| 55 | + | ||
| 56 | +/** | ||
| 57 | + * Sets the NSLayoutConstraint multiplier to 1.0/dividedBy | ||
| 58 | + */ | ||
| 59 | +- (MASConstraint * (^)(CGFloat divider))dividedBy; | ||
| 60 | + | ||
| 61 | +/** | ||
| 62 | + * Sets the NSLayoutConstraint priority to a float or MASLayoutPriority | ||
| 63 | + */ | ||
| 64 | +- (MASConstraint * (^)(MASLayoutPriority priority))priority; | ||
| 65 | + | ||
| 66 | +/** | ||
| 67 | + * Sets the NSLayoutConstraint priority to MASLayoutPriorityLow | ||
| 68 | + */ | ||
| 69 | +- (MASConstraint * (^)())priorityLow; | ||
| 70 | + | ||
| 71 | +/** | ||
| 72 | + * Sets the NSLayoutConstraint priority to MASLayoutPriorityMedium | ||
| 73 | + */ | ||
| 74 | +- (MASConstraint * (^)())priorityMedium; | ||
| 75 | + | ||
| 76 | +/** | ||
| 77 | + * Sets the NSLayoutConstraint priority to MASLayoutPriorityHigh | ||
| 78 | + */ | ||
| 79 | +- (MASConstraint * (^)())priorityHigh; | ||
| 80 | + | ||
| 81 | +/** | ||
| 82 | + * Sets the constraint relation to NSLayoutRelationEqual | ||
| 83 | + * returns a block which accepts one of the following: | ||
| 84 | + * MASViewAttribute, UIView, NSValue, NSArray | ||
| 85 | + * see readme for more details. | ||
| 86 | + */ | ||
| 87 | +- (MASConstraint * (^)(id attr))equalTo; | ||
| 88 | + | ||
| 89 | +/** | ||
| 90 | + * Sets the constraint relation to NSLayoutRelationGreaterThanOrEqual | ||
| 91 | + * returns a block which accepts one of the following: | ||
| 92 | + * MASViewAttribute, UIView, NSValue, NSArray | ||
| 93 | + * see readme for more details. | ||
| 94 | + */ | ||
| 95 | +- (MASConstraint * (^)(id attr))greaterThanOrEqualTo; | ||
| 96 | + | ||
| 97 | +/** | ||
| 98 | + * Sets the constraint relation to NSLayoutRelationLessThanOrEqual | ||
| 99 | + * returns a block which accepts one of the following: | ||
| 100 | + * MASViewAttribute, UIView, NSValue, NSArray | ||
| 101 | + * see readme for more details. | ||
| 102 | + */ | ||
| 103 | +- (MASConstraint * (^)(id attr))lessThanOrEqualTo; | ||
| 104 | + | ||
| 105 | +/** | ||
| 106 | + * Optional semantic property which has no effect but improves the readability of constraint | ||
| 107 | + */ | ||
| 108 | +- (MASConstraint *)with; | ||
| 109 | + | ||
| 110 | +/** | ||
| 111 | + * Optional semantic property which has no effect but improves the readability of constraint | ||
| 112 | + */ | ||
| 113 | +- (MASConstraint *)and; | ||
| 114 | + | ||
| 115 | +/** | ||
| 116 | + * Creates a new MASCompositeConstraint with the called attribute and reciever | ||
| 117 | + */ | ||
| 118 | +- (MASConstraint *)left; | ||
| 119 | +- (MASConstraint *)top; | ||
| 120 | +- (MASConstraint *)right; | ||
| 121 | +- (MASConstraint *)bottom; | ||
| 122 | +- (MASConstraint *)leading; | ||
| 123 | +- (MASConstraint *)trailing; | ||
| 124 | +- (MASConstraint *)width; | ||
| 125 | +- (MASConstraint *)height; | ||
| 126 | +- (MASConstraint *)centerX; | ||
| 127 | +- (MASConstraint *)centerY; | ||
| 128 | +- (MASConstraint *)baseline; | ||
| 129 | + | ||
| 130 | +#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | ||
| 131 | + | ||
| 132 | +- (MASConstraint *)firstBaseline; | ||
| 133 | +- (MASConstraint *)lastBaseline; | ||
| 134 | + | ||
| 135 | +#endif | ||
| 136 | + | ||
| 137 | +#if TARGET_OS_IPHONE || TARGET_OS_TV | ||
| 138 | + | ||
| 139 | +- (MASConstraint *)leftMargin; | ||
| 140 | +- (MASConstraint *)rightMargin; | ||
| 141 | +- (MASConstraint *)topMargin; | ||
| 142 | +- (MASConstraint *)bottomMargin; | ||
| 143 | +- (MASConstraint *)leadingMargin; | ||
| 144 | +- (MASConstraint *)trailingMargin; | ||
| 145 | +- (MASConstraint *)centerXWithinMargins; | ||
| 146 | +- (MASConstraint *)centerYWithinMargins; | ||
| 147 | + | ||
| 148 | +#endif | ||
| 149 | + | ||
| 150 | + | ||
| 151 | +/** | ||
| 152 | + * Sets the constraint debug name | ||
| 153 | + */ | ||
| 154 | +- (MASConstraint * (^)(id key))key; | ||
| 155 | + | ||
| 156 | +// NSLayoutConstraint constant Setters | ||
| 157 | +// for use outside of mas_updateConstraints/mas_makeConstraints blocks | ||
| 158 | + | ||
| 159 | +/** | ||
| 160 | + * Modifies the NSLayoutConstraint constant, | ||
| 161 | + * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following | ||
| 162 | + * NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight | ||
| 163 | + */ | ||
| 164 | +- (void)setInsets:(MASEdgeInsets)insets; | ||
| 165 | + | ||
| 166 | +/** | ||
| 167 | + * Modifies the NSLayoutConstraint constant, | ||
| 168 | + * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following | ||
| 169 | + * NSLayoutAttributeWidth, NSLayoutAttributeHeight | ||
| 170 | + */ | ||
| 171 | +- (void)setSizeOffset:(CGSize)sizeOffset; | ||
| 172 | + | ||
| 173 | +/** | ||
| 174 | + * Modifies the NSLayoutConstraint constant, | ||
| 175 | + * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following | ||
| 176 | + * NSLayoutAttributeCenterX, NSLayoutAttributeCenterY | ||
| 177 | + */ | ||
| 178 | +- (void)setCenterOffset:(CGPoint)centerOffset; | ||
| 179 | + | ||
| 180 | +/** | ||
| 181 | + * Modifies the NSLayoutConstraint constant | ||
| 182 | + */ | ||
| 183 | +- (void)setOffset:(CGFloat)offset; | ||
| 184 | + | ||
| 185 | + | ||
| 186 | +// NSLayoutConstraint Installation support | ||
| 187 | + | ||
| 188 | +#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV) | ||
| 189 | +/** | ||
| 190 | + * Whether or not to go through the animator proxy when modifying the constraint | ||
| 191 | + */ | ||
| 192 | +@property (nonatomic, copy, readonly) MASConstraint *animator; | ||
| 193 | +#endif | ||
| 194 | + | ||
| 195 | +/** | ||
| 196 | + * Activates an NSLayoutConstraint if it's supported by an OS. | ||
| 197 | + * Invokes install otherwise. | ||
| 198 | + */ | ||
| 199 | +- (void)activate; | ||
| 200 | + | ||
| 201 | +/** | ||
| 202 | + * Deactivates previously installed/activated NSLayoutConstraint. | ||
| 203 | + */ | ||
| 204 | +- (void)deactivate; | ||
| 205 | + | ||
| 206 | +/** | ||
| 207 | + * Creates a NSLayoutConstraint and adds it to the appropriate view. | ||
| 208 | + */ | ||
| 209 | +- (void)install; | ||
| 210 | + | ||
| 211 | +/** | ||
| 212 | + * Removes previously installed NSLayoutConstraint | ||
| 213 | + */ | ||
| 214 | +- (void)uninstall; | ||
| 215 | + | ||
| 216 | +@end | ||
| 217 | + | ||
| 218 | + | ||
| 219 | +/** | ||
| 220 | + * Convenience auto-boxing macros for MASConstraint methods. | ||
| 221 | + * | ||
| 222 | + * Defining MAS_SHORTHAND_GLOBALS will turn on auto-boxing for default syntax. | ||
| 223 | + * A potential drawback of this is that the unprefixed macros will appear in global scope. | ||
| 224 | + */ | ||
| 225 | +#define mas_equalTo(...) equalTo(MASBoxValue((__VA_ARGS__))) | ||
| 226 | +#define mas_greaterThanOrEqualTo(...) greaterThanOrEqualTo(MASBoxValue((__VA_ARGS__))) | ||
| 227 | +#define mas_lessThanOrEqualTo(...) lessThanOrEqualTo(MASBoxValue((__VA_ARGS__))) | ||
| 228 | + | ||
| 229 | +#define mas_offset(...) valueOffset(MASBoxValue((__VA_ARGS__))) | ||
| 230 | + | ||
| 231 | + | ||
| 232 | +#ifdef MAS_SHORTHAND_GLOBALS | ||
| 233 | + | ||
| 234 | +#define equalTo(...) mas_equalTo(__VA_ARGS__) | ||
| 235 | +#define greaterThanOrEqualTo(...) mas_greaterThanOrEqualTo(__VA_ARGS__) | ||
| 236 | +#define lessThanOrEqualTo(...) mas_lessThanOrEqualTo(__VA_ARGS__) | ||
| 237 | + | ||
| 238 | +#define offset(...) mas_offset(__VA_ARGS__) | ||
| 239 | + | ||
| 240 | +#endif | ||
| 241 | + | ||
| 242 | + | ||
| 243 | +@interface MASConstraint (AutoboxingSupport) | ||
| 244 | + | ||
| 245 | +/** | ||
| 246 | + * Aliases to corresponding relation methods (for shorthand macros) | ||
| 247 | + * Also needed to aid autocompletion | ||
| 248 | + */ | ||
| 249 | +- (MASConstraint * (^)(id attr))mas_equalTo; | ||
| 250 | +- (MASConstraint * (^)(id attr))mas_greaterThanOrEqualTo; | ||
| 251 | +- (MASConstraint * (^)(id attr))mas_lessThanOrEqualTo; | ||
| 252 | + | ||
| 253 | +/** | ||
| 254 | + * A dummy method to aid autocompletion | ||
| 255 | + */ | ||
| 256 | +- (MASConstraint * (^)(id offset))mas_offset; | ||
| 257 | + | ||
| 258 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/MASConstraint.m
0 → 100755
| 1 | +// | ||
| 2 | +// MASConstraint.m | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Nick Tymchenko on 1/20/14. | ||
| 6 | +// | ||
| 7 | + | ||
| 8 | +#import "MASConstraint.h" | ||
| 9 | +#import "MASConstraint+Private.h" | ||
| 10 | + | ||
| 11 | +#define MASMethodNotImplemented() \ | ||
| 12 | + @throw [NSException exceptionWithName:NSInternalInconsistencyException \ | ||
| 13 | + reason:[NSString stringWithFormat:@"You must override %@ in a subclass.", NSStringFromSelector(_cmd)] \ | ||
| 14 | + userInfo:nil] | ||
| 15 | + | ||
| 16 | +@implementation MASConstraint | ||
| 17 | + | ||
| 18 | +#pragma mark - Init | ||
| 19 | + | ||
| 20 | +- (id)init { | ||
| 21 | + NSAssert(![self isMemberOfClass:[MASConstraint class]], @"MASConstraint is an abstract class, you should not instantiate it directly."); | ||
| 22 | + return [super init]; | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +#pragma mark - NSLayoutRelation proxies | ||
| 26 | + | ||
| 27 | +- (MASConstraint * (^)(id))equalTo { | ||
| 28 | + return ^id(id attribute) { | ||
| 29 | + return self.equalToWithRelation(attribute, NSLayoutRelationEqual); | ||
| 30 | + }; | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +- (MASConstraint * (^)(id))mas_equalTo { | ||
| 34 | + return ^id(id attribute) { | ||
| 35 | + return self.equalToWithRelation(attribute, NSLayoutRelationEqual); | ||
| 36 | + }; | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +- (MASConstraint * (^)(id))greaterThanOrEqualTo { | ||
| 40 | + return ^id(id attribute) { | ||
| 41 | + return self.equalToWithRelation(attribute, NSLayoutRelationGreaterThanOrEqual); | ||
| 42 | + }; | ||
| 43 | +} | ||
| 44 | + | ||
| 45 | +- (MASConstraint * (^)(id))mas_greaterThanOrEqualTo { | ||
| 46 | + return ^id(id attribute) { | ||
| 47 | + return self.equalToWithRelation(attribute, NSLayoutRelationGreaterThanOrEqual); | ||
| 48 | + }; | ||
| 49 | +} | ||
| 50 | + | ||
| 51 | +- (MASConstraint * (^)(id))lessThanOrEqualTo { | ||
| 52 | + return ^id(id attribute) { | ||
| 53 | + return self.equalToWithRelation(attribute, NSLayoutRelationLessThanOrEqual); | ||
| 54 | + }; | ||
| 55 | +} | ||
| 56 | + | ||
| 57 | +- (MASConstraint * (^)(id))mas_lessThanOrEqualTo { | ||
| 58 | + return ^id(id attribute) { | ||
| 59 | + return self.equalToWithRelation(attribute, NSLayoutRelationLessThanOrEqual); | ||
| 60 | + }; | ||
| 61 | +} | ||
| 62 | + | ||
| 63 | +#pragma mark - MASLayoutPriority proxies | ||
| 64 | + | ||
| 65 | +- (MASConstraint * (^)())priorityLow { | ||
| 66 | + return ^id{ | ||
| 67 | + self.priority(MASLayoutPriorityDefaultLow); | ||
| 68 | + return self; | ||
| 69 | + }; | ||
| 70 | +} | ||
| 71 | + | ||
| 72 | +- (MASConstraint * (^)())priorityMedium { | ||
| 73 | + return ^id{ | ||
| 74 | + self.priority(MASLayoutPriorityDefaultMedium); | ||
| 75 | + return self; | ||
| 76 | + }; | ||
| 77 | +} | ||
| 78 | + | ||
| 79 | +- (MASConstraint * (^)())priorityHigh { | ||
| 80 | + return ^id{ | ||
| 81 | + self.priority(MASLayoutPriorityDefaultHigh); | ||
| 82 | + return self; | ||
| 83 | + }; | ||
| 84 | +} | ||
| 85 | + | ||
| 86 | +#pragma mark - NSLayoutConstraint constant proxies | ||
| 87 | + | ||
| 88 | +- (MASConstraint * (^)(MASEdgeInsets))insets { | ||
| 89 | + return ^id(MASEdgeInsets insets){ | ||
| 90 | + self.insets = insets; | ||
| 91 | + return self; | ||
| 92 | + }; | ||
| 93 | +} | ||
| 94 | + | ||
| 95 | +- (MASConstraint * (^)(CGSize))sizeOffset { | ||
| 96 | + return ^id(CGSize offset) { | ||
| 97 | + self.sizeOffset = offset; | ||
| 98 | + return self; | ||
| 99 | + }; | ||
| 100 | +} | ||
| 101 | + | ||
| 102 | +- (MASConstraint * (^)(CGPoint))centerOffset { | ||
| 103 | + return ^id(CGPoint offset) { | ||
| 104 | + self.centerOffset = offset; | ||
| 105 | + return self; | ||
| 106 | + }; | ||
| 107 | +} | ||
| 108 | + | ||
| 109 | +- (MASConstraint * (^)(CGFloat))offset { | ||
| 110 | + return ^id(CGFloat offset){ | ||
| 111 | + self.offset = offset; | ||
| 112 | + return self; | ||
| 113 | + }; | ||
| 114 | +} | ||
| 115 | + | ||
| 116 | +- (MASConstraint * (^)(NSValue *value))valueOffset { | ||
| 117 | + return ^id(NSValue *offset) { | ||
| 118 | + NSAssert([offset isKindOfClass:NSValue.class], @"expected an NSValue offset, got: %@", offset); | ||
| 119 | + [self setLayoutConstantWithValue:offset]; | ||
| 120 | + return self; | ||
| 121 | + }; | ||
| 122 | +} | ||
| 123 | + | ||
| 124 | +- (MASConstraint * (^)(id offset))mas_offset { | ||
| 125 | + // Will never be called due to macro | ||
| 126 | + return nil; | ||
| 127 | +} | ||
| 128 | + | ||
| 129 | +#pragma mark - NSLayoutConstraint constant setter | ||
| 130 | + | ||
| 131 | +- (void)setLayoutConstantWithValue:(NSValue *)value { | ||
| 132 | + if ([value isKindOfClass:NSNumber.class]) { | ||
| 133 | + self.offset = [(NSNumber *)value doubleValue]; | ||
| 134 | + } else if (strcmp(value.objCType, @encode(CGPoint)) == 0) { | ||
| 135 | + CGPoint point; | ||
| 136 | + [value getValue:&point]; | ||
| 137 | + self.centerOffset = point; | ||
| 138 | + } else if (strcmp(value.objCType, @encode(CGSize)) == 0) { | ||
| 139 | + CGSize size; | ||
| 140 | + [value getValue:&size]; | ||
| 141 | + self.sizeOffset = size; | ||
| 142 | + } else if (strcmp(value.objCType, @encode(MASEdgeInsets)) == 0) { | ||
| 143 | + MASEdgeInsets insets; | ||
| 144 | + [value getValue:&insets]; | ||
| 145 | + self.insets = insets; | ||
| 146 | + } else { | ||
| 147 | + NSAssert(NO, @"attempting to set layout constant with unsupported value: %@", value); | ||
| 148 | + } | ||
| 149 | +} | ||
| 150 | + | ||
| 151 | +#pragma mark - Semantic properties | ||
| 152 | + | ||
| 153 | +- (MASConstraint *)with { | ||
| 154 | + return self; | ||
| 155 | +} | ||
| 156 | + | ||
| 157 | +- (MASConstraint *)and { | ||
| 158 | + return self; | ||
| 159 | +} | ||
| 160 | + | ||
| 161 | +#pragma mark - Chaining | ||
| 162 | + | ||
| 163 | +- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute __unused)layoutAttribute { | ||
| 164 | + MASMethodNotImplemented(); | ||
| 165 | +} | ||
| 166 | + | ||
| 167 | +- (MASConstraint *)left { | ||
| 168 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeft]; | ||
| 169 | +} | ||
| 170 | + | ||
| 171 | +- (MASConstraint *)top { | ||
| 172 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTop]; | ||
| 173 | +} | ||
| 174 | + | ||
| 175 | +- (MASConstraint *)right { | ||
| 176 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRight]; | ||
| 177 | +} | ||
| 178 | + | ||
| 179 | +- (MASConstraint *)bottom { | ||
| 180 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottom]; | ||
| 181 | +} | ||
| 182 | + | ||
| 183 | +- (MASConstraint *)leading { | ||
| 184 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeading]; | ||
| 185 | +} | ||
| 186 | + | ||
| 187 | +- (MASConstraint *)trailing { | ||
| 188 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailing]; | ||
| 189 | +} | ||
| 190 | + | ||
| 191 | +- (MASConstraint *)width { | ||
| 192 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeWidth]; | ||
| 193 | +} | ||
| 194 | + | ||
| 195 | +- (MASConstraint *)height { | ||
| 196 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeHeight]; | ||
| 197 | +} | ||
| 198 | + | ||
| 199 | +- (MASConstraint *)centerX { | ||
| 200 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterX]; | ||
| 201 | +} | ||
| 202 | + | ||
| 203 | +- (MASConstraint *)centerY { | ||
| 204 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterY]; | ||
| 205 | +} | ||
| 206 | + | ||
| 207 | +- (MASConstraint *)baseline { | ||
| 208 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBaseline]; | ||
| 209 | +} | ||
| 210 | + | ||
| 211 | +#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | ||
| 212 | + | ||
| 213 | +- (MASConstraint *)firstBaseline { | ||
| 214 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline]; | ||
| 215 | +} | ||
| 216 | +- (MASConstraint *)lastBaseline { | ||
| 217 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline]; | ||
| 218 | +} | ||
| 219 | + | ||
| 220 | +#endif | ||
| 221 | + | ||
| 222 | +#if TARGET_OS_IPHONE || TARGET_OS_TV | ||
| 223 | + | ||
| 224 | +- (MASConstraint *)leftMargin { | ||
| 225 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin]; | ||
| 226 | +} | ||
| 227 | + | ||
| 228 | +- (MASConstraint *)rightMargin { | ||
| 229 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRightMargin]; | ||
| 230 | +} | ||
| 231 | + | ||
| 232 | +- (MASConstraint *)topMargin { | ||
| 233 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTopMargin]; | ||
| 234 | +} | ||
| 235 | + | ||
| 236 | +- (MASConstraint *)bottomMargin { | ||
| 237 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottomMargin]; | ||
| 238 | +} | ||
| 239 | + | ||
| 240 | +- (MASConstraint *)leadingMargin { | ||
| 241 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeadingMargin]; | ||
| 242 | +} | ||
| 243 | + | ||
| 244 | +- (MASConstraint *)trailingMargin { | ||
| 245 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailingMargin]; | ||
| 246 | +} | ||
| 247 | + | ||
| 248 | +- (MASConstraint *)centerXWithinMargins { | ||
| 249 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterXWithinMargins]; | ||
| 250 | +} | ||
| 251 | + | ||
| 252 | +- (MASConstraint *)centerYWithinMargins { | ||
| 253 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterYWithinMargins]; | ||
| 254 | +} | ||
| 255 | + | ||
| 256 | +#endif | ||
| 257 | + | ||
| 258 | +#pragma mark - Abstract | ||
| 259 | + | ||
| 260 | +- (MASConstraint * (^)(CGFloat multiplier))multipliedBy { MASMethodNotImplemented(); } | ||
| 261 | + | ||
| 262 | +- (MASConstraint * (^)(CGFloat divider))dividedBy { MASMethodNotImplemented(); } | ||
| 263 | + | ||
| 264 | +- (MASConstraint * (^)(MASLayoutPriority priority))priority { MASMethodNotImplemented(); } | ||
| 265 | + | ||
| 266 | +- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation { MASMethodNotImplemented(); } | ||
| 267 | + | ||
| 268 | +- (MASConstraint * (^)(id key))key { MASMethodNotImplemented(); } | ||
| 269 | + | ||
| 270 | +- (void)setInsets:(MASEdgeInsets __unused)insets { MASMethodNotImplemented(); } | ||
| 271 | + | ||
| 272 | +- (void)setSizeOffset:(CGSize __unused)sizeOffset { MASMethodNotImplemented(); } | ||
| 273 | + | ||
| 274 | +- (void)setCenterOffset:(CGPoint __unused)centerOffset { MASMethodNotImplemented(); } | ||
| 275 | + | ||
| 276 | +- (void)setOffset:(CGFloat __unused)offset { MASMethodNotImplemented(); } | ||
| 277 | + | ||
| 278 | +#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV) | ||
| 279 | + | ||
| 280 | +- (MASConstraint *)animator { MASMethodNotImplemented(); } | ||
| 281 | + | ||
| 282 | +#endif | ||
| 283 | + | ||
| 284 | +- (void)activate { MASMethodNotImplemented(); } | ||
| 285 | + | ||
| 286 | +- (void)deactivate { MASMethodNotImplemented(); } | ||
| 287 | + | ||
| 288 | +- (void)install { MASMethodNotImplemented(); } | ||
| 289 | + | ||
| 290 | +- (void)uninstall { MASMethodNotImplemented(); } | ||
| 291 | + | ||
| 292 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/MASConstraintMaker.h
0 → 100755
| 1 | +// | ||
| 2 | +// MASConstraintBuilder.h | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 20/07/13. | ||
| 6 | +// Copyright (c) 2013 cloudling. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "MASConstraint.h" | ||
| 10 | +#import "MASUtilities.h" | ||
| 11 | + | ||
| 12 | +typedef NS_OPTIONS(NSInteger, MASAttribute) { | ||
| 13 | + MASAttributeLeft = 1 << NSLayoutAttributeLeft, | ||
| 14 | + MASAttributeRight = 1 << NSLayoutAttributeRight, | ||
| 15 | + MASAttributeTop = 1 << NSLayoutAttributeTop, | ||
| 16 | + MASAttributeBottom = 1 << NSLayoutAttributeBottom, | ||
| 17 | + MASAttributeLeading = 1 << NSLayoutAttributeLeading, | ||
| 18 | + MASAttributeTrailing = 1 << NSLayoutAttributeTrailing, | ||
| 19 | + MASAttributeWidth = 1 << NSLayoutAttributeWidth, | ||
| 20 | + MASAttributeHeight = 1 << NSLayoutAttributeHeight, | ||
| 21 | + MASAttributeCenterX = 1 << NSLayoutAttributeCenterX, | ||
| 22 | + MASAttributeCenterY = 1 << NSLayoutAttributeCenterY, | ||
| 23 | + MASAttributeBaseline = 1 << NSLayoutAttributeBaseline, | ||
| 24 | + | ||
| 25 | +#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | ||
| 26 | + | ||
| 27 | + MASAttributeFirstBaseline = 1 << NSLayoutAttributeFirstBaseline, | ||
| 28 | + MASAttributeLastBaseline = 1 << NSLayoutAttributeLastBaseline, | ||
| 29 | + | ||
| 30 | +#endif | ||
| 31 | + | ||
| 32 | +#if TARGET_OS_IPHONE || TARGET_OS_TV | ||
| 33 | + | ||
| 34 | + MASAttributeLeftMargin = 1 << NSLayoutAttributeLeftMargin, | ||
| 35 | + MASAttributeRightMargin = 1 << NSLayoutAttributeRightMargin, | ||
| 36 | + MASAttributeTopMargin = 1 << NSLayoutAttributeTopMargin, | ||
| 37 | + MASAttributeBottomMargin = 1 << NSLayoutAttributeBottomMargin, | ||
| 38 | + MASAttributeLeadingMargin = 1 << NSLayoutAttributeLeadingMargin, | ||
| 39 | + MASAttributeTrailingMargin = 1 << NSLayoutAttributeTrailingMargin, | ||
| 40 | + MASAttributeCenterXWithinMargins = 1 << NSLayoutAttributeCenterXWithinMargins, | ||
| 41 | + MASAttributeCenterYWithinMargins = 1 << NSLayoutAttributeCenterYWithinMargins, | ||
| 42 | + | ||
| 43 | +#endif | ||
| 44 | + | ||
| 45 | +}; | ||
| 46 | + | ||
| 47 | +/** | ||
| 48 | + * Provides factory methods for creating MASConstraints. | ||
| 49 | + * Constraints are collected until they are ready to be installed | ||
| 50 | + * | ||
| 51 | + */ | ||
| 52 | +@interface MASConstraintMaker : NSObject | ||
| 53 | + | ||
| 54 | +/** | ||
| 55 | + * The following properties return a new MASViewConstraint | ||
| 56 | + * with the first item set to the makers associated view and the appropriate MASViewAttribute | ||
| 57 | + */ | ||
| 58 | +@property (nonatomic, strong, readonly) MASConstraint *left; | ||
| 59 | +@property (nonatomic, strong, readonly) MASConstraint *top; | ||
| 60 | +@property (nonatomic, strong, readonly) MASConstraint *right; | ||
| 61 | +@property (nonatomic, strong, readonly) MASConstraint *bottom; | ||
| 62 | +@property (nonatomic, strong, readonly) MASConstraint *leading; | ||
| 63 | +@property (nonatomic, strong, readonly) MASConstraint *trailing; | ||
| 64 | +@property (nonatomic, strong, readonly) MASConstraint *width; | ||
| 65 | +@property (nonatomic, strong, readonly) MASConstraint *height; | ||
| 66 | +@property (nonatomic, strong, readonly) MASConstraint *centerX; | ||
| 67 | +@property (nonatomic, strong, readonly) MASConstraint *centerY; | ||
| 68 | +@property (nonatomic, strong, readonly) MASConstraint *baseline; | ||
| 69 | + | ||
| 70 | +#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | ||
| 71 | + | ||
| 72 | +@property (nonatomic, strong, readonly) MASConstraint *firstBaseline; | ||
| 73 | +@property (nonatomic, strong, readonly) MASConstraint *lastBaseline; | ||
| 74 | + | ||
| 75 | +#endif | ||
| 76 | + | ||
| 77 | +#if TARGET_OS_IPHONE || TARGET_OS_TV | ||
| 78 | + | ||
| 79 | +@property (nonatomic, strong, readonly) MASConstraint *leftMargin; | ||
| 80 | +@property (nonatomic, strong, readonly) MASConstraint *rightMargin; | ||
| 81 | +@property (nonatomic, strong, readonly) MASConstraint *topMargin; | ||
| 82 | +@property (nonatomic, strong, readonly) MASConstraint *bottomMargin; | ||
| 83 | +@property (nonatomic, strong, readonly) MASConstraint *leadingMargin; | ||
| 84 | +@property (nonatomic, strong, readonly) MASConstraint *trailingMargin; | ||
| 85 | +@property (nonatomic, strong, readonly) MASConstraint *centerXWithinMargins; | ||
| 86 | +@property (nonatomic, strong, readonly) MASConstraint *centerYWithinMargins; | ||
| 87 | + | ||
| 88 | +#endif | ||
| 89 | + | ||
| 90 | +/** | ||
| 91 | + * Returns a block which creates a new MASCompositeConstraint with the first item set | ||
| 92 | + * to the makers associated view and children corresponding to the set bits in the | ||
| 93 | + * MASAttribute parameter. Combine multiple attributes via binary-or. | ||
| 94 | + */ | ||
| 95 | +@property (nonatomic, strong, readonly) MASConstraint *(^attributes)(MASAttribute attrs); | ||
| 96 | + | ||
| 97 | +/** | ||
| 98 | + * Creates a MASCompositeConstraint with type MASCompositeConstraintTypeEdges | ||
| 99 | + * which generates the appropriate MASViewConstraint children (top, left, bottom, right) | ||
| 100 | + * with the first item set to the makers associated view | ||
| 101 | + */ | ||
| 102 | +@property (nonatomic, strong, readonly) MASConstraint *edges; | ||
| 103 | + | ||
| 104 | +/** | ||
| 105 | + * Creates a MASCompositeConstraint with type MASCompositeConstraintTypeSize | ||
| 106 | + * which generates the appropriate MASViewConstraint children (width, height) | ||
| 107 | + * with the first item set to the makers associated view | ||
| 108 | + */ | ||
| 109 | +@property (nonatomic, strong, readonly) MASConstraint *size; | ||
| 110 | + | ||
| 111 | +/** | ||
| 112 | + * Creates a MASCompositeConstraint with type MASCompositeConstraintTypeCenter | ||
| 113 | + * which generates the appropriate MASViewConstraint children (centerX, centerY) | ||
| 114 | + * with the first item set to the makers associated view | ||
| 115 | + */ | ||
| 116 | +@property (nonatomic, strong, readonly) MASConstraint *center; | ||
| 117 | + | ||
| 118 | +/** | ||
| 119 | + * Whether or not to check for an existing constraint instead of adding constraint | ||
| 120 | + */ | ||
| 121 | +@property (nonatomic, assign) BOOL updateExisting; | ||
| 122 | + | ||
| 123 | +/** | ||
| 124 | + * Whether or not to remove existing constraints prior to installing | ||
| 125 | + */ | ||
| 126 | +@property (nonatomic, assign) BOOL removeExisting; | ||
| 127 | + | ||
| 128 | +/** | ||
| 129 | + * initialises the maker with a default view | ||
| 130 | + * | ||
| 131 | + * @param view any MASConstrait are created with this view as the first item | ||
| 132 | + * | ||
| 133 | + * @return a new MASConstraintMaker | ||
| 134 | + */ | ||
| 135 | +- (id)initWithView:(MAS_VIEW *)view; | ||
| 136 | + | ||
| 137 | +/** | ||
| 138 | + * Calls install method on any MASConstraints which have been created by this maker | ||
| 139 | + * | ||
| 140 | + * @return an array of all the installed MASConstraints | ||
| 141 | + */ | ||
| 142 | +- (NSArray *)install; | ||
| 143 | + | ||
| 144 | +- (MASConstraint * (^)(dispatch_block_t))group; | ||
| 145 | + | ||
| 146 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/MASConstraintMaker.m
0 → 100755
| 1 | +// | ||
| 2 | +// MASConstraintBuilder.m | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 20/07/13. | ||
| 6 | +// Copyright (c) 2013 cloudling. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "MASConstraintMaker.h" | ||
| 10 | +#import "MASViewConstraint.h" | ||
| 11 | +#import "MASCompositeConstraint.h" | ||
| 12 | +#import "MASConstraint+Private.h" | ||
| 13 | +#import "MASViewAttribute.h" | ||
| 14 | +#import "View+MASAdditions.h" | ||
| 15 | + | ||
| 16 | +@interface MASConstraintMaker () <MASConstraintDelegate> | ||
| 17 | + | ||
| 18 | +@property (nonatomic, weak) MAS_VIEW *view; | ||
| 19 | +@property (nonatomic, strong) NSMutableArray *constraints; | ||
| 20 | + | ||
| 21 | +@end | ||
| 22 | + | ||
| 23 | +@implementation MASConstraintMaker | ||
| 24 | + | ||
| 25 | +- (id)initWithView:(MAS_VIEW *)view { | ||
| 26 | + self = [super init]; | ||
| 27 | + if (!self) return nil; | ||
| 28 | + | ||
| 29 | + self.view = view; | ||
| 30 | + self.constraints = NSMutableArray.new; | ||
| 31 | + | ||
| 32 | + return self; | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +- (NSArray *)install { | ||
| 36 | + if (self.removeExisting) { | ||
| 37 | + NSArray *installedConstraints = [MASViewConstraint installedConstraintsForView:self.view]; | ||
| 38 | + for (MASConstraint *constraint in installedConstraints) { | ||
| 39 | + [constraint uninstall]; | ||
| 40 | + } | ||
| 41 | + } | ||
| 42 | + NSArray *constraints = self.constraints.copy; | ||
| 43 | + for (MASConstraint *constraint in constraints) { | ||
| 44 | + constraint.updateExisting = self.updateExisting; | ||
| 45 | + [constraint install]; | ||
| 46 | + } | ||
| 47 | + [self.constraints removeAllObjects]; | ||
| 48 | + return constraints; | ||
| 49 | +} | ||
| 50 | + | ||
| 51 | +#pragma mark - MASConstraintDelegate | ||
| 52 | + | ||
| 53 | +- (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint { | ||
| 54 | + NSUInteger index = [self.constraints indexOfObject:constraint]; | ||
| 55 | + NSAssert(index != NSNotFound, @"Could not find constraint %@", constraint); | ||
| 56 | + [self.constraints replaceObjectAtIndex:index withObject:replacementConstraint]; | ||
| 57 | +} | ||
| 58 | + | ||
| 59 | +- (MASConstraint *)constraint:(MASConstraint *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute { | ||
| 60 | + MASViewAttribute *viewAttribute = [[MASViewAttribute alloc] initWithView:self.view layoutAttribute:layoutAttribute]; | ||
| 61 | + MASViewConstraint *newConstraint = [[MASViewConstraint alloc] initWithFirstViewAttribute:viewAttribute]; | ||
| 62 | + if ([constraint isKindOfClass:MASViewConstraint.class]) { | ||
| 63 | + //replace with composite constraint | ||
| 64 | + NSArray *children = @[constraint, newConstraint]; | ||
| 65 | + MASCompositeConstraint *compositeConstraint = [[MASCompositeConstraint alloc] initWithChildren:children]; | ||
| 66 | + compositeConstraint.delegate = self; | ||
| 67 | + [self constraint:constraint shouldBeReplacedWithConstraint:compositeConstraint]; | ||
| 68 | + return compositeConstraint; | ||
| 69 | + } | ||
| 70 | + if (!constraint) { | ||
| 71 | + newConstraint.delegate = self; | ||
| 72 | + [self.constraints addObject:newConstraint]; | ||
| 73 | + } | ||
| 74 | + return newConstraint; | ||
| 75 | +} | ||
| 76 | + | ||
| 77 | +- (MASConstraint *)addConstraintWithAttributes:(MASAttribute)attrs { | ||
| 78 | + __unused MASAttribute anyAttribute = (MASAttributeLeft | MASAttributeRight | MASAttributeTop | MASAttributeBottom | MASAttributeLeading | ||
| 79 | + | MASAttributeTrailing | MASAttributeWidth | MASAttributeHeight | MASAttributeCenterX | ||
| 80 | + | MASAttributeCenterY | MASAttributeBaseline | ||
| 81 | +#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | ||
| 82 | + | MASAttributeFirstBaseline | MASAttributeLastBaseline | ||
| 83 | +#endif | ||
| 84 | +#if TARGET_OS_IPHONE || TARGET_OS_TV | ||
| 85 | + | MASAttributeLeftMargin | MASAttributeRightMargin | MASAttributeTopMargin | MASAttributeBottomMargin | ||
| 86 | + | MASAttributeLeadingMargin | MASAttributeTrailingMargin | MASAttributeCenterXWithinMargins | ||
| 87 | + | MASAttributeCenterYWithinMargins | ||
| 88 | +#endif | ||
| 89 | + ); | ||
| 90 | + | ||
| 91 | + NSAssert((attrs & anyAttribute) != 0, @"You didn't pass any attribute to make.attributes(...)"); | ||
| 92 | + | ||
| 93 | + NSMutableArray *attributes = [NSMutableArray array]; | ||
| 94 | + | ||
| 95 | + if (attrs & MASAttributeLeft) [attributes addObject:self.view.mas_left]; | ||
| 96 | + if (attrs & MASAttributeRight) [attributes addObject:self.view.mas_right]; | ||
| 97 | + if (attrs & MASAttributeTop) [attributes addObject:self.view.mas_top]; | ||
| 98 | + if (attrs & MASAttributeBottom) [attributes addObject:self.view.mas_bottom]; | ||
| 99 | + if (attrs & MASAttributeLeading) [attributes addObject:self.view.mas_leading]; | ||
| 100 | + if (attrs & MASAttributeTrailing) [attributes addObject:self.view.mas_trailing]; | ||
| 101 | + if (attrs & MASAttributeWidth) [attributes addObject:self.view.mas_width]; | ||
| 102 | + if (attrs & MASAttributeHeight) [attributes addObject:self.view.mas_height]; | ||
| 103 | + if (attrs & MASAttributeCenterX) [attributes addObject:self.view.mas_centerX]; | ||
| 104 | + if (attrs & MASAttributeCenterY) [attributes addObject:self.view.mas_centerY]; | ||
| 105 | + if (attrs & MASAttributeBaseline) [attributes addObject:self.view.mas_baseline]; | ||
| 106 | + | ||
| 107 | +#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | ||
| 108 | + | ||
| 109 | + if (attrs & MASAttributeFirstBaseline) [attributes addObject:self.view.mas_firstBaseline]; | ||
| 110 | + if (attrs & MASAttributeLastBaseline) [attributes addObject:self.view.mas_lastBaseline]; | ||
| 111 | + | ||
| 112 | +#endif | ||
| 113 | + | ||
| 114 | +#if TARGET_OS_IPHONE || TARGET_OS_TV | ||
| 115 | + | ||
| 116 | + if (attrs & MASAttributeLeftMargin) [attributes addObject:self.view.mas_leftMargin]; | ||
| 117 | + if (attrs & MASAttributeRightMargin) [attributes addObject:self.view.mas_rightMargin]; | ||
| 118 | + if (attrs & MASAttributeTopMargin) [attributes addObject:self.view.mas_topMargin]; | ||
| 119 | + if (attrs & MASAttributeBottomMargin) [attributes addObject:self.view.mas_bottomMargin]; | ||
| 120 | + if (attrs & MASAttributeLeadingMargin) [attributes addObject:self.view.mas_leadingMargin]; | ||
| 121 | + if (attrs & MASAttributeTrailingMargin) [attributes addObject:self.view.mas_trailingMargin]; | ||
| 122 | + if (attrs & MASAttributeCenterXWithinMargins) [attributes addObject:self.view.mas_centerXWithinMargins]; | ||
| 123 | + if (attrs & MASAttributeCenterYWithinMargins) [attributes addObject:self.view.mas_centerYWithinMargins]; | ||
| 124 | + | ||
| 125 | +#endif | ||
| 126 | + | ||
| 127 | + NSMutableArray *children = [NSMutableArray arrayWithCapacity:attributes.count]; | ||
| 128 | + | ||
| 129 | + for (MASViewAttribute *a in attributes) { | ||
| 130 | + [children addObject:[[MASViewConstraint alloc] initWithFirstViewAttribute:a]]; | ||
| 131 | + } | ||
| 132 | + | ||
| 133 | + MASCompositeConstraint *constraint = [[MASCompositeConstraint alloc] initWithChildren:children]; | ||
| 134 | + constraint.delegate = self; | ||
| 135 | + [self.constraints addObject:constraint]; | ||
| 136 | + return constraint; | ||
| 137 | +} | ||
| 138 | + | ||
| 139 | +#pragma mark - standard Attributes | ||
| 140 | + | ||
| 141 | +- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute { | ||
| 142 | + return [self constraint:nil addConstraintWithLayoutAttribute:layoutAttribute]; | ||
| 143 | +} | ||
| 144 | + | ||
| 145 | +- (MASConstraint *)left { | ||
| 146 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeft]; | ||
| 147 | +} | ||
| 148 | + | ||
| 149 | +- (MASConstraint *)top { | ||
| 150 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTop]; | ||
| 151 | +} | ||
| 152 | + | ||
| 153 | +- (MASConstraint *)right { | ||
| 154 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRight]; | ||
| 155 | +} | ||
| 156 | + | ||
| 157 | +- (MASConstraint *)bottom { | ||
| 158 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottom]; | ||
| 159 | +} | ||
| 160 | + | ||
| 161 | +- (MASConstraint *)leading { | ||
| 162 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeading]; | ||
| 163 | +} | ||
| 164 | + | ||
| 165 | +- (MASConstraint *)trailing { | ||
| 166 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailing]; | ||
| 167 | +} | ||
| 168 | + | ||
| 169 | +- (MASConstraint *)width { | ||
| 170 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeWidth]; | ||
| 171 | +} | ||
| 172 | + | ||
| 173 | +- (MASConstraint *)height { | ||
| 174 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeHeight]; | ||
| 175 | +} | ||
| 176 | + | ||
| 177 | +- (MASConstraint *)centerX { | ||
| 178 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterX]; | ||
| 179 | +} | ||
| 180 | + | ||
| 181 | +- (MASConstraint *)centerY { | ||
| 182 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterY]; | ||
| 183 | +} | ||
| 184 | + | ||
| 185 | +- (MASConstraint *)baseline { | ||
| 186 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBaseline]; | ||
| 187 | +} | ||
| 188 | + | ||
| 189 | +- (MASConstraint *(^)(MASAttribute))attributes { | ||
| 190 | + return ^(MASAttribute attrs){ | ||
| 191 | + return [self addConstraintWithAttributes:attrs]; | ||
| 192 | + }; | ||
| 193 | +} | ||
| 194 | + | ||
| 195 | +#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | ||
| 196 | + | ||
| 197 | +- (MASConstraint *)firstBaseline { | ||
| 198 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline]; | ||
| 199 | +} | ||
| 200 | + | ||
| 201 | +- (MASConstraint *)lastBaseline { | ||
| 202 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline]; | ||
| 203 | +} | ||
| 204 | + | ||
| 205 | +#endif | ||
| 206 | + | ||
| 207 | + | ||
| 208 | +#if TARGET_OS_IPHONE || TARGET_OS_TV | ||
| 209 | + | ||
| 210 | +- (MASConstraint *)leftMargin { | ||
| 211 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin]; | ||
| 212 | +} | ||
| 213 | + | ||
| 214 | +- (MASConstraint *)rightMargin { | ||
| 215 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRightMargin]; | ||
| 216 | +} | ||
| 217 | + | ||
| 218 | +- (MASConstraint *)topMargin { | ||
| 219 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTopMargin]; | ||
| 220 | +} | ||
| 221 | + | ||
| 222 | +- (MASConstraint *)bottomMargin { | ||
| 223 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottomMargin]; | ||
| 224 | +} | ||
| 225 | + | ||
| 226 | +- (MASConstraint *)leadingMargin { | ||
| 227 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeadingMargin]; | ||
| 228 | +} | ||
| 229 | + | ||
| 230 | +- (MASConstraint *)trailingMargin { | ||
| 231 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailingMargin]; | ||
| 232 | +} | ||
| 233 | + | ||
| 234 | +- (MASConstraint *)centerXWithinMargins { | ||
| 235 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterXWithinMargins]; | ||
| 236 | +} | ||
| 237 | + | ||
| 238 | +- (MASConstraint *)centerYWithinMargins { | ||
| 239 | + return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterYWithinMargins]; | ||
| 240 | +} | ||
| 241 | + | ||
| 242 | +#endif | ||
| 243 | + | ||
| 244 | + | ||
| 245 | +#pragma mark - composite Attributes | ||
| 246 | + | ||
| 247 | +- (MASConstraint *)edges { | ||
| 248 | + return [self addConstraintWithAttributes:MASAttributeTop | MASAttributeLeft | MASAttributeRight | MASAttributeBottom]; | ||
| 249 | +} | ||
| 250 | + | ||
| 251 | +- (MASConstraint *)size { | ||
| 252 | + return [self addConstraintWithAttributes:MASAttributeWidth | MASAttributeHeight]; | ||
| 253 | +} | ||
| 254 | + | ||
| 255 | +- (MASConstraint *)center { | ||
| 256 | + return [self addConstraintWithAttributes:MASAttributeCenterX | MASAttributeCenterY]; | ||
| 257 | +} | ||
| 258 | + | ||
| 259 | +#pragma mark - grouping | ||
| 260 | + | ||
| 261 | +- (MASConstraint *(^)(dispatch_block_t group))group { | ||
| 262 | + return ^id(dispatch_block_t group) { | ||
| 263 | + NSInteger previousCount = self.constraints.count; | ||
| 264 | + group(); | ||
| 265 | + | ||
| 266 | + NSArray *children = [self.constraints subarrayWithRange:NSMakeRange(previousCount, self.constraints.count - previousCount)]; | ||
| 267 | + MASCompositeConstraint *constraint = [[MASCompositeConstraint alloc] initWithChildren:children]; | ||
| 268 | + constraint.delegate = self; | ||
| 269 | + return constraint; | ||
| 270 | + }; | ||
| 271 | +} | ||
| 272 | + | ||
| 273 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/MASLayoutConstraint.h
0 → 100755
| 1 | +// | ||
| 2 | +// MASLayoutConstraint.h | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 3/08/13. | ||
| 6 | +// Copyright (c) 2013 Jonas Budelmann. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "MASUtilities.h" | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * When you are debugging or printing the constraints attached to a view this subclass | ||
| 13 | + * makes it easier to identify which constraints have been created via Masonry | ||
| 14 | + */ | ||
| 15 | +@interface MASLayoutConstraint : NSLayoutConstraint | ||
| 16 | + | ||
| 17 | +/** | ||
| 18 | + * a key to associate with this constraint | ||
| 19 | + */ | ||
| 20 | +@property (nonatomic, strong) id mas_key; | ||
| 21 | + | ||
| 22 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/MASLayoutConstraint.m
0 → 100755
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/MASUtilities.h
0 → 100755
| 1 | +// | ||
| 2 | +// MASUtilities.h | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 19/08/13. | ||
| 6 | +// Copyright (c) 2013 Jonas Budelmann. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import <Foundation/Foundation.h> | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + | ||
| 13 | +#if TARGET_OS_IPHONE || TARGET_OS_TV | ||
| 14 | + | ||
| 15 | + #import <UIKit/UIKit.h> | ||
| 16 | + #define MAS_VIEW UIView | ||
| 17 | + #define MAS_VIEW_CONTROLLER UIViewController | ||
| 18 | + #define MASEdgeInsets UIEdgeInsets | ||
| 19 | + | ||
| 20 | + typedef UILayoutPriority MASLayoutPriority; | ||
| 21 | + static const MASLayoutPriority MASLayoutPriorityRequired = UILayoutPriorityRequired; | ||
| 22 | + static const MASLayoutPriority MASLayoutPriorityDefaultHigh = UILayoutPriorityDefaultHigh; | ||
| 23 | + static const MASLayoutPriority MASLayoutPriorityDefaultMedium = 500; | ||
| 24 | + static const MASLayoutPriority MASLayoutPriorityDefaultLow = UILayoutPriorityDefaultLow; | ||
| 25 | + static const MASLayoutPriority MASLayoutPriorityFittingSizeLevel = UILayoutPriorityFittingSizeLevel; | ||
| 26 | + | ||
| 27 | +#elif TARGET_OS_MAC | ||
| 28 | + | ||
| 29 | + #import <AppKit/AppKit.h> | ||
| 30 | + #define MAS_VIEW NSView | ||
| 31 | + #define MASEdgeInsets NSEdgeInsets | ||
| 32 | + | ||
| 33 | + typedef NSLayoutPriority MASLayoutPriority; | ||
| 34 | + static const MASLayoutPriority MASLayoutPriorityRequired = NSLayoutPriorityRequired; | ||
| 35 | + static const MASLayoutPriority MASLayoutPriorityDefaultHigh = NSLayoutPriorityDefaultHigh; | ||
| 36 | + static const MASLayoutPriority MASLayoutPriorityDragThatCanResizeWindow = NSLayoutPriorityDragThatCanResizeWindow; | ||
| 37 | + static const MASLayoutPriority MASLayoutPriorityDefaultMedium = 501; | ||
| 38 | + static const MASLayoutPriority MASLayoutPriorityWindowSizeStayPut = NSLayoutPriorityWindowSizeStayPut; | ||
| 39 | + static const MASLayoutPriority MASLayoutPriorityDragThatCannotResizeWindow = NSLayoutPriorityDragThatCannotResizeWindow; | ||
| 40 | + static const MASLayoutPriority MASLayoutPriorityDefaultLow = NSLayoutPriorityDefaultLow; | ||
| 41 | + static const MASLayoutPriority MASLayoutPriorityFittingSizeCompression = NSLayoutPriorityFittingSizeCompression; | ||
| 42 | + | ||
| 43 | +#endif | ||
| 44 | + | ||
| 45 | +/** | ||
| 46 | + * Allows you to attach keys to objects matching the variable names passed. | ||
| 47 | + * | ||
| 48 | + * view1.mas_key = @"view1", view2.mas_key = @"view2"; | ||
| 49 | + * | ||
| 50 | + * is equivalent to: | ||
| 51 | + * | ||
| 52 | + * MASAttachKeys(view1, view2); | ||
| 53 | + */ | ||
| 54 | +#define MASAttachKeys(...) \ | ||
| 55 | + { \ | ||
| 56 | + NSDictionary *keyPairs = NSDictionaryOfVariableBindings(__VA_ARGS__); \ | ||
| 57 | + for (id key in keyPairs.allKeys) { \ | ||
| 58 | + id obj = keyPairs[key]; \ | ||
| 59 | + NSAssert([obj respondsToSelector:@selector(setMas_key:)], \ | ||
| 60 | + @"Cannot attach mas_key to %@", obj); \ | ||
| 61 | + [obj setMas_key:key]; \ | ||
| 62 | + } \ | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | +/** | ||
| 66 | + * Used to create object hashes | ||
| 67 | + * Based on http://www.mikeash.com/pyblog/friday-qa-2010-06-18-implementing-equality-and-hashing.html | ||
| 68 | + */ | ||
| 69 | +#define MAS_NSUINT_BIT (CHAR_BIT * sizeof(NSUInteger)) | ||
| 70 | +#define MAS_NSUINTROTATE(val, howmuch) ((((NSUInteger)val) << howmuch) | (((NSUInteger)val) >> (MAS_NSUINT_BIT - howmuch))) | ||
| 71 | + | ||
| 72 | +/** | ||
| 73 | + * Given a scalar or struct value, wraps it in NSValue | ||
| 74 | + * Based on EXPObjectify: https://github.com/specta/expecta | ||
| 75 | + */ | ||
| 76 | +static inline id _MASBoxValue(const char *type, ...) { | ||
| 77 | + va_list v; | ||
| 78 | + va_start(v, type); | ||
| 79 | + id obj = nil; | ||
| 80 | + if (strcmp(type, @encode(id)) == 0) { | ||
| 81 | + id actual = va_arg(v, id); | ||
| 82 | + obj = actual; | ||
| 83 | + } else if (strcmp(type, @encode(CGPoint)) == 0) { | ||
| 84 | + CGPoint actual = (CGPoint)va_arg(v, CGPoint); | ||
| 85 | + obj = [NSValue value:&actual withObjCType:type]; | ||
| 86 | + } else if (strcmp(type, @encode(CGSize)) == 0) { | ||
| 87 | + CGSize actual = (CGSize)va_arg(v, CGSize); | ||
| 88 | + obj = [NSValue value:&actual withObjCType:type]; | ||
| 89 | + } else if (strcmp(type, @encode(MASEdgeInsets)) == 0) { | ||
| 90 | + MASEdgeInsets actual = (MASEdgeInsets)va_arg(v, MASEdgeInsets); | ||
| 91 | + obj = [NSValue value:&actual withObjCType:type]; | ||
| 92 | + } else if (strcmp(type, @encode(double)) == 0) { | ||
| 93 | + double actual = (double)va_arg(v, double); | ||
| 94 | + obj = [NSNumber numberWithDouble:actual]; | ||
| 95 | + } else if (strcmp(type, @encode(float)) == 0) { | ||
| 96 | + float actual = (float)va_arg(v, double); | ||
| 97 | + obj = [NSNumber numberWithFloat:actual]; | ||
| 98 | + } else if (strcmp(type, @encode(int)) == 0) { | ||
| 99 | + int actual = (int)va_arg(v, int); | ||
| 100 | + obj = [NSNumber numberWithInt:actual]; | ||
| 101 | + } else if (strcmp(type, @encode(long)) == 0) { | ||
| 102 | + long actual = (long)va_arg(v, long); | ||
| 103 | + obj = [NSNumber numberWithLong:actual]; | ||
| 104 | + } else if (strcmp(type, @encode(long long)) == 0) { | ||
| 105 | + long long actual = (long long)va_arg(v, long long); | ||
| 106 | + obj = [NSNumber numberWithLongLong:actual]; | ||
| 107 | + } else if (strcmp(type, @encode(short)) == 0) { | ||
| 108 | + short actual = (short)va_arg(v, int); | ||
| 109 | + obj = [NSNumber numberWithShort:actual]; | ||
| 110 | + } else if (strcmp(type, @encode(char)) == 0) { | ||
| 111 | + char actual = (char)va_arg(v, int); | ||
| 112 | + obj = [NSNumber numberWithChar:actual]; | ||
| 113 | + } else if (strcmp(type, @encode(bool)) == 0) { | ||
| 114 | + bool actual = (bool)va_arg(v, int); | ||
| 115 | + obj = [NSNumber numberWithBool:actual]; | ||
| 116 | + } else if (strcmp(type, @encode(unsigned char)) == 0) { | ||
| 117 | + unsigned char actual = (unsigned char)va_arg(v, unsigned int); | ||
| 118 | + obj = [NSNumber numberWithUnsignedChar:actual]; | ||
| 119 | + } else if (strcmp(type, @encode(unsigned int)) == 0) { | ||
| 120 | + unsigned int actual = (unsigned int)va_arg(v, unsigned int); | ||
| 121 | + obj = [NSNumber numberWithUnsignedInt:actual]; | ||
| 122 | + } else if (strcmp(type, @encode(unsigned long)) == 0) { | ||
| 123 | + unsigned long actual = (unsigned long)va_arg(v, unsigned long); | ||
| 124 | + obj = [NSNumber numberWithUnsignedLong:actual]; | ||
| 125 | + } else if (strcmp(type, @encode(unsigned long long)) == 0) { | ||
| 126 | + unsigned long long actual = (unsigned long long)va_arg(v, unsigned long long); | ||
| 127 | + obj = [NSNumber numberWithUnsignedLongLong:actual]; | ||
| 128 | + } else if (strcmp(type, @encode(unsigned short)) == 0) { | ||
| 129 | + unsigned short actual = (unsigned short)va_arg(v, unsigned int); | ||
| 130 | + obj = [NSNumber numberWithUnsignedShort:actual]; | ||
| 131 | + } | ||
| 132 | + va_end(v); | ||
| 133 | + return obj; | ||
| 134 | +} | ||
| 135 | + | ||
| 136 | +#define MASBoxValue(value) _MASBoxValue(@encode(__typeof__((value))), (value)) |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/MASViewAttribute.h
0 → 100755
| 1 | +// | ||
| 2 | +// MASAttribute.h | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 21/07/13. | ||
| 6 | +// Copyright (c) 2013 cloudling. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "MASUtilities.h" | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * An immutable tuple which stores the view and the related NSLayoutAttribute. | ||
| 13 | + * Describes part of either the left or right hand side of a constraint equation | ||
| 14 | + */ | ||
| 15 | +@interface MASViewAttribute : NSObject | ||
| 16 | + | ||
| 17 | +/** | ||
| 18 | + * The view which the reciever relates to. Can be nil if item is not a view. | ||
| 19 | + */ | ||
| 20 | +@property (nonatomic, weak, readonly) MAS_VIEW *view; | ||
| 21 | + | ||
| 22 | +/** | ||
| 23 | + * The item which the reciever relates to. | ||
| 24 | + */ | ||
| 25 | +@property (nonatomic, weak, readonly) id item; | ||
| 26 | + | ||
| 27 | +/** | ||
| 28 | + * The attribute which the reciever relates to | ||
| 29 | + */ | ||
| 30 | +@property (nonatomic, assign, readonly) NSLayoutAttribute layoutAttribute; | ||
| 31 | + | ||
| 32 | +/** | ||
| 33 | + * Convenience initializer. | ||
| 34 | + */ | ||
| 35 | +- (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute; | ||
| 36 | + | ||
| 37 | +/** | ||
| 38 | + * The designated initializer. | ||
| 39 | + */ | ||
| 40 | +- (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute; | ||
| 41 | + | ||
| 42 | +/** | ||
| 43 | + * Determine whether the layoutAttribute is a size attribute | ||
| 44 | + * | ||
| 45 | + * @return YES if layoutAttribute is equal to NSLayoutAttributeWidth or NSLayoutAttributeHeight | ||
| 46 | + */ | ||
| 47 | +- (BOOL)isSizeAttribute; | ||
| 48 | + | ||
| 49 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/MASViewAttribute.m
0 → 100755
| 1 | +// | ||
| 2 | +// MASAttribute.m | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 21/07/13. | ||
| 6 | +// Copyright (c) 2013 cloudling. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "MASViewAttribute.h" | ||
| 10 | + | ||
| 11 | +@implementation MASViewAttribute | ||
| 12 | + | ||
| 13 | +- (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute { | ||
| 14 | + self = [self initWithView:view item:view layoutAttribute:layoutAttribute]; | ||
| 15 | + return self; | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +- (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute { | ||
| 19 | + self = [super init]; | ||
| 20 | + if (!self) return nil; | ||
| 21 | + | ||
| 22 | + _view = view; | ||
| 23 | + _item = item; | ||
| 24 | + _layoutAttribute = layoutAttribute; | ||
| 25 | + | ||
| 26 | + return self; | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +- (BOOL)isSizeAttribute { | ||
| 30 | + return self.layoutAttribute == NSLayoutAttributeWidth | ||
| 31 | + || self.layoutAttribute == NSLayoutAttributeHeight; | ||
| 32 | +} | ||
| 33 | + | ||
| 34 | +- (BOOL)isEqual:(MASViewAttribute *)viewAttribute { | ||
| 35 | + if ([viewAttribute isKindOfClass:self.class]) { | ||
| 36 | + return self.view == viewAttribute.view | ||
| 37 | + && self.layoutAttribute == viewAttribute.layoutAttribute; | ||
| 38 | + } | ||
| 39 | + return [super isEqual:viewAttribute]; | ||
| 40 | +} | ||
| 41 | + | ||
| 42 | +- (NSUInteger)hash { | ||
| 43 | + return MAS_NSUINTROTATE([self.view hash], MAS_NSUINT_BIT / 2) ^ self.layoutAttribute; | ||
| 44 | +} | ||
| 45 | + | ||
| 46 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/MASViewConstraint.h
0 → 100755
| 1 | +// | ||
| 2 | +// MASConstraint.h | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 20/07/13. | ||
| 6 | +// Copyright (c) 2013 cloudling. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "MASViewAttribute.h" | ||
| 10 | +#import "MASConstraint.h" | ||
| 11 | +#import "MASLayoutConstraint.h" | ||
| 12 | +#import "MASUtilities.h" | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * A single constraint. | ||
| 16 | + * Contains the attributes neccessary for creating a NSLayoutConstraint and adding it to the appropriate view | ||
| 17 | + */ | ||
| 18 | +@interface MASViewConstraint : MASConstraint <NSCopying> | ||
| 19 | + | ||
| 20 | +/** | ||
| 21 | + * First item/view and first attribute of the NSLayoutConstraint | ||
| 22 | + */ | ||
| 23 | +@property (nonatomic, strong, readonly) MASViewAttribute *firstViewAttribute; | ||
| 24 | + | ||
| 25 | +/** | ||
| 26 | + * Second item/view and second attribute of the NSLayoutConstraint | ||
| 27 | + */ | ||
| 28 | +@property (nonatomic, strong, readonly) MASViewAttribute *secondViewAttribute; | ||
| 29 | + | ||
| 30 | +/** | ||
| 31 | + * initialises the MASViewConstraint with the first part of the equation | ||
| 32 | + * | ||
| 33 | + * @param firstViewAttribute view.mas_left, view.mas_width etc. | ||
| 34 | + * | ||
| 35 | + * @return a new view constraint | ||
| 36 | + */ | ||
| 37 | +- (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute; | ||
| 38 | + | ||
| 39 | +/** | ||
| 40 | + * Returns all MASViewConstraints installed with this view as a first item. | ||
| 41 | + * | ||
| 42 | + * @param view A view to retrieve constraints for. | ||
| 43 | + * | ||
| 44 | + * @return An array of MASViewConstraints. | ||
| 45 | + */ | ||
| 46 | ++ (NSArray *)installedConstraintsForView:(MAS_VIEW *)view; | ||
| 47 | + | ||
| 48 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/MASViewConstraint.m
0 → 100755
| 1 | +// | ||
| 2 | +// MASConstraint.m | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 20/07/13. | ||
| 6 | +// Copyright (c) 2013 cloudling. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "MASViewConstraint.h" | ||
| 10 | +#import "MASConstraint+Private.h" | ||
| 11 | +#import "MASCompositeConstraint.h" | ||
| 12 | +#import "MASLayoutConstraint.h" | ||
| 13 | +#import "View+MASAdditions.h" | ||
| 14 | +#import <objc/runtime.h> | ||
| 15 | + | ||
| 16 | +@interface MAS_VIEW (MASConstraints) | ||
| 17 | + | ||
| 18 | +@property (nonatomic, readonly) NSMutableSet *mas_installedConstraints; | ||
| 19 | + | ||
| 20 | +@end | ||
| 21 | + | ||
| 22 | +@implementation MAS_VIEW (MASConstraints) | ||
| 23 | + | ||
| 24 | +static char kInstalledConstraintsKey; | ||
| 25 | + | ||
| 26 | +- (NSMutableSet *)mas_installedConstraints { | ||
| 27 | + NSMutableSet *constraints = objc_getAssociatedObject(self, &kInstalledConstraintsKey); | ||
| 28 | + if (!constraints) { | ||
| 29 | + constraints = [NSMutableSet set]; | ||
| 30 | + objc_setAssociatedObject(self, &kInstalledConstraintsKey, constraints, OBJC_ASSOCIATION_RETAIN_NONATOMIC); | ||
| 31 | + } | ||
| 32 | + return constraints; | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +@end | ||
| 36 | + | ||
| 37 | + | ||
| 38 | +@interface MASViewConstraint () | ||
| 39 | + | ||
| 40 | +@property (nonatomic, strong, readwrite) MASViewAttribute *secondViewAttribute; | ||
| 41 | +@property (nonatomic, weak) MAS_VIEW *installedView; | ||
| 42 | +@property (nonatomic, weak) MASLayoutConstraint *layoutConstraint; | ||
| 43 | +@property (nonatomic, assign) NSLayoutRelation layoutRelation; | ||
| 44 | +@property (nonatomic, assign) MASLayoutPriority layoutPriority; | ||
| 45 | +@property (nonatomic, assign) CGFloat layoutMultiplier; | ||
| 46 | +@property (nonatomic, assign) CGFloat layoutConstant; | ||
| 47 | +@property (nonatomic, assign) BOOL hasLayoutRelation; | ||
| 48 | +@property (nonatomic, strong) id mas_key; | ||
| 49 | +@property (nonatomic, assign) BOOL useAnimator; | ||
| 50 | + | ||
| 51 | +@end | ||
| 52 | + | ||
| 53 | +@implementation MASViewConstraint | ||
| 54 | + | ||
| 55 | +- (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute { | ||
| 56 | + self = [super init]; | ||
| 57 | + if (!self) return nil; | ||
| 58 | + | ||
| 59 | + _firstViewAttribute = firstViewAttribute; | ||
| 60 | + self.layoutPriority = MASLayoutPriorityRequired; | ||
| 61 | + self.layoutMultiplier = 1; | ||
| 62 | + | ||
| 63 | + return self; | ||
| 64 | +} | ||
| 65 | + | ||
| 66 | +#pragma mark - NSCoping | ||
| 67 | + | ||
| 68 | +- (id)copyWithZone:(NSZone __unused *)zone { | ||
| 69 | + MASViewConstraint *constraint = [[MASViewConstraint alloc] initWithFirstViewAttribute:self.firstViewAttribute]; | ||
| 70 | + constraint.layoutConstant = self.layoutConstant; | ||
| 71 | + constraint.layoutRelation = self.layoutRelation; | ||
| 72 | + constraint.layoutPriority = self.layoutPriority; | ||
| 73 | + constraint.layoutMultiplier = self.layoutMultiplier; | ||
| 74 | + constraint.delegate = self.delegate; | ||
| 75 | + return constraint; | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | +#pragma mark - Public | ||
| 79 | + | ||
| 80 | ++ (NSArray *)installedConstraintsForView:(MAS_VIEW *)view { | ||
| 81 | + return [view.mas_installedConstraints allObjects]; | ||
| 82 | +} | ||
| 83 | + | ||
| 84 | +#pragma mark - Private | ||
| 85 | + | ||
| 86 | +- (void)setLayoutConstant:(CGFloat)layoutConstant { | ||
| 87 | + _layoutConstant = layoutConstant; | ||
| 88 | + | ||
| 89 | +#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV) | ||
| 90 | + if (self.useAnimator) { | ||
| 91 | + [self.layoutConstraint.animator setConstant:layoutConstant]; | ||
| 92 | + } else { | ||
| 93 | + self.layoutConstraint.constant = layoutConstant; | ||
| 94 | + } | ||
| 95 | +#else | ||
| 96 | + self.layoutConstraint.constant = layoutConstant; | ||
| 97 | +#endif | ||
| 98 | +} | ||
| 99 | + | ||
| 100 | +- (void)setLayoutRelation:(NSLayoutRelation)layoutRelation { | ||
| 101 | + _layoutRelation = layoutRelation; | ||
| 102 | + self.hasLayoutRelation = YES; | ||
| 103 | +} | ||
| 104 | + | ||
| 105 | +- (BOOL)supportsActiveProperty { | ||
| 106 | + return [self.layoutConstraint respondsToSelector:@selector(isActive)]; | ||
| 107 | +} | ||
| 108 | + | ||
| 109 | +- (BOOL)isActive { | ||
| 110 | + BOOL active = YES; | ||
| 111 | + if ([self supportsActiveProperty]) { | ||
| 112 | + active = [self.layoutConstraint isActive]; | ||
| 113 | + } | ||
| 114 | + | ||
| 115 | + return active; | ||
| 116 | +} | ||
| 117 | + | ||
| 118 | +- (BOOL)hasBeenInstalled { | ||
| 119 | + return (self.layoutConstraint != nil) && [self isActive]; | ||
| 120 | +} | ||
| 121 | + | ||
| 122 | +- (void)setSecondViewAttribute:(id)secondViewAttribute { | ||
| 123 | + if ([secondViewAttribute isKindOfClass:NSValue.class]) { | ||
| 124 | + [self setLayoutConstantWithValue:secondViewAttribute]; | ||
| 125 | + } else if ([secondViewAttribute isKindOfClass:MAS_VIEW.class]) { | ||
| 126 | + _secondViewAttribute = [[MASViewAttribute alloc] initWithView:secondViewAttribute layoutAttribute:self.firstViewAttribute.layoutAttribute]; | ||
| 127 | + } else if ([secondViewAttribute isKindOfClass:MASViewAttribute.class]) { | ||
| 128 | + _secondViewAttribute = secondViewAttribute; | ||
| 129 | + } else { | ||
| 130 | + NSAssert(NO, @"attempting to add unsupported attribute: %@", secondViewAttribute); | ||
| 131 | + } | ||
| 132 | +} | ||
| 133 | + | ||
| 134 | +#pragma mark - NSLayoutConstraint multiplier proxies | ||
| 135 | + | ||
| 136 | +- (MASConstraint * (^)(CGFloat))multipliedBy { | ||
| 137 | + return ^id(CGFloat multiplier) { | ||
| 138 | + NSAssert(!self.hasBeenInstalled, | ||
| 139 | + @"Cannot modify constraint multiplier after it has been installed"); | ||
| 140 | + | ||
| 141 | + self.layoutMultiplier = multiplier; | ||
| 142 | + return self; | ||
| 143 | + }; | ||
| 144 | +} | ||
| 145 | + | ||
| 146 | + | ||
| 147 | +- (MASConstraint * (^)(CGFloat))dividedBy { | ||
| 148 | + return ^id(CGFloat divider) { | ||
| 149 | + NSAssert(!self.hasBeenInstalled, | ||
| 150 | + @"Cannot modify constraint multiplier after it has been installed"); | ||
| 151 | + | ||
| 152 | + self.layoutMultiplier = 1.0/divider; | ||
| 153 | + return self; | ||
| 154 | + }; | ||
| 155 | +} | ||
| 156 | + | ||
| 157 | +#pragma mark - MASLayoutPriority proxy | ||
| 158 | + | ||
| 159 | +- (MASConstraint * (^)(MASLayoutPriority))priority { | ||
| 160 | + return ^id(MASLayoutPriority priority) { | ||
| 161 | + NSAssert(!self.hasBeenInstalled, | ||
| 162 | + @"Cannot modify constraint priority after it has been installed"); | ||
| 163 | + | ||
| 164 | + self.layoutPriority = priority; | ||
| 165 | + return self; | ||
| 166 | + }; | ||
| 167 | +} | ||
| 168 | + | ||
| 169 | +#pragma mark - NSLayoutRelation proxy | ||
| 170 | + | ||
| 171 | +- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation { | ||
| 172 | + return ^id(id attribute, NSLayoutRelation relation) { | ||
| 173 | + if ([attribute isKindOfClass:NSArray.class]) { | ||
| 174 | + NSAssert(!self.hasLayoutRelation, @"Redefinition of constraint relation"); | ||
| 175 | + NSMutableArray *children = NSMutableArray.new; | ||
| 176 | + for (id attr in attribute) { | ||
| 177 | + MASViewConstraint *viewConstraint = [self copy]; | ||
| 178 | + viewConstraint.layoutRelation = relation; | ||
| 179 | + viewConstraint.secondViewAttribute = attr; | ||
| 180 | + [children addObject:viewConstraint]; | ||
| 181 | + } | ||
| 182 | + MASCompositeConstraint *compositeConstraint = [[MASCompositeConstraint alloc] initWithChildren:children]; | ||
| 183 | + compositeConstraint.delegate = self.delegate; | ||
| 184 | + [self.delegate constraint:self shouldBeReplacedWithConstraint:compositeConstraint]; | ||
| 185 | + return compositeConstraint; | ||
| 186 | + } else { | ||
| 187 | + NSAssert(!self.hasLayoutRelation || self.layoutRelation == relation && [attribute isKindOfClass:NSValue.class], @"Redefinition of constraint relation"); | ||
| 188 | + self.layoutRelation = relation; | ||
| 189 | + self.secondViewAttribute = attribute; | ||
| 190 | + return self; | ||
| 191 | + } | ||
| 192 | + }; | ||
| 193 | +} | ||
| 194 | + | ||
| 195 | +#pragma mark - Semantic properties | ||
| 196 | + | ||
| 197 | +- (MASConstraint *)with { | ||
| 198 | + return self; | ||
| 199 | +} | ||
| 200 | + | ||
| 201 | +- (MASConstraint *)and { | ||
| 202 | + return self; | ||
| 203 | +} | ||
| 204 | + | ||
| 205 | +#pragma mark - attribute chaining | ||
| 206 | + | ||
| 207 | +- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute { | ||
| 208 | + NSAssert(!self.hasLayoutRelation, @"Attributes should be chained before defining the constraint relation"); | ||
| 209 | + | ||
| 210 | + return [self.delegate constraint:self addConstraintWithLayoutAttribute:layoutAttribute]; | ||
| 211 | +} | ||
| 212 | + | ||
| 213 | +#pragma mark - Animator proxy | ||
| 214 | + | ||
| 215 | +#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV) | ||
| 216 | + | ||
| 217 | +- (MASConstraint *)animator { | ||
| 218 | + self.useAnimator = YES; | ||
| 219 | + return self; | ||
| 220 | +} | ||
| 221 | + | ||
| 222 | +#endif | ||
| 223 | + | ||
| 224 | +#pragma mark - debug helpers | ||
| 225 | + | ||
| 226 | +- (MASConstraint * (^)(id))key { | ||
| 227 | + return ^id(id key) { | ||
| 228 | + self.mas_key = key; | ||
| 229 | + return self; | ||
| 230 | + }; | ||
| 231 | +} | ||
| 232 | + | ||
| 233 | +#pragma mark - NSLayoutConstraint constant setters | ||
| 234 | + | ||
| 235 | +- (void)setInsets:(MASEdgeInsets)insets { | ||
| 236 | + NSLayoutAttribute layoutAttribute = self.firstViewAttribute.layoutAttribute; | ||
| 237 | + switch (layoutAttribute) { | ||
| 238 | + case NSLayoutAttributeLeft: | ||
| 239 | + case NSLayoutAttributeLeading: | ||
| 240 | + self.layoutConstant = insets.left; | ||
| 241 | + break; | ||
| 242 | + case NSLayoutAttributeTop: | ||
| 243 | + self.layoutConstant = insets.top; | ||
| 244 | + break; | ||
| 245 | + case NSLayoutAttributeBottom: | ||
| 246 | + self.layoutConstant = -insets.bottom; | ||
| 247 | + break; | ||
| 248 | + case NSLayoutAttributeRight: | ||
| 249 | + case NSLayoutAttributeTrailing: | ||
| 250 | + self.layoutConstant = -insets.right; | ||
| 251 | + break; | ||
| 252 | + default: | ||
| 253 | + break; | ||
| 254 | + } | ||
| 255 | +} | ||
| 256 | + | ||
| 257 | +- (void)setOffset:(CGFloat)offset { | ||
| 258 | + self.layoutConstant = offset; | ||
| 259 | +} | ||
| 260 | + | ||
| 261 | +- (void)setSizeOffset:(CGSize)sizeOffset { | ||
| 262 | + NSLayoutAttribute layoutAttribute = self.firstViewAttribute.layoutAttribute; | ||
| 263 | + switch (layoutAttribute) { | ||
| 264 | + case NSLayoutAttributeWidth: | ||
| 265 | + self.layoutConstant = sizeOffset.width; | ||
| 266 | + break; | ||
| 267 | + case NSLayoutAttributeHeight: | ||
| 268 | + self.layoutConstant = sizeOffset.height; | ||
| 269 | + break; | ||
| 270 | + default: | ||
| 271 | + break; | ||
| 272 | + } | ||
| 273 | +} | ||
| 274 | + | ||
| 275 | +- (void)setCenterOffset:(CGPoint)centerOffset { | ||
| 276 | + NSLayoutAttribute layoutAttribute = self.firstViewAttribute.layoutAttribute; | ||
| 277 | + switch (layoutAttribute) { | ||
| 278 | + case NSLayoutAttributeCenterX: | ||
| 279 | + self.layoutConstant = centerOffset.x; | ||
| 280 | + break; | ||
| 281 | + case NSLayoutAttributeCenterY: | ||
| 282 | + self.layoutConstant = centerOffset.y; | ||
| 283 | + break; | ||
| 284 | + default: | ||
| 285 | + break; | ||
| 286 | + } | ||
| 287 | +} | ||
| 288 | + | ||
| 289 | +#pragma mark - MASConstraint | ||
| 290 | + | ||
| 291 | +- (void)activate { | ||
| 292 | + [self install]; | ||
| 293 | +} | ||
| 294 | + | ||
| 295 | +- (void)deactivate { | ||
| 296 | + [self uninstall]; | ||
| 297 | +} | ||
| 298 | + | ||
| 299 | +- (void)install { | ||
| 300 | + if (self.hasBeenInstalled) { | ||
| 301 | + return; | ||
| 302 | + } | ||
| 303 | + | ||
| 304 | + if ([self supportsActiveProperty] && self.layoutConstraint) { | ||
| 305 | + self.layoutConstraint.active = YES; | ||
| 306 | + [self.firstViewAttribute.view.mas_installedConstraints addObject:self]; | ||
| 307 | + return; | ||
| 308 | + } | ||
| 309 | + | ||
| 310 | + MAS_VIEW *firstLayoutItem = self.firstViewAttribute.item; | ||
| 311 | + NSLayoutAttribute firstLayoutAttribute = self.firstViewAttribute.layoutAttribute; | ||
| 312 | + MAS_VIEW *secondLayoutItem = self.secondViewAttribute.item; | ||
| 313 | + NSLayoutAttribute secondLayoutAttribute = self.secondViewAttribute.layoutAttribute; | ||
| 314 | + | ||
| 315 | + // alignment attributes must have a secondViewAttribute | ||
| 316 | + // therefore we assume that is refering to superview | ||
| 317 | + // eg make.left.equalTo(@10) | ||
| 318 | + if (!self.firstViewAttribute.isSizeAttribute && !self.secondViewAttribute) { | ||
| 319 | + secondLayoutItem = self.firstViewAttribute.view.superview; | ||
| 320 | + secondLayoutAttribute = firstLayoutAttribute; | ||
| 321 | + } | ||
| 322 | + | ||
| 323 | + MASLayoutConstraint *layoutConstraint | ||
| 324 | + = [MASLayoutConstraint constraintWithItem:firstLayoutItem | ||
| 325 | + attribute:firstLayoutAttribute | ||
| 326 | + relatedBy:self.layoutRelation | ||
| 327 | + toItem:secondLayoutItem | ||
| 328 | + attribute:secondLayoutAttribute | ||
| 329 | + multiplier:self.layoutMultiplier | ||
| 330 | + constant:self.layoutConstant]; | ||
| 331 | + | ||
| 332 | + layoutConstraint.priority = self.layoutPriority; | ||
| 333 | + layoutConstraint.mas_key = self.mas_key; | ||
| 334 | + | ||
| 335 | + if (self.secondViewAttribute.view) { | ||
| 336 | + MAS_VIEW *closestCommonSuperview = [self.firstViewAttribute.view mas_closestCommonSuperview:self.secondViewAttribute.view]; | ||
| 337 | + NSAssert(closestCommonSuperview, | ||
| 338 | + @"couldn't find a common superview for %@ and %@", | ||
| 339 | + self.firstViewAttribute.view, self.secondViewAttribute.view); | ||
| 340 | + self.installedView = closestCommonSuperview; | ||
| 341 | + } else if (self.firstViewAttribute.isSizeAttribute) { | ||
| 342 | + self.installedView = self.firstViewAttribute.view; | ||
| 343 | + } else { | ||
| 344 | + self.installedView = self.firstViewAttribute.view.superview; | ||
| 345 | + } | ||
| 346 | + | ||
| 347 | + | ||
| 348 | + MASLayoutConstraint *existingConstraint = nil; | ||
| 349 | + if (self.updateExisting) { | ||
| 350 | + existingConstraint = [self layoutConstraintSimilarTo:layoutConstraint]; | ||
| 351 | + } | ||
| 352 | + if (existingConstraint) { | ||
| 353 | + // just update the constant | ||
| 354 | + existingConstraint.constant = layoutConstraint.constant; | ||
| 355 | + self.layoutConstraint = existingConstraint; | ||
| 356 | + } else { | ||
| 357 | + [self.installedView addConstraint:layoutConstraint]; | ||
| 358 | + self.layoutConstraint = layoutConstraint; | ||
| 359 | + [firstLayoutItem.mas_installedConstraints addObject:self]; | ||
| 360 | + } | ||
| 361 | +} | ||
| 362 | + | ||
| 363 | +- (MASLayoutConstraint *)layoutConstraintSimilarTo:(MASLayoutConstraint *)layoutConstraint { | ||
| 364 | + // check if any constraints are the same apart from the only mutable property constant | ||
| 365 | + | ||
| 366 | + // go through constraints in reverse as we do not want to match auto-resizing or interface builder constraints | ||
| 367 | + // and they are likely to be added first. | ||
| 368 | + for (NSLayoutConstraint *existingConstraint in self.installedView.constraints.reverseObjectEnumerator) { | ||
| 369 | + if (![existingConstraint isKindOfClass:MASLayoutConstraint.class]) continue; | ||
| 370 | + if (existingConstraint.firstItem != layoutConstraint.firstItem) continue; | ||
| 371 | + if (existingConstraint.secondItem != layoutConstraint.secondItem) continue; | ||
| 372 | + if (existingConstraint.firstAttribute != layoutConstraint.firstAttribute) continue; | ||
| 373 | + if (existingConstraint.secondAttribute != layoutConstraint.secondAttribute) continue; | ||
| 374 | + if (existingConstraint.relation != layoutConstraint.relation) continue; | ||
| 375 | + if (existingConstraint.multiplier != layoutConstraint.multiplier) continue; | ||
| 376 | + if (existingConstraint.priority != layoutConstraint.priority) continue; | ||
| 377 | + | ||
| 378 | + return (id)existingConstraint; | ||
| 379 | + } | ||
| 380 | + return nil; | ||
| 381 | +} | ||
| 382 | + | ||
| 383 | +- (void)uninstall { | ||
| 384 | + if ([self supportsActiveProperty]) { | ||
| 385 | + self.layoutConstraint.active = NO; | ||
| 386 | + [self.firstViewAttribute.view.mas_installedConstraints removeObject:self]; | ||
| 387 | + return; | ||
| 388 | + } | ||
| 389 | + | ||
| 390 | + [self.installedView removeConstraint:self.layoutConstraint]; | ||
| 391 | + self.layoutConstraint = nil; | ||
| 392 | + self.installedView = nil; | ||
| 393 | + | ||
| 394 | + [self.firstViewAttribute.view.mas_installedConstraints removeObject:self]; | ||
| 395 | +} | ||
| 396 | + | ||
| 397 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/Masonry.h
0 → 100755
| 1 | +// | ||
| 2 | +// Masonry.h | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 20/07/13. | ||
| 6 | +// Copyright (c) 2013 cloudling. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import <Foundation/Foundation.h> | ||
| 10 | + | ||
| 11 | +//! Project version number for Masonry. | ||
| 12 | +FOUNDATION_EXPORT double MasonryVersionNumber; | ||
| 13 | + | ||
| 14 | +//! Project version string for Masonry. | ||
| 15 | +FOUNDATION_EXPORT const unsigned char MasonryVersionString[]; | ||
| 16 | + | ||
| 17 | +#import "MASUtilities.h" | ||
| 18 | +#import "View+MASAdditions.h" | ||
| 19 | +#import "View+MASShorthandAdditions.h" | ||
| 20 | +#import "ViewController+MASAdditions.h" | ||
| 21 | +#import "NSArray+MASAdditions.h" | ||
| 22 | +#import "NSArray+MASShorthandAdditions.h" | ||
| 23 | +#import "MASConstraint.h" | ||
| 24 | +#import "MASCompositeConstraint.h" | ||
| 25 | +#import "MASViewAttribute.h" | ||
| 26 | +#import "MASViewConstraint.h" | ||
| 27 | +#import "MASConstraintMaker.h" | ||
| 28 | +#import "MASLayoutConstraint.h" | ||
| 29 | +#import "NSLayoutConstraint+MASDebugAdditions.h" |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/NSArray+MASAdditions.h
0 → 100755
| 1 | +// | ||
| 2 | +// NSArray+MASAdditions.h | ||
| 3 | +// | ||
| 4 | +// | ||
| 5 | +// Created by Daniel Hammond on 11/26/13. | ||
| 6 | +// | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "MASUtilities.h" | ||
| 10 | +#import "MASConstraintMaker.h" | ||
| 11 | +#import "MASViewAttribute.h" | ||
| 12 | + | ||
| 13 | +typedef NS_ENUM(NSUInteger, MASAxisType) { | ||
| 14 | + MASAxisTypeHorizontal, | ||
| 15 | + MASAxisTypeVertical | ||
| 16 | +}; | ||
| 17 | + | ||
| 18 | +@interface NSArray (MASAdditions) | ||
| 19 | + | ||
| 20 | +/** | ||
| 21 | + * Creates a MASConstraintMaker with each view in the callee. | ||
| 22 | + * Any constraints defined are added to the view or the appropriate superview once the block has finished executing on each view | ||
| 23 | + * | ||
| 24 | + * @param block scope within which you can build up the constraints which you wish to apply to each view. | ||
| 25 | + * | ||
| 26 | + * @return Array of created MASConstraints | ||
| 27 | + */ | ||
| 28 | +- (NSArray *)mas_makeConstraints:(void (^)(MASConstraintMaker *make))block; | ||
| 29 | + | ||
| 30 | +/** | ||
| 31 | + * Creates a MASConstraintMaker with each view in the callee. | ||
| 32 | + * Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view. | ||
| 33 | + * If an existing constraint exists then it will be updated instead. | ||
| 34 | + * | ||
| 35 | + * @param block scope within which you can build up the constraints which you wish to apply to each view. | ||
| 36 | + * | ||
| 37 | + * @return Array of created/updated MASConstraints | ||
| 38 | + */ | ||
| 39 | +- (NSArray *)mas_updateConstraints:(void (^)(MASConstraintMaker *make))block; | ||
| 40 | + | ||
| 41 | +/** | ||
| 42 | + * Creates a MASConstraintMaker with each view in the callee. | ||
| 43 | + * Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view. | ||
| 44 | + * All constraints previously installed for the views will be removed. | ||
| 45 | + * | ||
| 46 | + * @param block scope within which you can build up the constraints which you wish to apply to each view. | ||
| 47 | + * | ||
| 48 | + * @return Array of created/updated MASConstraints | ||
| 49 | + */ | ||
| 50 | +- (NSArray *)mas_remakeConstraints:(void (^)(MASConstraintMaker *make))block; | ||
| 51 | + | ||
| 52 | +/** | ||
| 53 | + * distribute with fixed spacing | ||
| 54 | + * | ||
| 55 | + * @param axisType which axis to distribute items along | ||
| 56 | + * @param fixedSpacing the spacing between each item | ||
| 57 | + * @param leadSpacing the spacing before the first item and the container | ||
| 58 | + * @param tailSpacing the spacing after the last item and the container | ||
| 59 | + */ | ||
| 60 | +- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing; | ||
| 61 | + | ||
| 62 | +/** | ||
| 63 | + * distribute with fixed item size | ||
| 64 | + * | ||
| 65 | + * @param axisType which axis to distribute items along | ||
| 66 | + * @param fixedItemLength the fixed length of each item | ||
| 67 | + * @param leadSpacing the spacing before the first item and the container | ||
| 68 | + * @param tailSpacing the spacing after the last item and the container | ||
| 69 | + */ | ||
| 70 | +- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing; | ||
| 71 | + | ||
| 72 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/NSArray+MASAdditions.m
0 → 100755
| 1 | +// | ||
| 2 | +// NSArray+MASAdditions.m | ||
| 3 | +// | ||
| 4 | +// | ||
| 5 | +// Created by Daniel Hammond on 11/26/13. | ||
| 6 | +// | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "NSArray+MASAdditions.h" | ||
| 10 | +#import "View+MASAdditions.h" | ||
| 11 | + | ||
| 12 | +@implementation NSArray (MASAdditions) | ||
| 13 | + | ||
| 14 | +- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block { | ||
| 15 | + NSMutableArray *constraints = [NSMutableArray array]; | ||
| 16 | + for (MAS_VIEW *view in self) { | ||
| 17 | + NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views"); | ||
| 18 | + [constraints addObjectsFromArray:[view mas_makeConstraints:block]]; | ||
| 19 | + } | ||
| 20 | + return constraints; | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block { | ||
| 24 | + NSMutableArray *constraints = [NSMutableArray array]; | ||
| 25 | + for (MAS_VIEW *view in self) { | ||
| 26 | + NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views"); | ||
| 27 | + [constraints addObjectsFromArray:[view mas_updateConstraints:block]]; | ||
| 28 | + } | ||
| 29 | + return constraints; | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block { | ||
| 33 | + NSMutableArray *constraints = [NSMutableArray array]; | ||
| 34 | + for (MAS_VIEW *view in self) { | ||
| 35 | + NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views"); | ||
| 36 | + [constraints addObjectsFromArray:[view mas_remakeConstraints:block]]; | ||
| 37 | + } | ||
| 38 | + return constraints; | ||
| 39 | +} | ||
| 40 | + | ||
| 41 | +- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing { | ||
| 42 | + if (self.count < 2) { | ||
| 43 | + NSAssert(self.count>1,@"views to distribute need to bigger than one"); | ||
| 44 | + return; | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + MAS_VIEW *tempSuperView = [self mas_commonSuperviewOfViews]; | ||
| 48 | + if (axisType == MASAxisTypeHorizontal) { | ||
| 49 | + MAS_VIEW *prev; | ||
| 50 | + for (int i = 0; i < self.count; i++) { | ||
| 51 | + MAS_VIEW *v = self[i]; | ||
| 52 | + [v mas_makeConstraints:^(MASConstraintMaker *make) { | ||
| 53 | + if (prev) { | ||
| 54 | + make.width.equalTo(prev); | ||
| 55 | + make.left.equalTo(prev.mas_right).offset(fixedSpacing); | ||
| 56 | + if (i == self.count - 1) {//last one | ||
| 57 | + make.right.equalTo(tempSuperView).offset(-tailSpacing); | ||
| 58 | + } | ||
| 59 | + } | ||
| 60 | + else {//first one | ||
| 61 | + make.left.equalTo(tempSuperView).offset(leadSpacing); | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + }]; | ||
| 65 | + prev = v; | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | + else { | ||
| 69 | + MAS_VIEW *prev; | ||
| 70 | + for (int i = 0; i < self.count; i++) { | ||
| 71 | + MAS_VIEW *v = self[i]; | ||
| 72 | + [v mas_makeConstraints:^(MASConstraintMaker *make) { | ||
| 73 | + if (prev) { | ||
| 74 | + make.height.equalTo(prev); | ||
| 75 | + make.top.equalTo(prev.mas_bottom).offset(fixedSpacing); | ||
| 76 | + if (i == self.count - 1) {//last one | ||
| 77 | + make.bottom.equalTo(tempSuperView).offset(-tailSpacing); | ||
| 78 | + } | ||
| 79 | + } | ||
| 80 | + else {//first one | ||
| 81 | + make.top.equalTo(tempSuperView).offset(leadSpacing); | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + }]; | ||
| 85 | + prev = v; | ||
| 86 | + } | ||
| 87 | + } | ||
| 88 | +} | ||
| 89 | + | ||
| 90 | +- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing { | ||
| 91 | + if (self.count < 2) { | ||
| 92 | + NSAssert(self.count>1,@"views to distribute need to bigger than one"); | ||
| 93 | + return; | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + MAS_VIEW *tempSuperView = [self mas_commonSuperviewOfViews]; | ||
| 97 | + if (axisType == MASAxisTypeHorizontal) { | ||
| 98 | + MAS_VIEW *prev; | ||
| 99 | + for (int i = 0; i < self.count; i++) { | ||
| 100 | + MAS_VIEW *v = self[i]; | ||
| 101 | + [v mas_makeConstraints:^(MASConstraintMaker *make) { | ||
| 102 | + make.width.equalTo(@(fixedItemLength)); | ||
| 103 | + if (prev) { | ||
| 104 | + if (i == self.count - 1) {//last one | ||
| 105 | + make.right.equalTo(tempSuperView).offset(-tailSpacing); | ||
| 106 | + } | ||
| 107 | + else { | ||
| 108 | + CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1)); | ||
| 109 | + make.right.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset); | ||
| 110 | + } | ||
| 111 | + } | ||
| 112 | + else {//first one | ||
| 113 | + make.left.equalTo(tempSuperView).offset(leadSpacing); | ||
| 114 | + } | ||
| 115 | + }]; | ||
| 116 | + prev = v; | ||
| 117 | + } | ||
| 118 | + } | ||
| 119 | + else { | ||
| 120 | + MAS_VIEW *prev; | ||
| 121 | + for (int i = 0; i < self.count; i++) { | ||
| 122 | + MAS_VIEW *v = self[i]; | ||
| 123 | + [v mas_makeConstraints:^(MASConstraintMaker *make) { | ||
| 124 | + make.height.equalTo(@(fixedItemLength)); | ||
| 125 | + if (prev) { | ||
| 126 | + if (i == self.count - 1) {//last one | ||
| 127 | + make.bottom.equalTo(tempSuperView).offset(-tailSpacing); | ||
| 128 | + } | ||
| 129 | + else { | ||
| 130 | + CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1)); | ||
| 131 | + make.bottom.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset); | ||
| 132 | + } | ||
| 133 | + } | ||
| 134 | + else {//first one | ||
| 135 | + make.top.equalTo(tempSuperView).offset(leadSpacing); | ||
| 136 | + } | ||
| 137 | + }]; | ||
| 138 | + prev = v; | ||
| 139 | + } | ||
| 140 | + } | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +- (MAS_VIEW *)mas_commonSuperviewOfViews | ||
| 144 | +{ | ||
| 145 | + MAS_VIEW *commonSuperview = nil; | ||
| 146 | + MAS_VIEW *previousView = nil; | ||
| 147 | + for (id object in self) { | ||
| 148 | + if ([object isKindOfClass:[MAS_VIEW class]]) { | ||
| 149 | + MAS_VIEW *view = (MAS_VIEW *)object; | ||
| 150 | + if (previousView) { | ||
| 151 | + commonSuperview = [view mas_closestCommonSuperview:commonSuperview]; | ||
| 152 | + } else { | ||
| 153 | + commonSuperview = view; | ||
| 154 | + } | ||
| 155 | + previousView = view; | ||
| 156 | + } | ||
| 157 | + } | ||
| 158 | + NSAssert(commonSuperview, @"Can't constrain views that do not share a common superview. Make sure that all the views in this array have been added into the same view hierarchy."); | ||
| 159 | + return commonSuperview; | ||
| 160 | +} | ||
| 161 | + | ||
| 162 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/NSArray+MASShorthandAdditions.h
0 → 100755
| 1 | +// | ||
| 2 | +// NSArray+MASShorthandAdditions.h | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 22/07/13. | ||
| 6 | +// Copyright (c) 2013 Jonas Budelmann. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "NSArray+MASAdditions.h" | ||
| 10 | + | ||
| 11 | +#ifdef MAS_SHORTHAND | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * Shorthand array additions without the 'mas_' prefixes, | ||
| 15 | + * only enabled if MAS_SHORTHAND is defined | ||
| 16 | + */ | ||
| 17 | +@interface NSArray (MASShorthandAdditions) | ||
| 18 | + | ||
| 19 | +- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block; | ||
| 20 | +- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block; | ||
| 21 | +- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block; | ||
| 22 | + | ||
| 23 | +@end | ||
| 24 | + | ||
| 25 | +@implementation NSArray (MASShorthandAdditions) | ||
| 26 | + | ||
| 27 | +- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block { | ||
| 28 | + return [self mas_makeConstraints:block]; | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block { | ||
| 32 | + return [self mas_updateConstraints:block]; | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block { | ||
| 36 | + return [self mas_remakeConstraints:block]; | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +@end | ||
| 40 | + | ||
| 41 | +#endif |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/NSLayoutConstraint+MASDebugAdditions.h
0 → 100755
| 1 | +// | ||
| 2 | +// NSLayoutConstraint+MASDebugAdditions.h | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 3/08/13. | ||
| 6 | +// Copyright (c) 2013 Jonas Budelmann. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "MASUtilities.h" | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * makes debug and log output of NSLayoutConstraints more readable | ||
| 13 | + */ | ||
| 14 | +@interface NSLayoutConstraint (MASDebugAdditions) | ||
| 15 | + | ||
| 16 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/NSLayoutConstraint+MASDebugAdditions.m
0 → 100755
| 1 | +// | ||
| 2 | +// NSLayoutConstraint+MASDebugAdditions.m | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 3/08/13. | ||
| 6 | +// Copyright (c) 2013 Jonas Budelmann. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "NSLayoutConstraint+MASDebugAdditions.h" | ||
| 10 | +#import "MASConstraint.h" | ||
| 11 | +#import "MASLayoutConstraint.h" | ||
| 12 | + | ||
| 13 | +@implementation NSLayoutConstraint (MASDebugAdditions) | ||
| 14 | + | ||
| 15 | +#pragma mark - description maps | ||
| 16 | + | ||
| 17 | ++ (NSDictionary *)layoutRelationDescriptionsByValue { | ||
| 18 | + static dispatch_once_t once; | ||
| 19 | + static NSDictionary *descriptionMap; | ||
| 20 | + dispatch_once(&once, ^{ | ||
| 21 | + descriptionMap = @{ | ||
| 22 | + @(NSLayoutRelationEqual) : @"==", | ||
| 23 | + @(NSLayoutRelationGreaterThanOrEqual) : @">=", | ||
| 24 | + @(NSLayoutRelationLessThanOrEqual) : @"<=", | ||
| 25 | + }; | ||
| 26 | + }); | ||
| 27 | + return descriptionMap; | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | ++ (NSDictionary *)layoutAttributeDescriptionsByValue { | ||
| 31 | + static dispatch_once_t once; | ||
| 32 | + static NSDictionary *descriptionMap; | ||
| 33 | + dispatch_once(&once, ^{ | ||
| 34 | + descriptionMap = @{ | ||
| 35 | + @(NSLayoutAttributeTop) : @"top", | ||
| 36 | + @(NSLayoutAttributeLeft) : @"left", | ||
| 37 | + @(NSLayoutAttributeBottom) : @"bottom", | ||
| 38 | + @(NSLayoutAttributeRight) : @"right", | ||
| 39 | + @(NSLayoutAttributeLeading) : @"leading", | ||
| 40 | + @(NSLayoutAttributeTrailing) : @"trailing", | ||
| 41 | + @(NSLayoutAttributeWidth) : @"width", | ||
| 42 | + @(NSLayoutAttributeHeight) : @"height", | ||
| 43 | + @(NSLayoutAttributeCenterX) : @"centerX", | ||
| 44 | + @(NSLayoutAttributeCenterY) : @"centerY", | ||
| 45 | + @(NSLayoutAttributeBaseline) : @"baseline", | ||
| 46 | + | ||
| 47 | +#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | ||
| 48 | + @(NSLayoutAttributeFirstBaseline) : @"firstBaseline", | ||
| 49 | + @(NSLayoutAttributeLastBaseline) : @"lastBaseline", | ||
| 50 | +#endif | ||
| 51 | + | ||
| 52 | +#if TARGET_OS_IPHONE || TARGET_OS_TV | ||
| 53 | + @(NSLayoutAttributeLeftMargin) : @"leftMargin", | ||
| 54 | + @(NSLayoutAttributeRightMargin) : @"rightMargin", | ||
| 55 | + @(NSLayoutAttributeTopMargin) : @"topMargin", | ||
| 56 | + @(NSLayoutAttributeBottomMargin) : @"bottomMargin", | ||
| 57 | + @(NSLayoutAttributeLeadingMargin) : @"leadingMargin", | ||
| 58 | + @(NSLayoutAttributeTrailingMargin) : @"trailingMargin", | ||
| 59 | + @(NSLayoutAttributeCenterXWithinMargins) : @"centerXWithinMargins", | ||
| 60 | + @(NSLayoutAttributeCenterYWithinMargins) : @"centerYWithinMargins", | ||
| 61 | +#endif | ||
| 62 | + | ||
| 63 | + }; | ||
| 64 | + | ||
| 65 | + }); | ||
| 66 | + return descriptionMap; | ||
| 67 | +} | ||
| 68 | + | ||
| 69 | + | ||
| 70 | ++ (NSDictionary *)layoutPriorityDescriptionsByValue { | ||
| 71 | + static dispatch_once_t once; | ||
| 72 | + static NSDictionary *descriptionMap; | ||
| 73 | + dispatch_once(&once, ^{ | ||
| 74 | +#if TARGET_OS_IPHONE || TARGET_OS_TV | ||
| 75 | + descriptionMap = @{ | ||
| 76 | + @(MASLayoutPriorityDefaultHigh) : @"high", | ||
| 77 | + @(MASLayoutPriorityDefaultLow) : @"low", | ||
| 78 | + @(MASLayoutPriorityDefaultMedium) : @"medium", | ||
| 79 | + @(MASLayoutPriorityRequired) : @"required", | ||
| 80 | + @(MASLayoutPriorityFittingSizeLevel) : @"fitting size", | ||
| 81 | + }; | ||
| 82 | +#elif TARGET_OS_MAC | ||
| 83 | + descriptionMap = @{ | ||
| 84 | + @(MASLayoutPriorityDefaultHigh) : @"high", | ||
| 85 | + @(MASLayoutPriorityDragThatCanResizeWindow) : @"drag can resize window", | ||
| 86 | + @(MASLayoutPriorityDefaultMedium) : @"medium", | ||
| 87 | + @(MASLayoutPriorityWindowSizeStayPut) : @"window size stay put", | ||
| 88 | + @(MASLayoutPriorityDragThatCannotResizeWindow) : @"drag cannot resize window", | ||
| 89 | + @(MASLayoutPriorityDefaultLow) : @"low", | ||
| 90 | + @(MASLayoutPriorityFittingSizeCompression) : @"fitting size", | ||
| 91 | + @(MASLayoutPriorityRequired) : @"required", | ||
| 92 | + }; | ||
| 93 | +#endif | ||
| 94 | + }); | ||
| 95 | + return descriptionMap; | ||
| 96 | +} | ||
| 97 | + | ||
| 98 | +#pragma mark - description override | ||
| 99 | + | ||
| 100 | ++ (NSString *)descriptionForObject:(id)obj { | ||
| 101 | + if ([obj respondsToSelector:@selector(mas_key)] && [obj mas_key]) { | ||
| 102 | + return [NSString stringWithFormat:@"%@:%@", [obj class], [obj mas_key]]; | ||
| 103 | + } | ||
| 104 | + return [NSString stringWithFormat:@"%@:%p", [obj class], obj]; | ||
| 105 | +} | ||
| 106 | + | ||
| 107 | +- (NSString *)description { | ||
| 108 | + NSMutableString *description = [[NSMutableString alloc] initWithString:@"<"]; | ||
| 109 | + | ||
| 110 | + [description appendString:[self.class descriptionForObject:self]]; | ||
| 111 | + | ||
| 112 | + [description appendFormat:@" %@", [self.class descriptionForObject:self.firstItem]]; | ||
| 113 | + if (self.firstAttribute != NSLayoutAttributeNotAnAttribute) { | ||
| 114 | + [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.firstAttribute)]]; | ||
| 115 | + } | ||
| 116 | + | ||
| 117 | + [description appendFormat:@" %@", self.class.layoutRelationDescriptionsByValue[@(self.relation)]]; | ||
| 118 | + | ||
| 119 | + if (self.secondItem) { | ||
| 120 | + [description appendFormat:@" %@", [self.class descriptionForObject:self.secondItem]]; | ||
| 121 | + } | ||
| 122 | + if (self.secondAttribute != NSLayoutAttributeNotAnAttribute) { | ||
| 123 | + [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.secondAttribute)]]; | ||
| 124 | + } | ||
| 125 | + | ||
| 126 | + if (self.multiplier != 1) { | ||
| 127 | + [description appendFormat:@" * %g", self.multiplier]; | ||
| 128 | + } | ||
| 129 | + | ||
| 130 | + if (self.secondAttribute == NSLayoutAttributeNotAnAttribute) { | ||
| 131 | + [description appendFormat:@" %g", self.constant]; | ||
| 132 | + } else { | ||
| 133 | + if (self.constant) { | ||
| 134 | + [description appendFormat:@" %@ %g", (self.constant < 0 ? @"-" : @"+"), ABS(self.constant)]; | ||
| 135 | + } | ||
| 136 | + } | ||
| 137 | + | ||
| 138 | + if (self.priority != MASLayoutPriorityRequired) { | ||
| 139 | + [description appendFormat:@" ^%@", self.class.layoutPriorityDescriptionsByValue[@(self.priority)] ?: [NSNumber numberWithDouble:self.priority]]; | ||
| 140 | + } | ||
| 141 | + | ||
| 142 | + [description appendString:@">"]; | ||
| 143 | + return description; | ||
| 144 | +} | ||
| 145 | + | ||
| 146 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/View+MASAdditions.h
0 → 100755
| 1 | +// | ||
| 2 | +// UIView+MASAdditions.h | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 20/07/13. | ||
| 6 | +// Copyright (c) 2013 cloudling. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "MASUtilities.h" | ||
| 10 | +#import "MASConstraintMaker.h" | ||
| 11 | +#import "MASViewAttribute.h" | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * Provides constraint maker block | ||
| 15 | + * and convience methods for creating MASViewAttribute which are view + NSLayoutAttribute pairs | ||
| 16 | + */ | ||
| 17 | +@interface MAS_VIEW (MASAdditions) | ||
| 18 | + | ||
| 19 | +/** | ||
| 20 | + * following properties return a new MASViewAttribute with current view and appropriate NSLayoutAttribute | ||
| 21 | + */ | ||
| 22 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_left; | ||
| 23 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_top; | ||
| 24 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_right; | ||
| 25 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_bottom; | ||
| 26 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_leading; | ||
| 27 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_trailing; | ||
| 28 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_width; | ||
| 29 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_height; | ||
| 30 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerX; | ||
| 31 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerY; | ||
| 32 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_baseline; | ||
| 33 | +@property (nonatomic, strong, readonly) MASViewAttribute *(^mas_attribute)(NSLayoutAttribute attr); | ||
| 34 | + | ||
| 35 | +#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | ||
| 36 | + | ||
| 37 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_firstBaseline; | ||
| 38 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_lastBaseline; | ||
| 39 | + | ||
| 40 | +#endif | ||
| 41 | + | ||
| 42 | +#if TARGET_OS_IPHONE || TARGET_OS_TV | ||
| 43 | + | ||
| 44 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_leftMargin; | ||
| 45 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_rightMargin; | ||
| 46 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_topMargin; | ||
| 47 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomMargin; | ||
| 48 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_leadingMargin; | ||
| 49 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_trailingMargin; | ||
| 50 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerXWithinMargins; | ||
| 51 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerYWithinMargins; | ||
| 52 | + | ||
| 53 | +#endif | ||
| 54 | + | ||
| 55 | +/** | ||
| 56 | + * a key to associate with this view | ||
| 57 | + */ | ||
| 58 | +@property (nonatomic, strong) id mas_key; | ||
| 59 | + | ||
| 60 | +/** | ||
| 61 | + * Finds the closest common superview between this view and another view | ||
| 62 | + * | ||
| 63 | + * @param view other view | ||
| 64 | + * | ||
| 65 | + * @return returns nil if common superview could not be found | ||
| 66 | + */ | ||
| 67 | +- (instancetype)mas_closestCommonSuperview:(MAS_VIEW *)view; | ||
| 68 | + | ||
| 69 | +/** | ||
| 70 | + * Creates a MASConstraintMaker with the callee view. | ||
| 71 | + * Any constraints defined are added to the view or the appropriate superview once the block has finished executing | ||
| 72 | + * | ||
| 73 | + * @param block scope within which you can build up the constraints which you wish to apply to the view. | ||
| 74 | + * | ||
| 75 | + * @return Array of created MASConstraints | ||
| 76 | + */ | ||
| 77 | +- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block; | ||
| 78 | + | ||
| 79 | +/** | ||
| 80 | + * Creates a MASConstraintMaker with the callee view. | ||
| 81 | + * Any constraints defined are added to the view or the appropriate superview once the block has finished executing. | ||
| 82 | + * If an existing constraint exists then it will be updated instead. | ||
| 83 | + * | ||
| 84 | + * @param block scope within which you can build up the constraints which you wish to apply to the view. | ||
| 85 | + * | ||
| 86 | + * @return Array of created/updated MASConstraints | ||
| 87 | + */ | ||
| 88 | +- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block; | ||
| 89 | + | ||
| 90 | +/** | ||
| 91 | + * Creates a MASConstraintMaker with the callee view. | ||
| 92 | + * Any constraints defined are added to the view or the appropriate superview once the block has finished executing. | ||
| 93 | + * All constraints previously installed for the view will be removed. | ||
| 94 | + * | ||
| 95 | + * @param block scope within which you can build up the constraints which you wish to apply to the view. | ||
| 96 | + * | ||
| 97 | + * @return Array of created/updated MASConstraints | ||
| 98 | + */ | ||
| 99 | +- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block; | ||
| 100 | + | ||
| 101 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/View+MASAdditions.m
0 → 100755
| 1 | +// | ||
| 2 | +// UIView+MASAdditions.m | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 20/07/13. | ||
| 6 | +// Copyright (c) 2013 cloudling. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "View+MASAdditions.h" | ||
| 10 | +#import <objc/runtime.h> | ||
| 11 | + | ||
| 12 | +@implementation MAS_VIEW (MASAdditions) | ||
| 13 | + | ||
| 14 | +- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block { | ||
| 15 | + self.translatesAutoresizingMaskIntoConstraints = NO; | ||
| 16 | + MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self]; | ||
| 17 | + block(constraintMaker); | ||
| 18 | + return [constraintMaker install]; | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *))block { | ||
| 22 | + self.translatesAutoresizingMaskIntoConstraints = NO; | ||
| 23 | + MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self]; | ||
| 24 | + constraintMaker.updateExisting = YES; | ||
| 25 | + block(constraintMaker); | ||
| 26 | + return [constraintMaker install]; | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block { | ||
| 30 | + self.translatesAutoresizingMaskIntoConstraints = NO; | ||
| 31 | + MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self]; | ||
| 32 | + constraintMaker.removeExisting = YES; | ||
| 33 | + block(constraintMaker); | ||
| 34 | + return [constraintMaker install]; | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +#pragma mark - NSLayoutAttribute properties | ||
| 38 | + | ||
| 39 | +- (MASViewAttribute *)mas_left { | ||
| 40 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeft]; | ||
| 41 | +} | ||
| 42 | + | ||
| 43 | +- (MASViewAttribute *)mas_top { | ||
| 44 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTop]; | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +- (MASViewAttribute *)mas_right { | ||
| 48 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeRight]; | ||
| 49 | +} | ||
| 50 | + | ||
| 51 | +- (MASViewAttribute *)mas_bottom { | ||
| 52 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeBottom]; | ||
| 53 | +} | ||
| 54 | + | ||
| 55 | +- (MASViewAttribute *)mas_leading { | ||
| 56 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeading]; | ||
| 57 | +} | ||
| 58 | + | ||
| 59 | +- (MASViewAttribute *)mas_trailing { | ||
| 60 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTrailing]; | ||
| 61 | +} | ||
| 62 | + | ||
| 63 | +- (MASViewAttribute *)mas_width { | ||
| 64 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeWidth]; | ||
| 65 | +} | ||
| 66 | + | ||
| 67 | +- (MASViewAttribute *)mas_height { | ||
| 68 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeHeight]; | ||
| 69 | +} | ||
| 70 | + | ||
| 71 | +- (MASViewAttribute *)mas_centerX { | ||
| 72 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterX]; | ||
| 73 | +} | ||
| 74 | + | ||
| 75 | +- (MASViewAttribute *)mas_centerY { | ||
| 76 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterY]; | ||
| 77 | +} | ||
| 78 | + | ||
| 79 | +- (MASViewAttribute *)mas_baseline { | ||
| 80 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeBaseline]; | ||
| 81 | +} | ||
| 82 | + | ||
| 83 | +- (MASViewAttribute *(^)(NSLayoutAttribute))mas_attribute | ||
| 84 | +{ | ||
| 85 | + return ^(NSLayoutAttribute attr) { | ||
| 86 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:attr]; | ||
| 87 | + }; | ||
| 88 | +} | ||
| 89 | + | ||
| 90 | +#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | ||
| 91 | + | ||
| 92 | +- (MASViewAttribute *)mas_firstBaseline { | ||
| 93 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeFirstBaseline]; | ||
| 94 | +} | ||
| 95 | +- (MASViewAttribute *)mas_lastBaseline { | ||
| 96 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLastBaseline]; | ||
| 97 | +} | ||
| 98 | + | ||
| 99 | +#endif | ||
| 100 | + | ||
| 101 | +#if TARGET_OS_IPHONE || TARGET_OS_TV | ||
| 102 | + | ||
| 103 | +- (MASViewAttribute *)mas_leftMargin { | ||
| 104 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeftMargin]; | ||
| 105 | +} | ||
| 106 | + | ||
| 107 | +- (MASViewAttribute *)mas_rightMargin { | ||
| 108 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeRightMargin]; | ||
| 109 | +} | ||
| 110 | + | ||
| 111 | +- (MASViewAttribute *)mas_topMargin { | ||
| 112 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTopMargin]; | ||
| 113 | +} | ||
| 114 | + | ||
| 115 | +- (MASViewAttribute *)mas_bottomMargin { | ||
| 116 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeBottomMargin]; | ||
| 117 | +} | ||
| 118 | + | ||
| 119 | +- (MASViewAttribute *)mas_leadingMargin { | ||
| 120 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeadingMargin]; | ||
| 121 | +} | ||
| 122 | + | ||
| 123 | +- (MASViewAttribute *)mas_trailingMargin { | ||
| 124 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTrailingMargin]; | ||
| 125 | +} | ||
| 126 | + | ||
| 127 | +- (MASViewAttribute *)mas_centerXWithinMargins { | ||
| 128 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterXWithinMargins]; | ||
| 129 | +} | ||
| 130 | + | ||
| 131 | +- (MASViewAttribute *)mas_centerYWithinMargins { | ||
| 132 | + return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterYWithinMargins]; | ||
| 133 | +} | ||
| 134 | + | ||
| 135 | +#endif | ||
| 136 | + | ||
| 137 | +#pragma mark - associated properties | ||
| 138 | + | ||
| 139 | +- (id)mas_key { | ||
| 140 | + return objc_getAssociatedObject(self, @selector(mas_key)); | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +- (void)setMas_key:(id)key { | ||
| 144 | + objc_setAssociatedObject(self, @selector(mas_key), key, OBJC_ASSOCIATION_RETAIN_NONATOMIC); | ||
| 145 | +} | ||
| 146 | + | ||
| 147 | +#pragma mark - heirachy | ||
| 148 | + | ||
| 149 | +- (instancetype)mas_closestCommonSuperview:(MAS_VIEW *)view { | ||
| 150 | + MAS_VIEW *closestCommonSuperview = nil; | ||
| 151 | + | ||
| 152 | + MAS_VIEW *secondViewSuperview = view; | ||
| 153 | + while (!closestCommonSuperview && secondViewSuperview) { | ||
| 154 | + MAS_VIEW *firstViewSuperview = self; | ||
| 155 | + while (!closestCommonSuperview && firstViewSuperview) { | ||
| 156 | + if (secondViewSuperview == firstViewSuperview) { | ||
| 157 | + closestCommonSuperview = secondViewSuperview; | ||
| 158 | + } | ||
| 159 | + firstViewSuperview = firstViewSuperview.superview; | ||
| 160 | + } | ||
| 161 | + secondViewSuperview = secondViewSuperview.superview; | ||
| 162 | + } | ||
| 163 | + return closestCommonSuperview; | ||
| 164 | +} | ||
| 165 | + | ||
| 166 | +@end |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/View+MASShorthandAdditions.h
0 → 100755
| 1 | +// | ||
| 2 | +// UIView+MASShorthandAdditions.h | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Jonas Budelmann on 22/07/13. | ||
| 6 | +// Copyright (c) 2013 Jonas Budelmann. All rights reserved. | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "View+MASAdditions.h" | ||
| 10 | + | ||
| 11 | +#ifdef MAS_SHORTHAND | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * Shorthand view additions without the 'mas_' prefixes, | ||
| 15 | + * only enabled if MAS_SHORTHAND is defined | ||
| 16 | + */ | ||
| 17 | +@interface MAS_VIEW (MASShorthandAdditions) | ||
| 18 | + | ||
| 19 | +@property (nonatomic, strong, readonly) MASViewAttribute *left; | ||
| 20 | +@property (nonatomic, strong, readonly) MASViewAttribute *top; | ||
| 21 | +@property (nonatomic, strong, readonly) MASViewAttribute *right; | ||
| 22 | +@property (nonatomic, strong, readonly) MASViewAttribute *bottom; | ||
| 23 | +@property (nonatomic, strong, readonly) MASViewAttribute *leading; | ||
| 24 | +@property (nonatomic, strong, readonly) MASViewAttribute *trailing; | ||
| 25 | +@property (nonatomic, strong, readonly) MASViewAttribute *width; | ||
| 26 | +@property (nonatomic, strong, readonly) MASViewAttribute *height; | ||
| 27 | +@property (nonatomic, strong, readonly) MASViewAttribute *centerX; | ||
| 28 | +@property (nonatomic, strong, readonly) MASViewAttribute *centerY; | ||
| 29 | +@property (nonatomic, strong, readonly) MASViewAttribute *baseline; | ||
| 30 | +@property (nonatomic, strong, readonly) MASViewAttribute *(^attribute)(NSLayoutAttribute attr); | ||
| 31 | + | ||
| 32 | +#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | ||
| 33 | + | ||
| 34 | +@property (nonatomic, strong, readonly) MASViewAttribute *firstBaseline; | ||
| 35 | +@property (nonatomic, strong, readonly) MASViewAttribute *lastBaseline; | ||
| 36 | + | ||
| 37 | +#endif | ||
| 38 | + | ||
| 39 | +#if TARGET_OS_IPHONE || TARGET_OS_TV | ||
| 40 | + | ||
| 41 | +@property (nonatomic, strong, readonly) MASViewAttribute *leftMargin; | ||
| 42 | +@property (nonatomic, strong, readonly) MASViewAttribute *rightMargin; | ||
| 43 | +@property (nonatomic, strong, readonly) MASViewAttribute *topMargin; | ||
| 44 | +@property (nonatomic, strong, readonly) MASViewAttribute *bottomMargin; | ||
| 45 | +@property (nonatomic, strong, readonly) MASViewAttribute *leadingMargin; | ||
| 46 | +@property (nonatomic, strong, readonly) MASViewAttribute *trailingMargin; | ||
| 47 | +@property (nonatomic, strong, readonly) MASViewAttribute *centerXWithinMargins; | ||
| 48 | +@property (nonatomic, strong, readonly) MASViewAttribute *centerYWithinMargins; | ||
| 49 | + | ||
| 50 | +#endif | ||
| 51 | + | ||
| 52 | +- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block; | ||
| 53 | +- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block; | ||
| 54 | +- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block; | ||
| 55 | + | ||
| 56 | +@end | ||
| 57 | + | ||
| 58 | +#define MAS_ATTR_FORWARD(attr) \ | ||
| 59 | +- (MASViewAttribute *)attr { \ | ||
| 60 | + return [self mas_##attr]; \ | ||
| 61 | +} | ||
| 62 | + | ||
| 63 | +@implementation MAS_VIEW (MASShorthandAdditions) | ||
| 64 | + | ||
| 65 | +MAS_ATTR_FORWARD(top); | ||
| 66 | +MAS_ATTR_FORWARD(left); | ||
| 67 | +MAS_ATTR_FORWARD(bottom); | ||
| 68 | +MAS_ATTR_FORWARD(right); | ||
| 69 | +MAS_ATTR_FORWARD(leading); | ||
| 70 | +MAS_ATTR_FORWARD(trailing); | ||
| 71 | +MAS_ATTR_FORWARD(width); | ||
| 72 | +MAS_ATTR_FORWARD(height); | ||
| 73 | +MAS_ATTR_FORWARD(centerX); | ||
| 74 | +MAS_ATTR_FORWARD(centerY); | ||
| 75 | +MAS_ATTR_FORWARD(baseline); | ||
| 76 | + | ||
| 77 | +#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) | ||
| 78 | + | ||
| 79 | +MAS_ATTR_FORWARD(firstBaseline); | ||
| 80 | +MAS_ATTR_FORWARD(lastBaseline); | ||
| 81 | + | ||
| 82 | +#endif | ||
| 83 | + | ||
| 84 | +#if TARGET_OS_IPHONE || TARGET_OS_TV | ||
| 85 | + | ||
| 86 | +MAS_ATTR_FORWARD(leftMargin); | ||
| 87 | +MAS_ATTR_FORWARD(rightMargin); | ||
| 88 | +MAS_ATTR_FORWARD(topMargin); | ||
| 89 | +MAS_ATTR_FORWARD(bottomMargin); | ||
| 90 | +MAS_ATTR_FORWARD(leadingMargin); | ||
| 91 | +MAS_ATTR_FORWARD(trailingMargin); | ||
| 92 | +MAS_ATTR_FORWARD(centerXWithinMargins); | ||
| 93 | +MAS_ATTR_FORWARD(centerYWithinMargins); | ||
| 94 | + | ||
| 95 | +#endif | ||
| 96 | + | ||
| 97 | +- (MASViewAttribute *(^)(NSLayoutAttribute))attribute { | ||
| 98 | + return [self mas_attribute]; | ||
| 99 | +} | ||
| 100 | + | ||
| 101 | +- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block { | ||
| 102 | + return [self mas_makeConstraints:block]; | ||
| 103 | +} | ||
| 104 | + | ||
| 105 | +- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block { | ||
| 106 | + return [self mas_updateConstraints:block]; | ||
| 107 | +} | ||
| 108 | + | ||
| 109 | +- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block { | ||
| 110 | + return [self mas_remakeConstraints:block]; | ||
| 111 | +} | ||
| 112 | + | ||
| 113 | +@end | ||
| 114 | + | ||
| 115 | +#endif |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/ViewController+MASAdditions.h
0 → 100755
| 1 | +// | ||
| 2 | +// UIViewController+MASAdditions.h | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Craig Siemens on 2015-06-23. | ||
| 6 | +// | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "MASUtilities.h" | ||
| 10 | +#import "MASConstraintMaker.h" | ||
| 11 | +#import "MASViewAttribute.h" | ||
| 12 | + | ||
| 13 | +#ifdef MAS_VIEW_CONTROLLER | ||
| 14 | + | ||
| 15 | +@interface MAS_VIEW_CONTROLLER (MASAdditions) | ||
| 16 | + | ||
| 17 | +/** | ||
| 18 | + * following properties return a new MASViewAttribute with appropriate UILayoutGuide and NSLayoutAttribute | ||
| 19 | + */ | ||
| 20 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuide; | ||
| 21 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuide; | ||
| 22 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideTop; | ||
| 23 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideBottom; | ||
| 24 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideTop; | ||
| 25 | +@property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideBottom; | ||
| 26 | + | ||
| 27 | + | ||
| 28 | +@end | ||
| 29 | + | ||
| 30 | +#endif |
LiveVideoCloud/LiveVideoCloud/Classes/SDK/Masonry/ViewController+MASAdditions.m
0 → 100755
| 1 | +// | ||
| 2 | +// UIViewController+MASAdditions.m | ||
| 3 | +// Masonry | ||
| 4 | +// | ||
| 5 | +// Created by Craig Siemens on 2015-06-23. | ||
| 6 | +// | ||
| 7 | +// | ||
| 8 | + | ||
| 9 | +#import "ViewController+MASAdditions.h" | ||
| 10 | + | ||
| 11 | +#ifdef MAS_VIEW_CONTROLLER | ||
| 12 | + | ||
| 13 | +@implementation MAS_VIEW_CONTROLLER (MASAdditions) | ||
| 14 | + | ||
| 15 | +- (MASViewAttribute *)mas_topLayoutGuide { | ||
| 16 | + return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; | ||
| 17 | +} | ||
| 18 | +- (MASViewAttribute *)mas_topLayoutGuideTop { | ||
| 19 | + return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeTop]; | ||
| 20 | +} | ||
| 21 | +- (MASViewAttribute *)mas_topLayoutGuideBottom { | ||
| 22 | + return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +- (MASViewAttribute *)mas_bottomLayoutGuide { | ||
| 26 | + return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; | ||
| 27 | +} | ||
| 28 | +- (MASViewAttribute *)mas_bottomLayoutGuideTop { | ||
| 29 | + return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; | ||
| 30 | +} | ||
| 31 | +- (MASViewAttribute *)mas_bottomLayoutGuideBottom { | ||
| 32 | + return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | + | ||
| 36 | + | ||
| 37 | +@end | ||
| 38 | + | ||
| 39 | +#endif |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/homeSections/Controller/LVCLivePlayerController.m
| @@ -9,8 +9,13 @@ | @@ -9,8 +9,13 @@ | ||
| 9 | #import "LVCLivePlayerController.h" | 9 | #import "LVCLivePlayerController.h" |
| 10 | #import "LVCPlayer.h" | 10 | #import "LVCPlayer.h" |
| 11 | 11 | ||
| 12 | -@interface LVCLivePlayerController () | 12 | +@interface LVCLivePlayerController ()<LVCPlayerDelegate> |
| 13 | +{ | ||
| 14 | + BOOL isHiddenStatusBar;//记录状态的隐藏显示 | ||
| 15 | + CGRect playerFrame; | ||
| 16 | + | ||
| 13 | 17 | ||
| 18 | +} | ||
| 14 | @property (nonatomic, strong) LVCPlayer *player; | 19 | @property (nonatomic, strong) LVCPlayer *player; |
| 15 | 20 | ||
| 16 | @end | 21 | @end |
| @@ -20,14 +25,151 @@ | @@ -20,14 +25,151 @@ | ||
| 20 | - (void)viewDidLoad { | 25 | - (void)viewDidLoad { |
| 21 | [super viewDidLoad]; | 26 | [super viewDidLoad]; |
| 22 | 27 | ||
| 28 | + [self addObservers]; | ||
| 29 | + | ||
| 30 | + playerFrame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, ([UIScreen mainScreen].bounds.size.width)* 9 / 16); | ||
| 31 | + | ||
| 23 | self.view.backgroundColor = [UIColor whiteColor]; | 32 | self.view.backgroundColor = [UIColor whiteColor]; |
| 24 | [self.view addSubview:self.player]; | 33 | [self.view addSubview:self.player]; |
| 25 | 34 | ||
| 35 | + [self makeConstraints]; | ||
| 26 | } | 36 | } |
| 27 | 37 | ||
| 28 | -- (void)backBtnAction | 38 | +- (void)addObservers |
| 39 | +{ | ||
| 40 | + [[NSNotificationCenter defaultCenter] addObserver:self | ||
| 41 | + selector:@selector(onDeviceOrientationChange:) | ||
| 42 | + name:UIDeviceOrientationDidChangeNotification | ||
| 43 | + object:nil]; | ||
| 44 | + | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +#pragma mark - | ||
| 48 | +#pragma mark - Notification | ||
| 49 | +- (void)onDeviceOrientationChange:(NSNotification *)notification{ | ||
| 50 | + | ||
| 51 | + if (_player==nil||_player.superview==nil){ | ||
| 52 | + return; | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; | ||
| 56 | + UIInterfaceOrientation interfaceOrientation = (UIInterfaceOrientation)orientation; | ||
| 57 | + switch (interfaceOrientation) { | ||
| 58 | + case UIInterfaceOrientationPortraitUpsideDown:{ | ||
| 59 | + _player.isFullScreen = NO; | ||
| 60 | + } | ||
| 61 | + break; | ||
| 62 | + case UIInterfaceOrientationPortrait:{ | ||
| 63 | + [self toOrientation:UIInterfaceOrientationPortrait]; | ||
| 64 | + _player.isFullScreen = NO; | ||
| 65 | + } | ||
| 66 | + break; | ||
| 67 | + case UIInterfaceOrientationLandscapeLeft:{ | ||
| 68 | + [self toOrientation:UIInterfaceOrientationLandscapeLeft]; | ||
| 69 | + _player.isFullScreen = YES; | ||
| 70 | + } | ||
| 71 | + break; | ||
| 72 | + case UIInterfaceOrientationLandscapeRight:{ | ||
| 73 | + [self toOrientation:UIInterfaceOrientationLandscapeRight]; | ||
| 74 | + _player.isFullScreen = YES; | ||
| 75 | + } | ||
| 76 | + break; | ||
| 77 | + default: | ||
| 78 | + break; | ||
| 79 | + } | ||
| 80 | +} | ||
| 81 | + | ||
| 82 | +#pragma mark - | ||
| 83 | +#pragma mark - 屏幕旋转 | ||
| 84 | +-(void)toOrientation:(UIInterfaceOrientation)orientation{ | ||
| 85 | + //获取到当前状态条的方向 | ||
| 86 | + UIInterfaceOrientation currentOrientation = [UIApplication sharedApplication].statusBarOrientation; | ||
| 87 | + //判断如果当前方向和要旋转的方向一致,那么不做任何操作 | ||
| 88 | + if (currentOrientation == orientation) { | ||
| 89 | + return; | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + //根据要旋转的方向,使用Masonry重新修改限制 | ||
| 93 | + if (orientation ==UIInterfaceOrientationPortrait) {// | ||
| 94 | + [_player mas_remakeConstraints:^(MASConstraintMaker *make) { | ||
| 95 | + make.top.left.right.mas_equalTo(0); | ||
| 96 | + make.height.equalTo(@(playerFrame.size.height)); | ||
| 97 | + }]; | ||
| 98 | + }else{ | ||
| 99 | + | ||
| 100 | + if (currentOrientation ==UIInterfaceOrientationPortrait) { | ||
| 101 | + [_player mas_remakeConstraints:^(MASConstraintMaker *make) { | ||
| 102 | + make.width.equalTo(@([UIScreen mainScreen].bounds.size.height)); | ||
| 103 | + make.height.equalTo(@([UIScreen mainScreen].bounds.size.width)); | ||
| 104 | + make.center.equalTo(_player.superview); | ||
| 105 | + }]; | ||
| 106 | + } | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + //设置状态栏方向 | ||
| 110 | + [[UIApplication sharedApplication] setStatusBarOrientation:orientation animated:NO]; | ||
| 111 | + | ||
| 112 | + //旋转屏幕 | ||
| 113 | + [UIView beginAnimations:nil context:nil]; | ||
| 114 | + _player.transform = CGAffineTransformIdentity; | ||
| 115 | + _player.transform = [self getCurrentDeviceOrientation]; | ||
| 116 | + [UIView setAnimationDuration:2.0]; | ||
| 117 | + [UIView commitAnimations]; | ||
| 118 | +} | ||
| 119 | + | ||
| 120 | +//获取旋转方向 | ||
| 121 | +- (CGAffineTransform)getCurrentDeviceOrientation{ | ||
| 122 | + UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; | ||
| 123 | + //根据要进行旋转的方向来计算旋转的角度 | ||
| 124 | + if (orientation ==UIInterfaceOrientationPortrait) { | ||
| 125 | + return CGAffineTransformIdentity; | ||
| 126 | + }else if (orientation ==UIInterfaceOrientationLandscapeLeft){ | ||
| 127 | + return CGAffineTransformMakeRotation(-M_PI_2); | ||
| 128 | + }else if(orientation ==UIInterfaceOrientationLandscapeRight){ | ||
| 129 | + return CGAffineTransformMakeRotation(M_PI_2); | ||
| 130 | + } | ||
| 131 | + return CGAffineTransformIdentity; | ||
| 132 | +} | ||
| 133 | + | ||
| 134 | +#pragma mark - | ||
| 135 | +#pragma mark - LVCPlayerDelegate | ||
| 136 | +- (void)lvcPlayer:(LVCPlayer *)player clickedBackBtn:(UIButton *)backBtn | ||
| 137 | +{ | ||
| 138 | + //如果是全屏返回半屏,如果是半屏直接退出 | ||
| 139 | + if (player.isFullScreen) { | ||
| 140 | + [self toOrientation:UIInterfaceOrientationPortrait]; | ||
| 141 | + player.isFullScreen = NO; | ||
| 142 | + } else { | ||
| 143 | + self.navigationController.navigationBar.hidden = NO; | ||
| 144 | + [self.navigationController popViewControllerAnimated:YES]; | ||
| 145 | + } | ||
| 146 | +} | ||
| 147 | + | ||
| 148 | +- (void)lvcPlayer:(LVCPlayer *)player clickedPlayOrPauseBtn:(UIButton *)playOrPauseBtn | ||
| 149 | +{ | ||
| 150 | + | ||
| 151 | +} | ||
| 152 | + | ||
| 153 | +- (void)lvcPlayer:(LVCPlayer *)player clickedFullScreenBtn:(UIButton *)fullScreenBtn | ||
| 154 | +{ | ||
| 155 | + if (player.isFullScreen == YES) {//全屏 | ||
| 156 | + [self toOrientation:UIInterfaceOrientationPortrait]; | ||
| 157 | + player.isFullScreen = NO; | ||
| 158 | + | ||
| 159 | + }else{//非全屏 | ||
| 160 | + [self toOrientation:UIInterfaceOrientationLandscapeRight]; | ||
| 161 | + player.isFullScreen = YES; | ||
| 162 | + } | ||
| 163 | +} | ||
| 164 | + | ||
| 165 | +#pragma mark - | ||
| 166 | +#pragma mark - makeConstraints | ||
| 167 | +- (void)makeConstraints | ||
| 29 | { | 168 | { |
| 30 | - [self.navigationController popViewControllerAnimated:YES]; | 169 | + [self.player mas_makeConstraints:^(MASConstraintMaker *make) { |
| 170 | + make.top.left.right.mas_equalTo(0); | ||
| 171 | + make.height.equalTo(@(playerFrame.size.height)); | ||
| 172 | + }]; | ||
| 31 | } | 173 | } |
| 32 | 174 | ||
| 33 | #pragma mark - | 175 | #pragma mark - |
| @@ -35,8 +177,8 @@ | @@ -35,8 +177,8 @@ | ||
| 35 | - (LVCPlayer *)player | 177 | - (LVCPlayer *)player |
| 36 | { | 178 | { |
| 37 | if (!_player) { | 179 | if (!_player) { |
| 38 | - _player = [[LVCPlayer alloc] initWithFrame:CGRectMake(0, 20, self.view.width, self.view.width*9/16)]; | ||
| 39 | - [_player.backBtn addTarget:self action:@selector(backBtnAction) forControlEvents:UIControlEventTouchUpInside]; | 180 | + _player = [[LVCPlayer alloc] init]; |
| 181 | + _player.delegate = self; | ||
| 40 | } | 182 | } |
| 41 | return _player; | 183 | return _player; |
| 42 | } | 184 | } |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/homeSections/View/LVCPlayer.h
| @@ -8,9 +8,26 @@ | @@ -8,9 +8,26 @@ | ||
| 8 | 8 | ||
| 9 | #import <UIKit/UIKit.h> | 9 | #import <UIKit/UIKit.h> |
| 10 | 10 | ||
| 11 | +@class LVCPlayer; | ||
| 12 | + | ||
| 13 | +@protocol LVCPlayerDelegate <NSObject> | ||
| 14 | + | ||
| 15 | +@optional | ||
| 16 | + | ||
| 17 | +- (void)lvcPlayer:(LVCPlayer *)player clickedBackBtn:(UIButton *)backBtn; //返回 | ||
| 18 | +- (void)lvcPlayer:(LVCPlayer *)player clickedPlayOrPauseBtn:(UIButton *)playOrPauseBtn; //播放或暂停 | ||
| 19 | +- (void)lvcPlayer:(LVCPlayer *)player clickedFullScreenBtn:(UIButton *)fullScreenBtn; //全屏 | ||
| 20 | + | ||
| 21 | +@end | ||
| 22 | + | ||
| 23 | + | ||
| 11 | @interface LVCPlayer : UIView | 24 | @interface LVCPlayer : UIView |
| 12 | 25 | ||
| 26 | +@property (nonatomic, assign) id<LVCPlayerDelegate> delegate; | ||
| 27 | + | ||
| 13 | @property (nonatomic, strong) UIView *contentView; //所有空间统一管理在这个view中 | 28 | @property (nonatomic, strong) UIView *contentView; //所有空间统一管理在这个view中 |
| 14 | @property (nonatomic, strong) UIButton *backBtn; //返回 | 29 | @property (nonatomic, strong) UIButton *backBtn; //返回 |
| 15 | 30 | ||
| 31 | +@property (nonatomic, assign) BOOL isFullScreen; //是否是全屏 | ||
| 32 | + | ||
| 16 | @end | 33 | @end |
LiveVideoCloud/LiveVideoCloud/Classes/Sections/homeSections/View/LVCPlayer.m
| @@ -10,12 +10,13 @@ | @@ -10,12 +10,13 @@ | ||
| 10 | 10 | ||
| 11 | @interface LVCPlayer () | 11 | @interface LVCPlayer () |
| 12 | 12 | ||
| 13 | -@property (nonatomic, strong) UIImageView *topBgView; //顶部蒙版 | ||
| 14 | -@property (nonatomic, strong) UIImageView *bottomBgView; //底部蒙版 | ||
| 15 | -@property (nonatomic, strong) UIButton *playOrPauseBtn; //播放/暂停 | ||
| 16 | -@property (nonatomic, strong) UILabel *titleLab; //标题 | ||
| 17 | -@property (nonatomic, strong) UIButton *fullScreenBtn; //控制全屏按钮 | ||
| 18 | -@property (nonatomic, strong) UIGestureRecognizer *singleTap; //单击手势 | 13 | +@property (nonatomic, strong) UIImageView *topBgView; //顶部蒙版 |
| 14 | +@property (nonatomic, strong) UIImageView *bottomBgView; //底部蒙版 | ||
| 15 | +@property (nonatomic, strong) UIButton *playOrPauseBtn; //播放/暂停 | ||
| 16 | +@property (nonatomic, strong) UILabel *titleLab; //标题 | ||
| 17 | +@property (nonatomic, strong) UIButton *fullScreenBtn; //控制全屏按钮 | ||
| 18 | +@property (nonatomic, strong) UIGestureRecognizer *singleTap; //单击手势 | ||
| 19 | +@property (nonatomic, strong) UIActivityIndicatorView *loadingView; //加载图 | ||
| 19 | @end | 20 | @end |
| 20 | 21 | ||
| 21 | @implementation LVCPlayer | 22 | @implementation LVCPlayer |
| @@ -27,11 +28,13 @@ | @@ -27,11 +28,13 @@ | ||
| 27 | 28 | ||
| 28 | [self addSubview:self.contentView]; | 29 | [self addSubview:self.contentView]; |
| 29 | [self.contentView addSubview:self.bottomBgView]; | 30 | [self.contentView addSubview:self.bottomBgView]; |
| 31 | + [self.contentView addSubview:self.topBgView]; | ||
| 30 | [self.bottomBgView addSubview:self.playOrPauseBtn]; | 32 | [self.bottomBgView addSubview:self.playOrPauseBtn]; |
| 31 | - [self.topBgView addSubview:self.titleLab]; | ||
| 32 | [self.bottomBgView addSubview:self.fullScreenBtn]; | 33 | [self.bottomBgView addSubview:self.fullScreenBtn]; |
| 33 | - [self.contentView addSubview:self.topBgView]; | 34 | + [self.topBgView addSubview:self.titleLab]; |
| 34 | [self.topBgView addSubview:self.backBtn]; | 35 | [self.topBgView addSubview:self.backBtn]; |
| 36 | + [self.contentView addSubview:self.loadingView]; | ||
| 37 | + [self makeSubViewsConstraints]; | ||
| 35 | 38 | ||
| 36 | } | 39 | } |
| 37 | return self; | 40 | return self; |
| @@ -39,17 +42,89 @@ | @@ -39,17 +42,89 @@ | ||
| 39 | 42 | ||
| 40 | #pragma mark - | 43 | #pragma mark - |
| 41 | #pragma mark - action | 44 | #pragma mark - action |
| 45 | +- (void)playOrPauseBtnAction:(UIButton *)btn | ||
| 46 | +{ | ||
| 47 | + if (self.delegate && [self.delegate respondsToSelector:@selector(lvcPlayer:clickedPlayOrPauseBtn:)]) { | ||
| 48 | + [self.delegate lvcPlayer:self clickedPlayOrPauseBtn:btn]; | ||
| 49 | + } | ||
| 50 | +} | ||
| 51 | + | ||
| 52 | +- (void)backBtnAction:(UIButton *)btn | ||
| 53 | +{ | ||
| 54 | + if (self.delegate && [self.delegate respondsToSelector:@selector(lvcPlayer:clickedBackBtn:)]) { | ||
| 55 | + [self.delegate lvcPlayer:self clickedBackBtn:btn]; | ||
| 56 | + } | ||
| 57 | +} | ||
| 58 | + | ||
| 59 | +- (void)fullScreenBtnAction:(UIButton *)btn | ||
| 60 | +{ | ||
| 61 | + if (self.delegate && [self.delegate respondsToSelector:@selector(lvcPlayer:clickedFullScreenBtn:)]) { | ||
| 62 | + [self.delegate lvcPlayer:self clickedFullScreenBtn:btn]; | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | +} | ||
| 42 | 66 | ||
| 67 | +#pragma mark - | ||
| 68 | +#pragma mark - setter | ||
| 43 | 69 | ||
| 44 | 70 | ||
| 71 | +- (void)makeSubViewsConstraints | ||
| 72 | +{ | ||
| 73 | + [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) { | ||
| 74 | + make.top.left.right.bottom.mas_equalTo(0); | ||
| 75 | + }]; | ||
| 76 | + | ||
| 77 | + [self.loadingView mas_makeConstraints:^(MASConstraintMaker *make) { | ||
| 78 | + make.center.equalTo(self.contentView); | ||
| 79 | + }]; | ||
| 80 | + | ||
| 81 | + [self.backBtn mas_makeConstraints:^(MASConstraintMaker *make) { | ||
| 82 | + make.left.equalTo(self.topBgView).with.offset(5); | ||
| 83 | + make.height.mas_equalTo(30); | ||
| 84 | + make.width.mas_equalTo(30); | ||
| 85 | + make.top.equalTo(self.topBgView).with.offset(20); | ||
| 86 | + }]; | ||
| 87 | + | ||
| 88 | + [self.topBgView mas_makeConstraints:^(MASConstraintMaker *make) { | ||
| 89 | + make.left.right.top.mas_equalTo(0); | ||
| 90 | + make.height.mas_equalTo(70); | ||
| 91 | + }]; | ||
| 92 | + | ||
| 93 | + [self.bottomBgView mas_makeConstraints:^(MASConstraintMaker *make) { | ||
| 94 | + make.bottom.left.right.equalTo(self.contentView).with.offset(0); | ||
| 95 | + make.height.mas_equalTo(50); | ||
| 96 | + }]; | ||
| 97 | + | ||
| 98 | + [self.titleLab mas_makeConstraints:^(MASConstraintMaker *make) { | ||
| 99 | + make.leading.trailing.bottom.mas_equalTo(0); | ||
| 100 | + make.height.mas_equalTo(40); | ||
| 101 | + }]; | ||
| 102 | + | ||
| 103 | + [self.playOrPauseBtn mas_makeConstraints:^(MASConstraintMaker *make) { | ||
| 104 | + make.left.equalTo(self.bottomBgView).with.offset(0); | ||
| 105 | + make.height.mas_equalTo(50); | ||
| 106 | + make.bottom.equalTo(self.bottomBgView).with.offset(0); | ||
| 107 | + make.width.mas_equalTo(50); | ||
| 108 | + }]; | ||
| 109 | + | ||
| 110 | + [self.fullScreenBtn mas_makeConstraints:^(MASConstraintMaker *make) { | ||
| 111 | + make.right.equalTo(self.bottomBgView).with.offset(0); | ||
| 112 | + make.height.mas_equalTo(50); | ||
| 113 | + make.bottom.equalTo(self.bottomBgView).with.offset(0); | ||
| 114 | + make.width.mas_equalTo(50); | ||
| 115 | + | ||
| 116 | + }]; | ||
| 117 | + | ||
| 118 | +} | ||
| 119 | + | ||
| 45 | #pragma mark - | 120 | #pragma mark - |
| 46 | #pragma mark - getter | 121 | #pragma mark - getter |
| 47 | 122 | ||
| 48 | - (UIView *)contentView | 123 | - (UIView *)contentView |
| 49 | { | 124 | { |
| 50 | if (!_contentView) { | 125 | if (!_contentView) { |
| 51 | - _contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.width, self.height)]; | ||
| 52 | - _contentView.backgroundColor = [UIColor whiteColor]; | 126 | + _contentView = [[UIView alloc] init]; |
| 127 | + _contentView.backgroundColor = [UIColor blueColor]; | ||
| 53 | } | 128 | } |
| 54 | return _contentView; | 129 | return _contentView; |
| 55 | } | 130 | } |
| @@ -57,7 +132,7 @@ | @@ -57,7 +132,7 @@ | ||
| 57 | - (UIImageView *)topBgView | 132 | - (UIImageView *)topBgView |
| 58 | { | 133 | { |
| 59 | if (!_topBgView) { | 134 | if (!_topBgView) { |
| 60 | - _topBgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.width, 40)]; | 135 | + _topBgView = [[UIImageView alloc] init]; |
| 61 | _topBgView.image = [UIImage imageNamed:@"top_shadow"]; | 136 | _topBgView.image = [UIImage imageNamed:@"top_shadow"]; |
| 62 | _topBgView.userInteractionEnabled = YES; | 137 | _topBgView.userInteractionEnabled = YES; |
| 63 | } | 138 | } |
| @@ -67,7 +142,7 @@ | @@ -67,7 +142,7 @@ | ||
| 67 | - (UIImageView *)bottomBgView | 142 | - (UIImageView *)bottomBgView |
| 68 | { | 143 | { |
| 69 | if (!_bottomBgView) { | 144 | if (!_bottomBgView) { |
| 70 | - _bottomBgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, self.height-40, self.width, 40)]; | 145 | + _bottomBgView = [[UIImageView alloc] init]; |
| 71 | _bottomBgView.image = [UIImage imageNamed:@"bottom_shadow"]; | 146 | _bottomBgView.image = [UIImage imageNamed:@"bottom_shadow"]; |
| 72 | _bottomBgView.userInteractionEnabled = YES; | 147 | _bottomBgView.userInteractionEnabled = YES; |
| 73 | } | 148 | } |
| @@ -78,9 +153,9 @@ | @@ -78,9 +153,9 @@ | ||
| 78 | { | 153 | { |
| 79 | if (!_playOrPauseBtn) { | 154 | if (!_playOrPauseBtn) { |
| 80 | _playOrPauseBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | 155 | _playOrPauseBtn = [UIButton buttonWithType:UIButtonTypeCustom]; |
| 81 | - _playOrPauseBtn.frame = CGRectMake(0, 0, 40, 40); | ||
| 82 | [_playOrPauseBtn setImage:[UIImage imageNamed:@"pause"] forState:UIControlStateNormal]; | 156 | [_playOrPauseBtn setImage:[UIImage imageNamed:@"pause"] forState:UIControlStateNormal]; |
| 83 | [_playOrPauseBtn setImage:[UIImage imageNamed:@"play"] forState:UIControlStateSelected]; | 157 | [_playOrPauseBtn setImage:[UIImage imageNamed:@"play"] forState:UIControlStateSelected]; |
| 158 | + [_playOrPauseBtn addTarget:self action:@selector(playOrPauseBtnAction:) forControlEvents:UIControlEventTouchUpInside]; | ||
| 84 | } | 159 | } |
| 85 | return _playOrPauseBtn; | 160 | return _playOrPauseBtn; |
| 86 | } | 161 | } |
| @@ -88,7 +163,7 @@ | @@ -88,7 +163,7 @@ | ||
| 88 | - (UILabel *)titleLab | 163 | - (UILabel *)titleLab |
| 89 | { | 164 | { |
| 90 | if (!_titleLab) { | 165 | if (!_titleLab) { |
| 91 | - _titleLab = [[UILabel alloc] initWithFrame:CGRectMake(70, 0, self.width-100, 40)]; | 166 | + _titleLab = [[UILabel alloc] init]; |
| 92 | _titleLab.textColor = [UIColor whiteColor]; | 167 | _titleLab.textColor = [UIColor whiteColor]; |
| 93 | _titleLab.font = [UIFont systemFontOfSize:15]; | 168 | _titleLab.font = [UIFont systemFontOfSize:15]; |
| 94 | } | 169 | } |
| @@ -99,9 +174,9 @@ | @@ -99,9 +174,9 @@ | ||
| 99 | { | 174 | { |
| 100 | if (!_fullScreenBtn) { | 175 | if (!_fullScreenBtn) { |
| 101 | _fullScreenBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | 176 | _fullScreenBtn = [UIButton buttonWithType:UIButtonTypeCustom]; |
| 102 | - _fullScreenBtn.frame = CGRectMake(self.width-40, 0, 40, 40); | ||
| 103 | [_fullScreenBtn setImage:[UIImage imageNamed:@"fullscreen"] forState:UIControlStateNormal]; | 177 | [_fullScreenBtn setImage:[UIImage imageNamed:@"fullscreen"] forState:UIControlStateNormal]; |
| 104 | [_fullScreenBtn setImage:[UIImage imageNamed:@"nonfullscreen"] forState:UIControlStateSelected]; | 178 | [_fullScreenBtn setImage:[UIImage imageNamed:@"nonfullscreen"] forState:UIControlStateSelected]; |
| 179 | + [_fullScreenBtn addTarget:self action:@selector(fullScreenBtnAction:) forControlEvents:UIControlEventTouchUpInside]; | ||
| 105 | } | 180 | } |
| 106 | return _fullScreenBtn; | 181 | return _fullScreenBtn; |
| 107 | } | 182 | } |
| @@ -110,20 +185,22 @@ | @@ -110,20 +185,22 @@ | ||
| 110 | { | 185 | { |
| 111 | if (!_backBtn) { | 186 | if (!_backBtn) { |
| 112 | _backBtn = [UIButton buttonWithType:UIButtonTypeCustom]; | 187 | _backBtn = [UIButton buttonWithType:UIButtonTypeCustom]; |
| 113 | - _backBtn.frame = CGRectMake(00, 0, 40, 40); | ||
| 114 | [_backBtn setImage:[UIImage imageNamed:@"返回"] forState:UIControlStateNormal]; | 188 | [_backBtn setImage:[UIImage imageNamed:@"返回"] forState:UIControlStateNormal]; |
| 189 | + [_backBtn addTarget:self action:@selector(backBtnAction:) forControlEvents:UIControlEventTouchUpInside]; | ||
| 115 | } | 190 | } |
| 116 | return _backBtn; | 191 | return _backBtn; |
| 117 | } | 192 | } |
| 118 | 193 | ||
| 119 | -- (UIGestureRecognizer *)singleTap | 194 | +- (UIActivityIndicatorView *)loadingView |
| 120 | { | 195 | { |
| 121 | - if (!_singleTap) { | ||
| 122 | - _singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; | 196 | + if (!_loadingView) { |
| 197 | + _loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; | ||
| 198 | + [_loadingView startAnimating]; | ||
| 123 | } | 199 | } |
| 124 | - return _singleTap; | 200 | + return _loadingView; |
| 125 | } | 201 | } |
| 126 | 202 | ||
| 203 | + | ||
| 127 | /* | 204 | /* |
| 128 | // Only override drawRect: if you perform custom drawing. | 205 | // Only override drawRect: if you perform custom drawing. |
| 129 | // An empty implementation adversely affects performance during animation. | 206 | // An empty implementation adversely affects performance during animation. |
LiveVideoCloud/LiveVideoCloud/Info.plist
| @@ -31,8 +31,6 @@ | @@ -31,8 +31,6 @@ | ||
| 31 | <key>UISupportedInterfaceOrientations</key> | 31 | <key>UISupportedInterfaceOrientations</key> |
| 32 | <array> | 32 | <array> |
| 33 | <string>UIInterfaceOrientationPortrait</string> | 33 | <string>UIInterfaceOrientationPortrait</string> |
| 34 | - <string>UIInterfaceOrientationLandscapeLeft</string> | ||
| 35 | - <string>UIInterfaceOrientationLandscapeRight</string> | ||
| 36 | </array> | 34 | </array> |
| 37 | <key>UISupportedInterfaceOrientations~ipad</key> | 35 | <key>UISupportedInterfaceOrientations~ipad</key> |
| 38 | <array> | 36 | <array> |
LiveVideoCloud/LiveVideoCloud/PrefixHeader.pch
| @@ -23,6 +23,7 @@ | @@ -23,6 +23,7 @@ | ||
| 23 | #import "UIImageView+WebCache.h" | 23 | #import "UIImageView+WebCache.h" |
| 24 | #import "SVProgressHUD.h" | 24 | #import "SVProgressHUD.h" |
| 25 | #import "AFNetworking.h" | 25 | #import "AFNetworking.h" |
| 26 | + #import "Masonry.h" | ||
| 26 | 27 | ||
| 27 | #if TARGET_OS_IPHONE | 28 | #if TARGET_OS_IPHONE |
| 28 | 29 |