Commit 72ac51cb3fed452ebdba480f7a4c1fb2afa9ed98

Authored by 张旭
2 parents 4ea0a67d 69c75123

Merge branch 'master' of bj.gitlab.cnlive.com:ios-team/LiveVideoCloud

# Conflicts:
#	LiveVideoCloud/LiveVideoCloud.xcodeproj/project.pbxproj
Showing 31 changed files with 3218 additions and 39 deletions
LiveVideoCloud/LiveVideoCloud.xcodeproj/project.pbxproj
... ... @@ -7,8 +7,18 @@
7 7 objects = {
8 8  
9 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 22 812E50531E7699DC004F5FCD /* CNLivePlayerSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 812E50501E7699DC004F5FCD /* CNLivePlayerSDK.framework */; };
13 23 812E50541E7699DC004F5FCD /* KSYGPUResource.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 812E50511E7699DC004F5FCD /* KSYGPUResource.bundle */; };
14 24 812E50551E7699E9004F5FCD /* CNLiveMsgTools.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 812E504F1E7699DC004F5FCD /* CNLiveMsgTools.framework */; };
... ... @@ -169,10 +179,35 @@
169 179 /* End PBXCopyFilesBuildPhase section */
170 180  
171 181 /* Begin PBXFileReference section */
172   - 812E503C1E767A8D004F5FCD /* LVCPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCPlayer.h; sourceTree = "<group>"; };
173   - 812E503D1E767A8D004F5FCD /* LVCPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCPlayer.m; sourceTree = "<group>"; };
174   - 812E503F1E768181004F5FCD /* LVCLivePlayerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCLivePlayerController.h; sourceTree = "<group>"; };
175   - 812E50401E768181004F5FCD /* LVCLivePlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCLivePlayerController.m; sourceTree = "<group>"; };
  182 + 810B64DE1E779AE900133E15 /* LVCPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCPlayer.h; sourceTree = "<group>"; };
  183 + 810B64DF1E779AE900133E15 /* LVCPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCPlayer.m; sourceTree = "<group>"; };
  184 + 810B64E11E779AFE00133E15 /* LVCLivePlayerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LVCLivePlayerController.h; sourceTree = "<group>"; };
  185 + 810B64E21E779AFE00133E15 /* LVCLivePlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LVCLivePlayerController.m; sourceTree = "<group>"; };
  186 + 810B64E51E779B1F00133E15 /* MASCompositeConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASCompositeConstraint.h; sourceTree = "<group>"; };
  187 + 810B64E61E779B1F00133E15 /* MASCompositeConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASCompositeConstraint.m; sourceTree = "<group>"; };
  188 + 810B64E71E779B1F00133E15 /* MASConstraint+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MASConstraint+Private.h"; sourceTree = "<group>"; };
  189 + 810B64E81E779B1F00133E15 /* MASConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASConstraint.h; sourceTree = "<group>"; };
  190 + 810B64E91E779B1F00133E15 /* MASConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASConstraint.m; sourceTree = "<group>"; };
  191 + 810B64EA1E779B1F00133E15 /* MASConstraintMaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASConstraintMaker.h; sourceTree = "<group>"; };
  192 + 810B64EB1E779B1F00133E15 /* MASConstraintMaker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASConstraintMaker.m; sourceTree = "<group>"; };
  193 + 810B64EC1E779B1F00133E15 /* MASLayoutConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASLayoutConstraint.h; sourceTree = "<group>"; };
  194 + 810B64ED1E779B1F00133E15 /* MASLayoutConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASLayoutConstraint.m; sourceTree = "<group>"; };
  195 + 810B64EE1E779B1F00133E15 /* Masonry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Masonry.h; sourceTree = "<group>"; };
  196 + 810B64EF1E779B1F00133E15 /* MASUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASUtilities.h; sourceTree = "<group>"; };
  197 + 810B64F01E779B1F00133E15 /* MASViewAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASViewAttribute.h; sourceTree = "<group>"; };
  198 + 810B64F11E779B1F00133E15 /* MASViewAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewAttribute.m; sourceTree = "<group>"; };
  199 + 810B64F21E779B1F00133E15 /* MASViewConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASViewConstraint.h; sourceTree = "<group>"; };
  200 + 810B64F31E779B1F00133E15 /* MASViewConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewConstraint.m; sourceTree = "<group>"; };
  201 + 810B64F41E779B1F00133E15 /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MASAdditions.h"; sourceTree = "<group>"; };
  202 + 810B64F51E779B1F00133E15 /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+MASAdditions.m"; sourceTree = "<group>"; };
  203 + 810B64F61E779B1F00133E15 /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MASShorthandAdditions.h"; sourceTree = "<group>"; };
  204 + 810B64F71E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = "<group>"; };
  205 + 810B64F81E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = "<group>"; };
  206 + 810B64F91E779B1F00133E15 /* View+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "View+MASAdditions.h"; sourceTree = "<group>"; };
  207 + 810B64FA1E779B1F00133E15 /* View+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "View+MASAdditions.m"; sourceTree = "<group>"; };
  208 + 810B64FB1E779B1F00133E15 /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "View+MASShorthandAdditions.h"; sourceTree = "<group>"; };
  209 + 810B64FC1E779B1F00133E15 /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ViewController+MASAdditions.h"; sourceTree = "<group>"; };
  210 + 810B64FD1E779B1F00133E15 /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ViewController+MASAdditions.m"; sourceTree = "<group>"; };
176 211 812E504F1E7699DC004F5FCD /* CNLiveMsgTools.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNLiveMsgTools.framework; sourceTree = "<group>"; };
177 212 812E50501E7699DC004F5FCD /* CNLivePlayerSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CNLivePlayerSDK.framework; sourceTree = "<group>"; };
178 213 812E50511E7699DC004F5FCD /* KSYGPUResource.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = KSYGPUResource.bundle; sourceTree = "<group>"; };
... ... @@ -459,6 +494,38 @@
459 494 /* End PBXFrameworksBuildPhase section */
460 495  
461 496 /* Begin PBXGroup section */
  497 + 810B64E41E779B1F00133E15 /* Masonry */ = {
  498 + isa = PBXGroup;
  499 + children = (
  500 + 810B64E51E779B1F00133E15 /* MASCompositeConstraint.h */,
  501 + 810B64E61E779B1F00133E15 /* MASCompositeConstraint.m */,
  502 + 810B64E71E779B1F00133E15 /* MASConstraint+Private.h */,
  503 + 810B64E81E779B1F00133E15 /* MASConstraint.h */,
  504 + 810B64E91E779B1F00133E15 /* MASConstraint.m */,
  505 + 810B64EA1E779B1F00133E15 /* MASConstraintMaker.h */,
  506 + 810B64EB1E779B1F00133E15 /* MASConstraintMaker.m */,
  507 + 810B64EC1E779B1F00133E15 /* MASLayoutConstraint.h */,
  508 + 810B64ED1E779B1F00133E15 /* MASLayoutConstraint.m */,
  509 + 810B64EE1E779B1F00133E15 /* Masonry.h */,
  510 + 810B64EF1E779B1F00133E15 /* MASUtilities.h */,
  511 + 810B64F01E779B1F00133E15 /* MASViewAttribute.h */,
  512 + 810B64F11E779B1F00133E15 /* MASViewAttribute.m */,
  513 + 810B64F21E779B1F00133E15 /* MASViewConstraint.h */,
  514 + 810B64F31E779B1F00133E15 /* MASViewConstraint.m */,
  515 + 810B64F41E779B1F00133E15 /* NSArray+MASAdditions.h */,
  516 + 810B64F51E779B1F00133E15 /* NSArray+MASAdditions.m */,
  517 + 810B64F61E779B1F00133E15 /* NSArray+MASShorthandAdditions.h */,
  518 + 810B64F71E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.h */,
  519 + 810B64F81E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.m */,
  520 + 810B64F91E779B1F00133E15 /* View+MASAdditions.h */,
  521 + 810B64FA1E779B1F00133E15 /* View+MASAdditions.m */,
  522 + 810B64FB1E779B1F00133E15 /* View+MASShorthandAdditions.h */,
  523 + 810B64FC1E779B1F00133E15 /* ViewController+MASAdditions.h */,
  524 + 810B64FD1E779B1F00133E15 /* ViewController+MASAdditions.m */,
  525 + );
  526 + path = Masonry;
  527 + sourceTree = "<group>";
  528 + };
462 529 812E504D1E769995004F5FCD /* CNLiveSDK */ = {
463 530 isa = PBXGroup;
464 531 children = (
... ... @@ -602,6 +669,7 @@
602 669 D2029BD41E6EADE10027CD92 /* SDK */ = {
603 670 isa = PBXGroup;
604 671 children = (
  672 + 810B64E41E779B1F00133E15 /* Masonry */,
605 673 D2029BD51E6EADE10027CD92 /* AFNetworking */,
606 674 D2029BF81E6EADE10027CD92 /* MBProgressHUD */,
607 675 D2029BFB1E6EADE10027CD92 /* MJExtension */,
... ... @@ -1257,8 +1325,8 @@
1257 1325 children = (
1258 1326 D2888DB21E6EC154003A77C8 /* HomeViewController.h */,
1259 1327 D2888DB31E6EC154003A77C8 /* HomeViewController.m */,
1260   - 812E503F1E768181004F5FCD /* LVCLivePlayerController.h */,
1261   - 812E50401E768181004F5FCD /* LVCLivePlayerController.m */,
  1328 + 810B64E11E779AFE00133E15 /* LVCLivePlayerController.h */,
  1329 + 810B64E21E779AFE00133E15 /* LVCLivePlayerController.m */,
1262 1330 );
1263 1331 path = Controller;
1264 1332 sourceTree = "<group>";
... ... @@ -1273,8 +1341,8 @@
1273 1341 D2888DAA1E6EC014003A77C8 /* View */ = {
1274 1342 isa = PBXGroup;
1275 1343 children = (
1276   - 812E503C1E767A8D004F5FCD /* LVCPlayer.h */,
1277   - 812E503D1E767A8D004F5FCD /* LVCPlayer.m */,
  1344 + 810B64DE1E779AE900133E15 /* LVCPlayer.h */,
  1345 + 810B64DF1E779AE900133E15 /* LVCPlayer.m */,
1278 1346 );
1279 1347 path = View;
1280 1348 sourceTree = "<group>";
... ... @@ -1471,12 +1539,12 @@
1471 1539 D2029C9C1E6EADE10027CD92 /* MJPropertyType.m in Sources */,
1472 1540 D22831091E77D8D500627701 /* GiftModel.m in Sources */,
1473 1541 D2029CCD1E6EADE10027CD92 /* SearchModel.m in Sources */,
  1542 + 810B65051E779B1F00133E15 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */,
1474 1543 D2029CCB1E6EADE10027CD92 /* SVRadialGradientLayer.m in Sources */,
1475 1544 D2029CAF1E6EADE10027CD92 /* MJRefreshStateHeader.m in Sources */,
1476 1545 D2029C941E6EADE10027CD92 /* UIRefreshControl+AFNetworking.m in Sources */,
1477 1546 D2029C911E6EADE10027CD92 /* UIButton+AFNetworking.m in Sources */,
1478 1547 D2029C931E6EADE10027CD92 /* UIProgressView+AFNetworking.m in Sources */,
1479   - 812E503E1E767A8D004F5FCD /* LVCPlayer.m in Sources */,
1480 1548 D2029C8D1E6EADE10027CD92 /* AFAutoPurgingImageCache.m in Sources */,
1481 1549 D2029D011E6EAE2E0027CD92 /* UIColor+HexString.m in Sources */,
1482 1550 D2029CA41E6EADE10027CD92 /* MJRefreshComponent.m in Sources */,
... ... @@ -1484,22 +1552,25 @@
1484 1552 D2029CBC1E6EADE10027CD92 /* SDWebImageDownloaderOperation.m in Sources */,
1485 1553 D2029CA51E6EADE10027CD92 /* MJRefreshFooter.m in Sources */,
1486 1554 D22830FC1E77C2D900627701 /* BottomToolView.m in Sources */,
  1555 + 810B65061E779B1F00133E15 /* View+MASAdditions.m in Sources */,
1487 1556 D2029D161E6EB00D0027CD92 /* AppDelegate.m in Sources */,
1488 1557 D2029CB71E6EADE10027CD92 /* NSData+ImageContentType.m in Sources */,
1489 1558 D2029CD01E6EADE10027CD92 /* SearchPresenter.m in Sources */,
1490 1559 D2888DB71E6EC1B8003A77C8 /* LVCMyViewController.m in Sources */,
1491 1560 D2029CBE1E6EADE10027CD92 /* SDWebImagePrefetcher.m in Sources */,
  1561 + 810B65011E779B1F00133E15 /* MASLayoutConstraint.m in Sources */,
1492 1562 D2029CCE1E6EADE10027CD92 /* SearchRecomListModel.m in Sources */,
1493 1563 D2029CA11E6EADE10027CD92 /* NSString+MJExtension.m in Sources */,
1494 1564 D2029BCB1E6EADD70027CD92 /* BaseTableViewCell.m in Sources */,
1495 1565 D2029CAA1E6EADE10027CD92 /* MJRefreshBackGifFooter.m in Sources */,
1496 1566 D2029C9B1E6EADE10027CD92 /* MJPropertyKey.m in Sources */,
1497   - 812E50411E768181004F5FCD /* LVCLivePlayerController.m in Sources */,
1498 1567 D2029CBF1E6EADE10027CD92 /* UIButton+WebCache.m in Sources */,
  1568 + 810B64E31E779AFE00133E15 /* LVCLivePlayerController.m in Sources */,
1499 1569 D2575C7E1E76A4F300E3A8FC /* NHPlaneViews.m in Sources */,
1500 1570 D2029CC51E6EADE10027CD92 /* UIView+WebCacheOperation.m in Sources */,
1501 1571 D2029CAB1E6EADE10027CD92 /* MJRefreshBackNormalFooter.m in Sources */,
1502 1572 D2029C8F1E6EADE10027CD92 /* AFNetworkActivityIndicatorManager.m in Sources */,
  1573 + 810B65031E779B1F00133E15 /* MASViewConstraint.m in Sources */,
1503 1574 D2029BCE1E6EADD70027CD92 /* ZXNavigationController.m in Sources */,
1504 1575 D2029CA21E6EADE10027CD92 /* MJRefreshAutoFooter.m in Sources */,
1505 1576 D2029CC71E6EADE10027CD92 /* SVIndefiniteAnimatedView.m in Sources */,
... ... @@ -1510,9 +1581,11 @@
1510 1581 D2029CC41E6EADE10027CD92 /* UIImageView+WebCache.m in Sources */,
1511 1582 D2029CC81E6EADE10027CD92 /* SVProgressAnimatedView.m in Sources */,
1512 1583 D2029C961E6EADE10027CD92 /* MBProgressHUD.m in Sources */,
  1584 + 810B65071E779B1F00133E15 /* ViewController+MASAdditions.m in Sources */,
1513 1585 D2029C9A1E6EADE10027CD92 /* MJProperty.m in Sources */,
1514 1586 D2029CB91E6EADE10027CD92 /* SDWebImageCompat.m in Sources */,
1515 1587 D2029CB61E6EADE10027CD92 /* MKAnnotationView+WebCache.m in Sources */,
  1588 + 810B64FE1E779B1F00133E15 /* MASCompositeConstraint.m in Sources */,
1516 1589 D2029C981E6EADE10027CD92 /* MJExtensionConst.m in Sources */,
1517 1590 D2575C671E76A25400E3A8FC /* LVCInteractionController.m in Sources */,
1518 1591 D2029CAE1E6EADE10027CD92 /* MJRefreshNormalHeader.m in Sources */,
... ... @@ -1530,6 +1603,7 @@
1530 1603 D2029C8C1E6EADE10027CD92 /* AFURLSessionManager.m in Sources */,
1531 1604 D2029C9F1E6EADE10027CD92 /* NSObject+MJKeyValue.m in Sources */,
1532 1605 D2888DB11E6EC05F003A77C8 /* TempViewController.m in Sources */,
  1606 + 810B65021E779B1F00133E15 /* MASViewAttribute.m in Sources */,
1533 1607 D2029CAC1E6EADE10027CD92 /* MJRefreshBackStateFooter.m in Sources */,
1534 1608 D2029CB11E6EADE10027CD92 /* MJRefreshConst.m in Sources */,
1535 1609 D2029CAD1E6EADE10027CD92 /* MJRefreshGifHeader.m in Sources */,
... ... @@ -1539,6 +1613,7 @@
1539 1613 D2029D091E6EAE2E0027CD92 /* Foundation+Log.m in Sources */,
1540 1614 D2029C8E1E6EADE10027CD92 /* AFImageDownloader.m in Sources */,
1541 1615 D2029BCA1E6EADD70027CD92 /* BaseModel.m in Sources */,
  1616 + 810B65041E779B1F00133E15 /* NSArray+MASAdditions.m in Sources */,
1542 1617 D2029D031E6EAE2E0027CD92 /* UIImage+ZXExtension.m in Sources */,
1543 1618 D2029D0A1E6EAE2E0027CD92 /* ZXServerUrl.m in Sources */,
1544 1619 D2029CCA1E6EADE10027CD92 /* SVProgressHUD.m in Sources */,
... ... @@ -1549,6 +1624,8 @@
1549 1624 D2029D081E6EAE2E0027CD92 /* ZXDeviceInfo.m in Sources */,
1550 1625 D2029CC21E6EADE10027CD92 /* UIImage+WebP.m in Sources */,
1551 1626 D2029BCD1E6EADD70027CD92 /* BaseViewController.m in Sources */,
  1627 + 810B64E01E779AE900133E15 /* LVCPlayer.m in Sources */,
  1628 + 810B64FF1E779B1F00133E15 /* MASConstraint.m in Sources */,
1552 1629 D2029D001E6EAE2E0027CD92 /* NSNumber+ScaleHeight.m in Sources */,
1553 1630 D2888D9E1E6EBF1B003A77C8 /* LVCLiveViewController.m in Sources */,
1554 1631 D2029C951E6EADE10027CD92 /* UIWebView+AFNetworking.m in Sources */,
... ... @@ -1559,6 +1636,7 @@
1559 1636 D2029D061E6EAE2E0027CD92 /* UIView+Extension.m in Sources */,
1560 1637 D2029C9D1E6EADE10027CD92 /* NSObject+MJClass.m in Sources */,
1561 1638 D2029CCF1E6EADE10027CD92 /* SearchHttp.m in Sources */,
  1639 + 810B65001E779B1F00133E15 /* MASConstraintMaker.m in Sources */,
1562 1640 D2029C881E6EADE10027CD92 /* AFNetworkReachabilityManager.m in Sources */,
1563 1641 D2029D021E6EAE2E0027CD92 /* UIImage+ScaleImageSize.m in Sources */,
1564 1642 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
  1 +//
  2 +// MASLayoutConstraint.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 "MASLayoutConstraint.h"
  10 +
  11 +@implementation MASLayoutConstraint
  12 +
  13 +@end
... ...
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 9 #import "LVCLivePlayerController.h"
10 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 19 @property (nonatomic, strong) LVCPlayer *player;
15 20  
16 21 @end
... ... @@ -20,14 +25,151 @@
20 25 - (void)viewDidLoad {
21 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 32 self.view.backgroundColor = [UIColor whiteColor];
24 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 175 #pragma mark -
... ... @@ -35,8 +177,8 @@
35 177 - (LVCPlayer *)player
36 178 {
37 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 183 return _player;
42 184 }
... ...
LiveVideoCloud/LiveVideoCloud/Classes/Sections/homeSections/View/LVCPlayer.h
... ... @@ -8,9 +8,26 @@
8 8  
9 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 24 @interface LVCPlayer : UIView
12 25  
  26 +@property (nonatomic, assign) id<LVCPlayerDelegate> delegate;
  27 +
13 28 @property (nonatomic, strong) UIView *contentView; //所有空间统一管理在这个view中
14 29 @property (nonatomic, strong) UIButton *backBtn; //返回
15 30  
  31 +@property (nonatomic, assign) BOOL isFullScreen; //是否是全屏
  32 +
16 33 @end
... ...
LiveVideoCloud/LiveVideoCloud/Classes/Sections/homeSections/View/LVCPlayer.m
... ... @@ -10,12 +10,13 @@
10 10  
11 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 20 @end
20 21  
21 22 @implementation LVCPlayer
... ... @@ -27,11 +28,13 @@
27 28  
28 29 [self addSubview:self.contentView];
29 30 [self.contentView addSubview:self.bottomBgView];
  31 + [self.contentView addSubview:self.topBgView];
30 32 [self.bottomBgView addSubview:self.playOrPauseBtn];
31   - [self.topBgView addSubview:self.titleLab];
32 33 [self.bottomBgView addSubview:self.fullScreenBtn];
33   - [self.contentView addSubview:self.topBgView];
  34 + [self.topBgView addSubview:self.titleLab];
34 35 [self.topBgView addSubview:self.backBtn];
  36 + [self.contentView addSubview:self.loadingView];
  37 + [self makeSubViewsConstraints];
35 38  
36 39 }
37 40 return self;
... ... @@ -39,17 +42,89 @@
39 42  
40 43 #pragma mark -
41 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 120 #pragma mark -
46 121 #pragma mark - getter
47 122  
48 123 - (UIView *)contentView
49 124 {
50 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 129 return _contentView;
55 130 }
... ... @@ -57,7 +132,7 @@
57 132 - (UIImageView *)topBgView
58 133 {
59 134 if (!_topBgView) {
60   - _topBgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.width, 40)];
  135 + _topBgView = [[UIImageView alloc] init];
61 136 _topBgView.image = [UIImage imageNamed:@"top_shadow"];
62 137 _topBgView.userInteractionEnabled = YES;
63 138 }
... ... @@ -67,7 +142,7 @@
67 142 - (UIImageView *)bottomBgView
68 143 {
69 144 if (!_bottomBgView) {
70   - _bottomBgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, self.height-40, self.width, 40)];
  145 + _bottomBgView = [[UIImageView alloc] init];
71 146 _bottomBgView.image = [UIImage imageNamed:@"bottom_shadow"];
72 147 _bottomBgView.userInteractionEnabled = YES;
73 148 }
... ... @@ -78,9 +153,9 @@
78 153 {
79 154 if (!_playOrPauseBtn) {
80 155 _playOrPauseBtn = [UIButton buttonWithType:UIButtonTypeCustom];
81   - _playOrPauseBtn.frame = CGRectMake(0, 0, 40, 40);
82 156 [_playOrPauseBtn setImage:[UIImage imageNamed:@"pause"] forState:UIControlStateNormal];
83 157 [_playOrPauseBtn setImage:[UIImage imageNamed:@"play"] forState:UIControlStateSelected];
  158 + [_playOrPauseBtn addTarget:self action:@selector(playOrPauseBtnAction:) forControlEvents:UIControlEventTouchUpInside];
84 159 }
85 160 return _playOrPauseBtn;
86 161 }
... ... @@ -88,7 +163,7 @@
88 163 - (UILabel *)titleLab
89 164 {
90 165 if (!_titleLab) {
91   - _titleLab = [[UILabel alloc] initWithFrame:CGRectMake(70, 0, self.width-100, 40)];
  166 + _titleLab = [[UILabel alloc] init];
92 167 _titleLab.textColor = [UIColor whiteColor];
93 168 _titleLab.font = [UIFont systemFontOfSize:15];
94 169 }
... ... @@ -99,9 +174,9 @@
99 174 {
100 175 if (!_fullScreenBtn) {
101 176 _fullScreenBtn = [UIButton buttonWithType:UIButtonTypeCustom];
102   - _fullScreenBtn.frame = CGRectMake(self.width-40, 0, 40, 40);
103 177 [_fullScreenBtn setImage:[UIImage imageNamed:@"fullscreen"] forState:UIControlStateNormal];
104 178 [_fullScreenBtn setImage:[UIImage imageNamed:@"nonfullscreen"] forState:UIControlStateSelected];
  179 + [_fullScreenBtn addTarget:self action:@selector(fullScreenBtnAction:) forControlEvents:UIControlEventTouchUpInside];
105 180 }
106 181 return _fullScreenBtn;
107 182 }
... ... @@ -110,20 +185,22 @@
110 185 {
111 186 if (!_backBtn) {
112 187 _backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
113   - _backBtn.frame = CGRectMake(00, 0, 40, 40);
114 188 [_backBtn setImage:[UIImage imageNamed:@"返回"] forState:UIControlStateNormal];
  189 + [_backBtn addTarget:self action:@selector(backBtnAction:) forControlEvents:UIControlEventTouchUpInside];
115 190 }
116 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 205 // Only override drawRect: if you perform custom drawing.
129 206 // An empty implementation adversely affects performance during animation.
... ...
LiveVideoCloud/LiveVideoCloud/Info.plist
... ... @@ -31,8 +31,6 @@
31 31 <key>UISupportedInterfaceOrientations</key>
32 32 <array>
33 33 <string>UIInterfaceOrientationPortrait</string>
34   - <string>UIInterfaceOrientationLandscapeLeft</string>
35   - <string>UIInterfaceOrientationLandscapeRight</string>
36 34 </array>
37 35 <key>UISupportedInterfaceOrientations~ipad</key>
38 36 <array>
... ...
LiveVideoCloud/LiveVideoCloud/PrefixHeader.pch
... ... @@ -23,6 +23,7 @@
23 23 #import "UIImageView+WebCache.h"
24 24 #import "SVProgressHUD.h"
25 25 #import "AFNetworking.h"
  26 + #import "Masonry.h"
26 27  
27 28 #if TARGET_OS_IPHONE
28 29  
... ...