From 4d7c6109a6164d80b9acbd4726aa3756a12f23eb Mon Sep 17 00:00:00 2001 From: Giuseppe Nucifora Date: Tue, 18 Aug 2015 12:17:26 +0200 Subject: [PATCH] no message --- Example/Podfile.lock | 4 +- .../TabBarPicker/SharedLocationManager.h | 1 + .../TabBarPicker/UIButton+BackgroundColor.h | 1 + .../Private/TabBarPicker/UIImage+Color.h | 1 + Example/Pods/Manifest.lock | 4 +- Example/Pods/Pods.xcodeproj/project.pbxproj | 614 +++++++++--------- .../xcschemes/TabBarPicker.xcscheme | 2 +- .../PureLayout/PureLayout/ALView+PureLayout.h | 84 +-- .../PureLayout/PureLayout/ALView+PureLayout.m | 358 ++-------- .../PureLayout/NSArray+PureLayout.h | 74 ++- .../PureLayout/NSArray+PureLayout.m | 87 ++- .../NSLayoutConstraint+PureLayout.h | 50 +- .../NSLayoutConstraint+PureLayout.m | 290 ++++++++- .../PureLayout/PureLayout+Internal.h | 27 +- .../PureLayout/PureLayout/PureLayout.h | 9 +- .../PureLayout/PureLayout/PureLayoutDefines.h | 38 +- Example/Pods/PureLayout/README.md | 269 +++++--- .../PureLayout/Info.plist | 2 +- .../TabBarPicker/TabBarPicker-umbrella.h | 3 + .../TabBarPicker/TabBarPickerViewController.m | 35 +- Pod/Classes/TabBarItem.h | 17 +- Pod/Classes/TabBarItem.m | 54 +- Pod/Classes/TabBarPicker.m | 119 ++-- Pod/Classes/TabBarPickerSubItemsView.h | 20 +- Pod/Classes/TabBarPickerSubItemsView.m | 130 +++- Pod/Classes/TabBarSubItem.h | 3 +- Pod/Classes/TabBarSubItem.m | 12 +- .../Vendor/MMCPSScrollView/MMCPSScrollView.m | 23 + .../SharedLocationManager.h | 23 + .../SharedLocationManager.m | 78 +++ .../ToucheableScrollView.h | 13 + .../ToucheableScrollView.m | 44 ++ 32 files changed, 1487 insertions(+), 1002 deletions(-) create mode 120000 Example/Pods/Headers/Private/TabBarPicker/SharedLocationManager.h create mode 120000 Example/Pods/Headers/Private/TabBarPicker/UIButton+BackgroundColor.h create mode 120000 Example/Pods/Headers/Private/TabBarPicker/UIImage+Color.h create mode 100755 Pod/Classes/Vendor/SharedLocationManager/SharedLocationManager.h create mode 100755 Pod/Classes/Vendor/SharedLocationManager/SharedLocationManager.m create mode 100755 Pod/Classes/Vendor/TouchableScrollView/ToucheableScrollView.h create mode 100755 Pod/Classes/Vendor/TouchableScrollView/ToucheableScrollView.m diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 2a5c58c..d6951cb 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,6 +1,6 @@ PODS: - pop (1.0.7) - - PureLayout (2.0.6) + - PureLayout (3.0.0) - TabBarPicker (0.1.0) - UIView-Overlay (0.1) @@ -16,7 +16,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: pop: 628ffc631644601567ee8bfaaaea493ebd7d0923 - PureLayout: f25f0bb904d5ccfe6e31da3cb869185259f02e0d + PureLayout: 270dfee2236f697ab1d5e2771c2e5c248495fa0d TabBarPicker: 0b8b0c04ad47ed9c740cef5d31cac7fefe6cb273 UIView-Overlay: 95e42e733f6fdcfca523a399ba7907d0ca4570a0 diff --git a/Example/Pods/Headers/Private/TabBarPicker/SharedLocationManager.h b/Example/Pods/Headers/Private/TabBarPicker/SharedLocationManager.h new file mode 120000 index 0000000..f9e24d4 --- /dev/null +++ b/Example/Pods/Headers/Private/TabBarPicker/SharedLocationManager.h @@ -0,0 +1 @@ +../../../../../Pod/Classes/Vendor/SharedLocationManager/SharedLocationManager.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/TabBarPicker/UIButton+BackgroundColor.h b/Example/Pods/Headers/Private/TabBarPicker/UIButton+BackgroundColor.h new file mode 120000 index 0000000..7ad48d4 --- /dev/null +++ b/Example/Pods/Headers/Private/TabBarPicker/UIButton+BackgroundColor.h @@ -0,0 +1 @@ +../../../../../Pod/Classes/Vendor/UIButton+BackgroundColor/UIButton+BackgroundColor.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/TabBarPicker/UIImage+Color.h b/Example/Pods/Headers/Private/TabBarPicker/UIImage+Color.h new file mode 120000 index 0000000..daaccb5 --- /dev/null +++ b/Example/Pods/Headers/Private/TabBarPicker/UIImage+Color.h @@ -0,0 +1 @@ +../../../../../Pod/Classes/Vendor/UIButton+BackgroundColor/UIImage+Color.h \ No newline at end of file diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 2a5c58c..d6951cb 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,6 +1,6 @@ PODS: - pop (1.0.7) - - PureLayout (2.0.6) + - PureLayout (3.0.0) - TabBarPicker (0.1.0) - UIView-Overlay (0.1) @@ -16,7 +16,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: pop: 628ffc631644601567ee8bfaaaea493ebd7d0923 - PureLayout: f25f0bb904d5ccfe6e31da3cb869185259f02e0d + PureLayout: 270dfee2236f697ab1d5e2771c2e5c248495fa0d TabBarPicker: 0b8b0c04ad47ed9c740cef5d31cac7fefe6cb273 UIView-Overlay: 95e42e733f6fdcfca523a399ba7907d0ca4570a0 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 2c57e0c..a404e00 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -9,11 +9,13 @@ /* Begin PBXBuildFile section */ 03208AEB6A03CCA0C77A5DA3A79BD522 /* POPVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 93687FABCF55D0A5D679C928BA78DAB4 /* POPVector.h */; settings = {ATTRIBUTES = (Project, ); }; }; 060E7DD819F53729654E36495DF47426 /* FloatConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = E44E0425616E7E04E1AB9E751AA6AE53 /* FloatConversion.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 07501B134439D43A603B50365BAB8C36 /* NSString+HexColor.m in Sources */ = {isa = PBXBuildFile; fileRef = ED289C824091E9CC3700069DEB5B7133 /* NSString+HexColor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 0BFE7C394E8150EF5FD76D3675116D48 /* POPBasicAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ADFB66E931B6A5F3701C265EBC50E57 /* POPBasicAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0EAB569A3E1579E852A97E70B2A52B19 /* UIView+Overlay.h in Headers */ = {isa = PBXBuildFile; fileRef = B861FEB396B49AFBE01AC2B10E0ACAB5 /* UIView+Overlay.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0F7B5941BC1A4A320845B9B863551176 /* pop-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 407457717814B9F748F29AC5BADC4CE8 /* pop-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 108E0EDA81BB5E6B0343D317882BE687 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D512E3B6436A1426D782F6DC1DFD3E7D /* Foundation.framework */; }; 11C5B9474617E9D2DB312798E38A2DC9 /* Pods-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 12B38B170D3912EDE7922B720C20619D /* Pods-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 141AA641914936AB790CE6FCB178B1D7 /* MMCPSScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = E74ECC4D12B3ABD32F0D9603ABE541B8 /* MMCPSScrollView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 15EBB865A82DF72209B0E02819463060 /* POPAnimatableProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 0265183A5C6854D378BE13ADD62DF5D0 /* POPAnimatableProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; 15EEB9A75A38BB0F7C3B2448A705AD83 /* UnitBezier.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A5E9FAC402EFB3AA4E84A2D8D436956 /* UnitBezier.h */; settings = {ATTRIBUTES = (Project, ); }; }; 19022D54C183B386CBCC3929AB78ED45 /* POPAnimationRuntime.mm in Sources */ = {isa = PBXBuildFile; fileRef = 79BC08E450E450A6BB7385AAE26BD967 /* POPAnimationRuntime.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -21,79 +23,80 @@ 203E916178B206E4760E275D94B537FA /* POPAnimationRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = FBE55426C8613986F9DE17C08EC4E7CF /* POPAnimationRuntime.h */; settings = {ATTRIBUTES = (Project, ); }; }; 242683D9189D01DB10D327BD4807ADF2 /* POPAnimatorPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EF1BD1588AB81241629165EFEB77F71 /* POPAnimatorPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; 242F2CEE058E9AFB0886BC75D30F5897 /* POPAnimationPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = EF2A7544C3995B3943AA4BC07DAB51D1 /* POPAnimationPrivate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 27612C6A0F69DAD74E0FEB17816B9E15 /* TabBarPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 892712A2B0521F4472AE53DB17FFA5ED /* TabBarPicker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 29B97DBB30EE19D048BEC6E25E9F9F14 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D512E3B6436A1426D782F6DC1DFD3E7D /* Foundation.framework */; }; + 2A65286B5726E4AF0A5395E6B035F614 /* NSString+HexColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5198D727327607E4FCEA3F8B223AE56C /* NSString+HexColor.h */; settings = {ATTRIBUTES = (Public, ); }; }; 2B787FFB562C10AD02FE1C9005365F43 /* NSLayoutConstraint+PureLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 090ED9CFCA52EB517831504E40655C5E /* NSLayoutConstraint+PureLayout.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2E7293FA79CA8E73693C7D7C838206AD /* TabBarSubItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E0DF9726324591447BF3C7A6CC8F6FD /* TabBarSubItem.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2D696A7493C3B7A7DC34C3857719B884 /* SharedLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C4407C962E1D98312FB510D7F5BA8D7 /* SharedLocationManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 30BE2AA9FA254A8A54B20C5D1C439CED /* UIView-Overlay-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 967EC1A8094613A64436935A32CE393E /* UIView-Overlay-dummy.m */; }; 3329AF43344F94C2DD9A49EB23068CE8 /* Pods-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9326A1634F9D8759718BF9F5AE1342E8 /* Pods-dummy.m */; }; 34EC1894BF64A676F556AE2782F2E2A6 /* POPGeometry.mm in Sources */ = {isa = PBXBuildFile; fileRef = C860C342641452046FDF204ED4FB25D3 /* POPGeometry.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3515851F45C9BB3FFDDD122095FF7797 /* Pods-TabBarPicker_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8799FDC6BF3E75DA73CA794715159657 /* Pods-TabBarPicker_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 384CE5874312610CF1414126D6E41435 /* POPAnimationEventInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 16F3CE6BFFF06C74BF585D45BFB7E170 /* POPAnimationEventInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; 38792B4D4276C59B21ACF9B4DE6ED4F5 /* PureLayout+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFA4BCE4B185A782DD016F84B3BE0CF /* PureLayout+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 399306C358953571B5B236714BAC0F0B /* SharedLocationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 69A66B68532816A729F8D7B45A344A3D /* SharedLocationManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3C2F3F5F1497E202882DF7598F703088 /* POPAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6805F6C4A24C2AAAB6A33C0A97652E03 /* POPAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3FC1CA95A408FA5E1A57AC93B0C8A988 /* TabBarItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 74ED984E73B0A43CE00E8EF6E51000BC /* TabBarItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4878C076CDFE4C3EA1F69EA060123C59 /* TabBarItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 989E7B3B998C2F701E914FC9BCEA3C4E /* TabBarItem.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 48D0C42EEA0F59047616F9D4F51FBD10 /* NSArray+PureLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = C37744310F9F865551677E6AC8149112 /* NSArray+PureLayout.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4A629B0B3B3C72CBCC07FC57FEB9FFB5 /* POPSpringAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 91AC81FCA64DB06998A2D6C93292E3D0 /* POPSpringAnimation.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4BD95F156CB439EB08218A9B1BC10F87 /* TransformationMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFA088A284A23B3AC39221F16A6CB0D9 /* TransformationMatrix.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4EBD0FC5A72489379615C5E2E3A9C03D /* Pods-TabBarPicker_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CE46CEDD332B7011600234C346A4003F /* Pods-TabBarPicker_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5408B931355E2EB35B43B6E44EC7075C /* POPAnimator.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B6EE12FEF6DED0AB56B1443E7B346F0 /* POPAnimator.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5894F10E4EE16E60EFEA6CAF8F39BEAC /* TabBarPicker-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B8B993D010B7CF17F9E9291557AF882E /* TabBarPicker-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5D0EB7072D641D8EBF0FF6E2866DAF7B /* POPBasicAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = B51C1620215D22739C0E7668D0FCFA91 /* POPBasicAnimation.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 5E9A8D95ECF3F7371BCEA9B70C879960 /* POPPropertyAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 76962B10AC94EB35A7FEA32B4946FD52 /* POPPropertyAnimation.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 60616CBC5FED53D41E314BD96036FCA0 /* POPAnimationTracerInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = DB1EE7FB0A32127BFDF50BF82107F0F4 /* POPAnimationTracerInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; 610E3F00DD9A11CF2B3AB4ACDF9F2C88 /* ALView+PureLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1993462D9F57783E626EE12A22DA6E /* ALView+PureLayout.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6115D515692E38D8D809451232B83C52 /* TabBarPickerSubItemsView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BDFBF8EAD1D91F7F7C98AE097F6AD54 /* TabBarPickerSubItemsView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 62AF98DE098B6AE453132CE1AA19765E /* POPDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = EB6215B243DFD151285F9B12CE2368A2 /* POPDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6354BF1C514445C33F9B65DD18205535 /* NSArray+PureLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 913E7306AD4E255661D418473382CF54 /* NSArray+PureLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 688F8F6C1B7515A7008E28C8 /* UIButton+BackgroundColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 688F8F681B7515A7008E28C8 /* UIButton+BackgroundColor.h */; }; - 688F8F6D1B7515A7008E28C8 /* UIButton+BackgroundColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 688F8F691B7515A7008E28C8 /* UIButton+BackgroundColor.m */; }; - 688F8F6E1B7515A7008E28C8 /* UIImage+Color.h in Headers */ = {isa = PBXBuildFile; fileRef = 688F8F6A1B7515A7008E28C8 /* UIImage+Color.h */; }; - 688F8F6F1B7515A7008E28C8 /* UIImage+Color.m in Sources */ = {isa = PBXBuildFile; fileRef = 688F8F6B1B7515A7008E28C8 /* UIImage+Color.m */; }; + 688DF0C01B833D0D00FE093C /* ToucheableScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 688DF0BE1B833D0D00FE093C /* ToucheableScrollView.h */; }; + 688DF0C11B833D0D00FE093C /* ToucheableScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 688DF0BF1B833D0D00FE093C /* ToucheableScrollView.m */; }; 6BFFC7205011A11472F6457F6D6B489C /* POPAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 24FD90CF8C651053BFFF6A3EAF117125 /* POPAnimation.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 6C4B81E2699A8266AAB7C85824999897 /* POPSpringAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = A103939D06A87FED0BE43F0CF5F5056A /* POPSpringAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6DBFBBAB5805C21D1665893E655EA4FD /* POPDecayAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 0092F18589478DBE2AE13D966D9CCD17 /* POPDecayAnimationInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6E03012F2843C461762C74A9A046EF2E /* Pods-TabBarPicker_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F734DA62746E7AC7FD2CFE5D80E55708 /* Pods-TabBarPicker_Example-dummy.m */; }; - 6F1FE5900883A92AFA28F808B14E8726 /* TabBarPicker-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AFFA73876E348EE6186525790CF479F1 /* TabBarPicker-dummy.m */; }; 728A5FCB02E1760C95DEA5ED83A2C1C5 /* POPSpringSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = CE0D5C46DAC6E6475ADEE87A8601A25F /* POPSpringSolver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7391D8870EF96C08872561E1821F1085 /* TabBarPickerSubItemsView.h in Headers */ = {isa = PBXBuildFile; fileRef = F7CFC725DB20421AA2759A672603A491 /* TabBarPickerSubItemsView.h */; settings = {ATTRIBUTES = (Public, ); }; }; 73F5A493933876566BFE1C7557D058E0 /* POPCGUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = B7C7853AD5F572083A52914090850AD2 /* POPCGUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; 758F4837B21699E995B3DA7873BE5AB9 /* POPDecayAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F5618A4CE99E55855B1013DEF653BF8 /* POPDecayAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7635805E27D4F352CC4AC4F3E0B2228C /* POPDecayAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = A2FCF37642A72A24ECA53BF3ECE2C522 /* POPDecayAnimation.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7687E83DA7BAC649B3BFB96A702B8EF7 /* POPBasicAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A1099449FD06DCA3B85854337EBB014 /* POPBasicAnimationInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 787808E143D0036BA6D65469240A1653 /* TabBarPickerSubItemsView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCCE418ABC02DF7186BCDA0CE8F42A6E /* TabBarPickerSubItemsView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7997BBF6E3FBC7DF5295ABF7224B89A4 /* POPVector.mm in Sources */ = {isa = PBXBuildFile; fileRef = F47C77B6247FFF4294E595C4EBF035F5 /* POPVector.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7BE5B65C18977D405062ACF22B6EF38C /* POPMath.mm in Sources */ = {isa = PBXBuildFile; fileRef = 18127D4692F3B261AE3BC9F683442BE0 /* POPMath.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7C632502864E8AE6F403AE489B593056 /* POPAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D90E0DD88BBD1478B0E18109767F8FA /* POPAnimationInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7C6672FF5BC14E5A632F38FBCF4D84F6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D512E3B6436A1426D782F6DC1DFD3E7D /* Foundation.framework */; }; 7D895EB8CC992C0E734A1AC7E73F7D41 /* POPAction.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AB9A4F96F4D3194C37C06DB13F00F1E /* POPAction.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7DCA23DE188D729056E041F49C521C1B /* POPLayerExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = DAE0AEB7B6CD1ED86E0DB49046266B5D /* POPLayerExtras.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7DDBA8DBAAFFC333C9196889504A8897 /* MMCPSScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DE7A9BEF575A7AF5C663E711314C1F6 /* MMCPSScrollView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 800AE2604DB4E050529B32FB08E5D2CF /* POPAnimationEvent.mm in Sources */ = {isa = PBXBuildFile; fileRef = 033ADB81C6199DE3DFA0C0515F6D0787 /* POPAnimationEvent.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 85005EF9A1EFBDE7B923C85541044847 /* POPAnimatableProperty.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8C843EFA8C32E452322B0ECA1629290A /* POPAnimatableProperty.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 860781420B1293C292A4A3D52E9F50F0 /* TabBarSubItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A142C2387752EB8F0CBA87864EC1D9F /* TabBarSubItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8684DD0504E7EC38B91A22B510C6A01D /* TabBarPicker-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 904079A84D927539A414BED833C527E3 /* TabBarPicker-dummy.m */; }; 870316C705D226E9990777155D6AC4EC /* POPAnimationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7469EB00631C681CEE752F2D41DAD63C /* POPAnimationEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8B9B75C7523CEBCAF2D86154DDFA98AD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D512E3B6436A1426D782F6DC1DFD3E7D /* Foundation.framework */; }; 8E2CDC7269B59EAC84AEA46D5E28B826 /* POP.h in Headers */ = {isa = PBXBuildFile; fileRef = EE3EC944F1DABE1BFA56ABCC8CE2A9F7 /* POP.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8FB29797E35802BE65A888432368F471 /* PureLayout-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 17DA7E900B1E7945C8B8CE59D225F706 /* PureLayout-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 93B87741D4207E22B2E5DDB582C68829 /* TabBarPicker.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4CD19F38BD35C5439EA45425BF343692 /* TabBarPicker.bundle */; }; 93F5920F69AC785B428577FC0BE0882B /* POPLayerExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 63FCE3E65371359592CB606E1790BC86 /* POPLayerExtras.h */; settings = {ATTRIBUTES = (Public, ); }; }; 95540F361B7B0ADA359C7E7FDD208D1D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D512E3B6436A1426D782F6DC1DFD3E7D /* Foundation.framework */; }; + 96D7ABD08A98128E60E0F50069359FC0 /* TabBarPicker.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4CD19F38BD35C5439EA45425BF343692 /* TabBarPicker.bundle */; }; 987758B8CC9AE1B9722212C159E99125 /* Pods-TabBarPicker_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B2C8FC99E26E968A362BE3183813868F /* Pods-TabBarPicker_Tests-dummy.m */; }; + 9891293FB5D8A4C867C6FE6108C67500 /* UIImage+Color.m in Sources */ = {isa = PBXBuildFile; fileRef = BAC2E2B2AD148D2E4BBC115DDA61EFD5 /* UIImage+Color.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 98DE61629DE81688A6D460FF03DD172A /* PureLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E05779740DB7A4882324BB0CC77FE83 /* PureLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1F2D95F436714051CFE1601C09ACAE9 /* NSString+HexColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 87FF45FA0B37BD605BC79D61F412B4DE /* NSString+HexColor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A1A922D53B283BE53F75515F470D2755 /* TabBarSubItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 6194B637DF6CFA16E42BCABF5348C38B /* TabBarSubItem.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A30219FCF9EC37ABE44DC610005C2595 /* UIView-Overlay-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A6809F9933FBA0B384C97E424F36A254 /* UIView-Overlay-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; A7A6A047CA9F0ADFA09FA3F58E8DA1E3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D512E3B6436A1426D782F6DC1DFD3E7D /* Foundation.framework */; }; - AE6D434ED9230B1D615A2DD259CB6038 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D512E3B6436A1426D782F6DC1DFD3E7D /* Foundation.framework */; }; AEB41D63ACB6BAF7B6DA8EAB5DBFDFEF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D512E3B6436A1426D782F6DC1DFD3E7D /* Foundation.framework */; }; - B020FF612A093F9D08267D37E81E8A10 /* TabBarPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5316CF84EF6CC8F29F5C8F65E47C6EE0 /* TabBarPicker.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; B2E46B8E61B80795CD4E94081F3A51C2 /* POPAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E99C094867FA40E6CAACB3552C51A71 /* POPAnimator.h */; settings = {ATTRIBUTES = (Public, ); }; }; B373D36B22355D41ABB9B75F3EA0BBF2 /* POPCustomAnimation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34D6F57DE4FC243021043F443C43B2E7 /* POPCustomAnimation.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; B4DBAE098AA6F80CDCDFB1BFB6F6A7AE /* POPAnimationExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = C63094D0493DD4114649FBDA3A330311 /* POPAnimationExtras.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B65A29FBEECF62A70B2A981ED1AE3BC9 /* UIButton+BackgroundColor.h in Headers */ = {isa = PBXBuildFile; fileRef = EBE7CFA8B928239B1CC73E2FC274AB17 /* UIButton+BackgroundColor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B807414C5B82738C9AE261FC4BD35633 /* UIButton+BackgroundColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 151D476EC8A8F451EAA5F3E69FC4757F /* UIButton+BackgroundColor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B80B8212180CFDFFDCA9568F41595AE0 /* TabBarSubItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 89F770FF888D56EB719C45BF38EB5479 /* TabBarSubItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BA97F812224F556023C97037E1B9B768 /* TabBarItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ADAE502D9B0B386DFB546F956BC81BA /* TabBarItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; BCFE039CCE625E616A25871D8BB2601D /* UIView+Overlay.m in Sources */ = {isa = PBXBuildFile; fileRef = CBF36C9DEBBB22EE208BC6986E44F18B /* UIView+Overlay.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; BE8FD01BD558BC524643D9691934BCDF /* PureLayout-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 574DA8A9A0215386DE1A03D64F9ABA59 /* PureLayout-dummy.m */; }; C07804D5CAE775845193B0BDEAE8153A /* ALView+PureLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 13DC162AF7BEBCA584CAF9D9CEAD8319 /* ALView+PureLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C83D6A4F894219C63C6ED47E108D3EB3 /* TabBarPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 52CE09C3405F59D40C2BD3971985CF59 /* TabBarPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6B77498010DFE75E70431CBF7896FCC /* NSString+HexColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F188C3F24D664F9CEA0905C2C40C0F2 /* NSString+HexColor.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C3B4357DC8723B40B75036643935EBD7 /* MMCPSScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = C0AB0659065645807D7D24A071F9C843 /* MMCPSScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CBC724E48D4294B56D03568A11D05FF1 /* UIImage+Color.h in Headers */ = {isa = PBXBuildFile; fileRef = 84377DDAEA9C569BF6EBCF717BDE81E7 /* UIImage+Color.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CCBEA17C33C968D4115035DFD75D03C7 /* TabBarItem.m in Sources */ = {isa = PBXBuildFile; fileRef = E1272C77ED4CCB0F280E4DFB2B75B7E1 /* TabBarItem.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D905A57ED65F1E5DFD546AA26BBA6632 /* POPAnimationTracer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C5952D2A0EA0D05DC8D692098AC51A7 /* POPAnimationTracer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF28F428A637429E12D16D55801D4916 /* TabBarPicker-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A39F245747851F74126D6C816A9EF2A /* TabBarPicker-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; E01D81DAECC949E0D350DEF8A8DEF9DA /* POPMath.h in Headers */ = {isa = PBXBuildFile; fileRef = D59AE80D8F830B2B594F27731251395F /* POPMath.h */; settings = {ATTRIBUTES = (Project, ); }; }; E0C2B1971770264E2BC030EBFA522C67 /* POPPropertyAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6474C99DA6F95FB4A031EA234BA3CF12 /* POPPropertyAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; E2B4468A72DF980C1B77E6CC18DC82F5 /* POPAnimationExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4DE3F30E099AB50F0BB210A7F6B6ED1A /* POPAnimationExtras.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -101,65 +104,66 @@ ED5C0B5FD3B73C3015AC56C9E5FACA48 /* TransformationMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C90B76A43FA38EA58794A9C84FD81D /* TransformationMatrix.h */; settings = {ATTRIBUTES = (Project, ); }; }; EDC72938DF5998BBBC017B2FE8B20768 /* POPCustomAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 33A75E30986D83691C56B0833666F7CA /* POPCustomAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; F3A5427CD0560096A6A82144B8B59C70 /* pop-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E9B49BE5CA6EA26F192340AE3F2471BF /* pop-dummy.m */; }; + F6440C1C9D4ADB1F5FE7CB2B1D54E343 /* TabBarPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 848C982AABCEC351952AA25A9E612B3B /* TabBarPicker.h */; settings = {ATTRIBUTES = (Public, ); }; }; F7D70C0E25A8123CCE6495EF0CF7FB85 /* POPSpringAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = C23A73774E96D3E6946E0D8F33A031C8 /* POPSpringAnimationInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; F80CE9A6A3DFE7A013E36693BEE14EAE /* POPGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 61276C8A6D4336801FA57D715D633F8A /* POPGeometry.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F959AAD4573A311BB8F79F1AF6BF166E /* TabBarPickerSubItemsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6682B426E85C9170F1FA5919B0BD809D /* TabBarPickerSubItemsView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F983A03430606378AE8DC27E4BF8436A /* POPPropertyAnimationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A6B4950E1673296D328FFBED288D4CB /* POPPropertyAnimationInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; F9A3864238BEAF7F67E75EF7417D7AF4 /* PureLayoutDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FBC3E333821E19620FAC1463F61C533 /* PureLayoutDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; FA42222184104F516C9AF6AB85A48787 /* POPCGUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = F628DCE86E47F4C94CFDEB115F7A6469 /* POPCGUtils.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FDE2C76578028195B819883E6A76B5B2 /* MMCPSScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A74066159202FC8BA84394854A1116D /* MMCPSScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 21714EBF452DB85A216D38E2672E44B4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = F1D148434467C1B78F92DD483480D390; - remoteInfo = TabBarPicker; - }; - 39095C2F0D844AC1B8E8E286164D6CDD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 3DA374BB5346C86BB9E37D7D8A3F9705; - remoteInfo = pop; - }; - 83FF373FD2C1D0B14B1A0607CDF77E30 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = F1D148434467C1B78F92DD483480D390; - remoteInfo = TabBarPicker; - }; - 9C6221A93B45097747C1A14AAC94A539 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8240A687A12B3496C485DFBEB80E79E2; - remoteInfo = PureLayout; - }; - A345134A6D386FDE4AF4A8F9E01EBD10 /* PBXContainerItemProxy */ = { + 083B093D10F9DF2FDAD39AE5222A2FB2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = 31D04736AA8F72A7EDD28D5A60339B0F; remoteInfo = "UIView-Overlay"; }; - CA4CD391A67ADA84167445460CB86CEE /* PBXContainerItemProxy */ = { + 2422694340FEE734A32BAEADDC2EDAA1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = A3EDD948F9BE0382C98E8FCC6F145936; - remoteInfo = "TabBarPicker-TabBarPicker"; + remoteGlobalIDString = 0B43C8BA292D04592FCAA7AB434DD80C; + remoteInfo = TabBarPicker; }; - CE8A779771949E83F912B98700B02CC3 /* PBXContainerItemProxy */ = { + 4F92234C46EF40937512047DE1C68200 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = 3DA374BB5346C86BB9E37D7D8A3F9705; remoteInfo = pop; }; - DDC22788C49D6AA37AFF4B7A7175DCA8 /* PBXContainerItemProxy */ = { + 54E7978A31596E0942D9395655EB6B6B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8240A687A12B3496C485DFBEB80E79E2; + remoteInfo = PureLayout; + }; + 6DC4045376991B2F4FE77D1CFF871503 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3DA374BB5346C86BB9E37D7D8A3F9705; + remoteInfo = pop; + }; + 718DAA8C463F278C51EFAE2FE4DBB153 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = A3EDD948F9BE0382C98E8FCC6F145936; + remoteInfo = "TabBarPicker-TabBarPicker"; + }; + 9EB5C63E5A8712567D26F5DDF85E9408 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0B43C8BA292D04592FCAA7AB434DD80C; + remoteInfo = TabBarPicker; + }; + F1E65B36CE83A735C24042E5B005DB98 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; @@ -176,18 +180,20 @@ 08BA99EE1EB2BCFFBB80871284FBB089 /* Pods-TabBarPicker_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-TabBarPicker_Tests-acknowledgements.markdown"; sourceTree = ""; }; 090ED9CFCA52EB517831504E40655C5E /* NSLayoutConstraint+PureLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+PureLayout.m"; path = "PureLayout/PureLayout/NSLayoutConstraint+PureLayout.m"; sourceTree = ""; }; 09D0BE9B95DC0AB1A10C5C5CBF007372 /* pop.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = pop.modulemap; sourceTree = ""; }; - 0E0DF9726324591447BF3C7A6CC8F6FD /* TabBarSubItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = TabBarSubItem.m; sourceTree = ""; }; 0FBC3E333821E19620FAC1463F61C533 /* PureLayoutDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PureLayoutDefines.h; path = PureLayout/PureLayout/PureLayoutDefines.h; sourceTree = ""; }; 12B38B170D3912EDE7922B720C20619D /* Pods-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-umbrella.h"; sourceTree = ""; }; 13DC162AF7BEBCA584CAF9D9CEAD8319 /* ALView+PureLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "ALView+PureLayout.h"; path = "PureLayout/PureLayout/ALView+PureLayout.h"; sourceTree = ""; }; + 151D476EC8A8F451EAA5F3E69FC4757F /* UIButton+BackgroundColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIButton+BackgroundColor.m"; sourceTree = ""; }; 16F3CE6BFFF06C74BF585D45BFB7E170 /* POPAnimationEventInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEventInternal.h; path = pop/POPAnimationEventInternal.h; sourceTree = ""; }; 17DA7E900B1E7945C8B8CE59D225F706 /* PureLayout-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PureLayout-umbrella.h"; sourceTree = ""; }; 17F13764CB2CA131B25559F8C59ADD62 /* pop.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = pop.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 18127D4692F3B261AE3BC9F683442BE0 /* POPMath.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPMath.mm; path = pop/POPMath.mm; sourceTree = ""; }; + 1ADAE502D9B0B386DFB546F956BC81BA /* TabBarItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TabBarItem.h; sourceTree = ""; }; 1E99C094867FA40E6CAACB3552C51A71 /* POPAnimator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimator.h; path = pop/POPAnimator.h; sourceTree = ""; }; 1F1993462D9F57783E626EE12A22DA6E /* ALView+PureLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "ALView+PureLayout.m"; path = "PureLayout/PureLayout/ALView+PureLayout.m"; sourceTree = ""; }; 24FD90CF8C651053BFFF6A3EAF117125 /* POPAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimation.mm; path = pop/POPAnimation.mm; sourceTree = ""; }; 2ADFB66E931B6A5F3701C265EBC50E57 /* POPBasicAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPBasicAnimation.h; path = pop/POPBasicAnimation.h; sourceTree = ""; }; + 2BDFBF8EAD1D91F7F7C98AE097F6AD54 /* TabBarPickerSubItemsView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TabBarPickerSubItemsView.h; sourceTree = ""; }; 2D4A93EFD78DA51324BCEB8E21CF837C /* Pods-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-acknowledgements.plist"; sourceTree = ""; }; 2E30818E45DD33C5E4BDFDEE442335F8 /* UIView-Overlay-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIView-Overlay-prefix.pch"; sourceTree = ""; }; 33A75E30986D83691C56B0833666F7CA /* POPCustomAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCustomAnimation.h; path = pop/POPCustomAnimation.h; sourceTree = ""; }; @@ -195,6 +201,7 @@ 34D6F57DE4FC243021043F443C43B2E7 /* POPCustomAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCustomAnimation.mm; path = pop/POPCustomAnimation.mm; sourceTree = ""; }; 3A6B4950E1673296D328FFBED288D4CB /* POPPropertyAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimationInternal.h; path = pop/POPPropertyAnimationInternal.h; sourceTree = ""; }; 3C02A77BF4130FE56E0F02566F747AD2 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.release.xcconfig; sourceTree = ""; }; + 3C16B835C951C428E453293C841C3377 /* TabBarPicker.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TabBarPicker.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3C3F2CC5BA61A83A08179F1B5E6EC8EE /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 3C5952D2A0EA0D05DC8D692098AC51A7 /* POPAnimationTracer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracer.h; path = pop/POPAnimationTracer.h; sourceTree = ""; }; 3D833E7748B3655AA714241999C94DC4 /* Pods_TabBarPicker_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_TabBarPicker_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -204,8 +211,7 @@ 4CD19F38BD35C5439EA45425BF343692 /* TabBarPicker.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TabBarPicker.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 4DE3F30E099AB50F0BB210A7F6B6ED1A /* POPAnimationExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationExtras.mm; path = pop/POPAnimationExtras.mm; sourceTree = ""; }; 4E3A05FFC672571219996826F2422FC3 /* TabBarPicker.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TabBarPicker.xcconfig; sourceTree = ""; }; - 52CE09C3405F59D40C2BD3971985CF59 /* TabBarPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TabBarPicker.h; sourceTree = ""; }; - 5316CF84EF6CC8F29F5C8F65E47C6EE0 /* TabBarPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = TabBarPicker.m; sourceTree = ""; }; + 5198D727327607E4FCEA3F8B223AE56C /* NSString+HexColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSString+HexColor.h"; sourceTree = ""; }; 5400657DC452384B43BD2099AC8BDC49 /* UIView-Overlay.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "UIView-Overlay.modulemap"; sourceTree = ""; }; 56CBBA1282670189371B75E1895ADFC7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56E7469FDD8353F98B7D18192EC48657 /* UIView-Overlay.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "UIView-Overlay.xcconfig"; sourceTree = ""; }; @@ -216,44 +222,43 @@ 5D90E0DD88BBD1478B0E18109767F8FA /* POPAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationInternal.h; path = pop/POPAnimationInternal.h; sourceTree = ""; }; 5E359F9185BEAD84D8CE15A4D0B4B472 /* Pods_TabBarPicker_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_TabBarPicker_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 61276C8A6D4336801FA57D715D633F8A /* POPGeometry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPGeometry.h; path = pop/POPGeometry.h; sourceTree = ""; }; + 6194B637DF6CFA16E42BCABF5348C38B /* TabBarSubItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = TabBarSubItem.m; sourceTree = ""; }; 633EE7D34BF44B52CE606FF762ECFDF4 /* Pods-TabBarPicker_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-TabBarPicker_Example-acknowledgements.markdown"; sourceTree = ""; }; 63FCE3E65371359592CB606E1790BC86 /* POPLayerExtras.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPLayerExtras.h; path = pop/POPLayerExtras.h; sourceTree = ""; }; 6474C99DA6F95FB4A031EA234BA3CF12 /* POPPropertyAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPPropertyAnimation.h; path = pop/POPPropertyAnimation.h; sourceTree = ""; }; + 6682B426E85C9170F1FA5919B0BD809D /* TabBarPickerSubItemsView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = TabBarPickerSubItemsView.m; sourceTree = ""; }; 6805F6C4A24C2AAAB6A33C0A97652E03 /* POPAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimation.h; path = pop/POPAnimation.h; sourceTree = ""; }; - 688F8F681B7515A7008E28C8 /* UIButton+BackgroundColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+BackgroundColor.h"; sourceTree = ""; }; - 688F8F691B7515A7008E28C8 /* UIButton+BackgroundColor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+BackgroundColor.m"; sourceTree = ""; }; - 688F8F6A1B7515A7008E28C8 /* UIImage+Color.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Color.h"; sourceTree = ""; }; - 688F8F6B1B7515A7008E28C8 /* UIImage+Color.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Color.m"; sourceTree = ""; }; - 6A74066159202FC8BA84394854A1116D /* MMCPSScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MMCPSScrollView.h; sourceTree = ""; }; + 688DF0BE1B833D0D00FE093C /* ToucheableScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToucheableScrollView.h; sourceTree = ""; }; + 688DF0BF1B833D0D00FE093C /* ToucheableScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ToucheableScrollView.m; sourceTree = ""; }; + 69A66B68532816A729F8D7B45A344A3D /* SharedLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SharedLocationManager.h; sourceTree = ""; }; + 6C4407C962E1D98312FB510D7F5BA8D7 /* SharedLocationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SharedLocationManager.m; sourceTree = ""; }; 6E05779740DB7A4882324BB0CC77FE83 /* PureLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PureLayout.h; path = PureLayout/PureLayout/PureLayout.h; sourceTree = ""; }; 73CE6B07292175B9D39CBFFC0DB41A60 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 7469EB00631C681CEE752F2D41DAD63C /* POPAnimationEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationEvent.h; path = pop/POPAnimationEvent.h; sourceTree = ""; }; 74C01BE8B9F51803976D94221A90D9B0 /* Pods-TabBarPicker_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TabBarPicker_Example.debug.xcconfig"; sourceTree = ""; }; - 74ED984E73B0A43CE00E8EF6E51000BC /* TabBarItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TabBarItem.h; sourceTree = ""; }; 76962B10AC94EB35A7FEA32B4946FD52 /* POPPropertyAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPPropertyAnimation.mm; path = pop/POPPropertyAnimation.mm; sourceTree = ""; }; 76E4E222A31EB57B3FAE7BD127882279 /* PureLayout-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PureLayout-prefix.pch"; sourceTree = ""; }; 79BC08E450E450A6BB7385AAE26BD967 /* POPAnimationRuntime.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationRuntime.mm; path = pop/POPAnimationRuntime.mm; sourceTree = ""; }; 79ED7F11B8B30282685F622BDF426547 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 7DE7A9BEF575A7AF5C663E711314C1F6 /* MMCPSScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MMCPSScrollView.m; sourceTree = ""; }; 7EC4CA78903DD6994C05A85DCF5F68DA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 84377DDAEA9C569BF6EBCF717BDE81E7 /* UIImage+Color.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIImage+Color.h"; sourceTree = ""; }; 845F67AAF14F34F0F944FCABA8A1C95F /* PureLayout.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PureLayout.xcconfig; sourceTree = ""; }; + 848C982AABCEC351952AA25A9E612B3B /* TabBarPicker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TabBarPicker.h; sourceTree = ""; }; 86E5E9B8FECE12A7A4E167D580EFC67B /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Pods.debug.xcconfig; sourceTree = ""; }; 8799FDC6BF3E75DA73CA794715159657 /* Pods-TabBarPicker_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-TabBarPicker_Tests-umbrella.h"; sourceTree = ""; }; - 87FF45FA0B37BD605BC79D61F412B4DE /* NSString+HexColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSString+HexColor.h"; sourceTree = ""; }; - 8A39F245747851F74126D6C816A9EF2A /* TabBarPicker-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TabBarPicker-umbrella.h"; sourceTree = ""; }; + 892712A2B0521F4472AE53DB17FFA5ED /* TabBarPicker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = TabBarPicker.m; sourceTree = ""; }; + 89F770FF888D56EB719C45BF38EB5479 /* TabBarSubItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TabBarSubItem.h; sourceTree = ""; }; 8AB9A4F96F4D3194C37C06DB13F00F1E /* POPAction.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAction.h; path = pop/POPAction.h; sourceTree = ""; }; 8C843EFA8C32E452322B0ECA1629290A /* POPAnimatableProperty.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimatableProperty.mm; path = pop/POPAnimatableProperty.mm; sourceTree = ""; }; 8DB3F2E1C8B7BF5C0D77433F80F485E1 /* TabBarPicker-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "TabBarPicker-Private.xcconfig"; sourceTree = ""; }; 8ECA1560097ECE6BE55C9A9F8FE9A481 /* Pods-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-resources.sh"; sourceTree = ""; }; - 8F188C3F24D664F9CEA0905C2C40C0F2 /* NSString+HexColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSString+HexColor.m"; sourceTree = ""; }; 8F5618A4CE99E55855B1013DEF653BF8 /* POPDecayAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDecayAnimation.h; path = pop/POPDecayAnimation.h; sourceTree = ""; }; + 904079A84D927539A414BED833C527E3 /* TabBarPicker-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TabBarPicker-dummy.m"; sourceTree = ""; }; 913E7306AD4E255661D418473382CF54 /* NSArray+PureLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+PureLayout.h"; path = "PureLayout/PureLayout/NSArray+PureLayout.h"; sourceTree = ""; }; 91AC81FCA64DB06998A2D6C93292E3D0 /* POPSpringAnimation.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPSpringAnimation.mm; path = pop/POPSpringAnimation.mm; sourceTree = ""; }; 9326A1634F9D8759718BF9F5AE1342E8 /* Pods-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-dummy.m"; sourceTree = ""; }; 93687FABCF55D0A5D679C928BA78DAB4 /* POPVector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPVector.h; path = pop/POPVector.h; sourceTree = ""; }; 967EC1A8094613A64436935A32CE393E /* UIView-Overlay-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIView-Overlay-dummy.m"; sourceTree = ""; }; - 989E7B3B998C2F701E914FC9BCEA3C4E /* TabBarItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = TabBarItem.m; sourceTree = ""; }; - 9A142C2387752EB8F0CBA87864EC1D9F /* TabBarSubItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TabBarSubItem.h; sourceTree = ""; }; 9B6EE12FEF6DED0AB56B1443E7B346F0 /* POPAnimator.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimator.mm; path = pop/POPAnimator.mm; sourceTree = ""; }; 9CD3AB8195F74BFC43D6997F61F6F298 /* NSLayoutConstraint+PureLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+PureLayout.h"; path = "PureLayout/PureLayout/NSLayoutConstraint+PureLayout.h"; sourceTree = ""; }; 9DC406894CD352D5DAFB3D4071DB8955 /* TabBarPicker-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TabBarPicker-prefix.pch"; sourceTree = ""; }; @@ -268,7 +273,6 @@ A6809F9933FBA0B384C97E424F36A254 /* UIView-Overlay-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIView-Overlay-umbrella.h"; sourceTree = ""; }; A959F8AA2353F159B247BFFC208D79AE /* POPAnimationTracer.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPAnimationTracer.mm; path = pop/POPAnimationTracer.mm; sourceTree = ""; }; AB6C4481A0062CA32EB0EEFE44EE97B7 /* Pods-TabBarPicker_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TabBarPicker_Tests-resources.sh"; sourceTree = ""; }; - AFFA73876E348EE6186525790CF479F1 /* TabBarPicker-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TabBarPicker-dummy.m"; sourceTree = ""; }; B272664DCD146C22996C135571D9379B /* Pods-TabBarPicker_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-TabBarPicker_Example-acknowledgements.plist"; sourceTree = ""; }; B2781EC2F90E0368E9A2C0DEAA9E2D8E /* Pods.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Pods.modulemap; sourceTree = ""; }; B2C8FC99E26E968A362BE3183813868F /* Pods-TabBarPicker_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-TabBarPicker_Tests-dummy.m"; sourceTree = ""; }; @@ -277,9 +281,11 @@ B79E8F04B0085DB7B07E18E9E4BF7165 /* Pods-TabBarPicker_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TabBarPicker_Example.release.xcconfig"; sourceTree = ""; }; B7C7853AD5F572083A52914090850AD2 /* POPCGUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPCGUtils.h; path = pop/POPCGUtils.h; sourceTree = ""; }; B861FEB396B49AFBE01AC2B10E0ACAB5 /* UIView+Overlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIView+Overlay.h"; sourceTree = ""; }; + B8B993D010B7CF17F9E9291557AF882E /* TabBarPicker-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TabBarPicker-umbrella.h"; sourceTree = ""; }; BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + BAC2E2B2AD148D2E4BBC115DDA61EFD5 /* UIImage+Color.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Color.m"; sourceTree = ""; }; BB49801C2A1FC4A6C872E30D1EBDF2D3 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - BCCE418ABC02DF7186BCDA0CE8F42A6E /* TabBarPickerSubItemsView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = TabBarPickerSubItemsView.m; sourceTree = ""; }; + C0AB0659065645807D7D24A071F9C843 /* MMCPSScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MMCPSScrollView.h; sourceTree = ""; }; C23A73774E96D3E6946E0D8F33A031C8 /* POPSpringAnimationInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringAnimationInternal.h; path = pop/POPSpringAnimationInternal.h; sourceTree = ""; }; C37744310F9F865551677E6AC8149112 /* NSArray+PureLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+PureLayout.m"; path = "PureLayout/PureLayout/NSArray+PureLayout.m"; sourceTree = ""; }; C3978B4F00206A1AE1010E30F106D1F7 /* UIView-Overlay-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "UIView-Overlay-Private.xcconfig"; sourceTree = ""; }; @@ -288,6 +294,7 @@ C6BAA705428D5D2A736281C39E74E46F /* Pods-TabBarPicker_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TabBarPicker_Example-resources.sh"; sourceTree = ""; }; C860C342641452046FDF204ED4FB25D3 /* POPGeometry.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPGeometry.mm; path = pop/POPGeometry.mm; sourceTree = ""; }; CBF36C9DEBBB22EE208BC6986E44F18B /* UIView+Overlay.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "UIView+Overlay.m"; sourceTree = ""; }; + CC4882E403503DE9288AF3969E260251 /* PureLayout-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "PureLayout-Private.xcconfig"; sourceTree = ""; }; CE0D5C46DAC6E6475ADEE87A8601A25F /* POPSpringSolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPSpringSolver.h; path = pop/POPSpringSolver.h; sourceTree = ""; }; CE46CEDD332B7011600234C346A4003F /* Pods-TabBarPicker_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-TabBarPicker_Example-umbrella.h"; sourceTree = ""; }; CF5420961A10DC2B4F9B46189C6E1001 /* Pods-TabBarPicker_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-TabBarPicker_Tests-acknowledgements.plist"; sourceTree = ""; }; @@ -301,31 +308,24 @@ DAE0AEB7B6CD1ED86E0DB49046266B5D /* POPLayerExtras.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPLayerExtras.mm; path = pop/POPLayerExtras.mm; sourceTree = ""; }; DAFA4BCE4B185A782DD016F84B3BE0CF /* PureLayout+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PureLayout+Internal.h"; path = "PureLayout/PureLayout/PureLayout+Internal.h"; sourceTree = ""; }; DB1EE7FB0A32127BFDF50BF82107F0F4 /* POPAnimationTracerInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationTracerInternal.h; path = pop/POPAnimationTracerInternal.h; sourceTree = ""; }; - DB64D1F778418D691AE66E2A01EAD44E /* PureLayout-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "PureLayout-Private.xcconfig"; sourceTree = ""; }; DEFCECEAD24242A4D391D84B7417A5F0 /* Pods-TabBarPicker_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-TabBarPicker_Tests.modulemap"; sourceTree = ""; }; DFA088A284A23B3AC39221F16A6CB0D9 /* TransformationMatrix.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = TransformationMatrix.cpp; path = pop/WebCore/TransformationMatrix.cpp; sourceTree = ""; }; + E1272C77ED4CCB0F280E4DFB2B75B7E1 /* TabBarItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = TabBarItem.m; sourceTree = ""; }; E44E0425616E7E04E1AB9E751AA6AE53 /* FloatConversion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FloatConversion.h; path = pop/WebCore/FloatConversion.h; sourceTree = ""; }; + E74ECC4D12B3ABD32F0D9603ABE541B8 /* MMCPSScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MMCPSScrollView.m; sourceTree = ""; }; E9B49BE5CA6EA26F192340AE3F2471BF /* pop-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "pop-dummy.m"; sourceTree = ""; }; EB6215B243DFD151285F9B12CE2368A2 /* POPDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPDefines.h; path = pop/POPDefines.h; sourceTree = ""; }; - ECA1326C4D14AEBFBFBBD48CA93B60C2 /* TabBarPicker.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TabBarPicker.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EBE7CFA8B928239B1CC73E2FC274AB17 /* UIButton+BackgroundColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIButton+BackgroundColor.h"; sourceTree = ""; }; + ED289C824091E9CC3700069DEB5B7133 /* NSString+HexColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSString+HexColor.m"; sourceTree = ""; }; EE3EC944F1DABE1BFA56ABCC8CE2A9F7 /* POP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POP.h; path = pop/POP.h; sourceTree = ""; }; EF2A7544C3995B3943AA4BC07DAB51D1 /* POPAnimationPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationPrivate.h; path = pop/POPAnimationPrivate.h; sourceTree = ""; }; F47C77B6247FFF4294E595C4EBF035F5 /* POPVector.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPVector.mm; path = pop/POPVector.mm; sourceTree = ""; }; F628DCE86E47F4C94CFDEB115F7A6469 /* POPCGUtils.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = POPCGUtils.mm; path = pop/POPCGUtils.mm; sourceTree = ""; }; F734DA62746E7AC7FD2CFE5D80E55708 /* Pods-TabBarPicker_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-TabBarPicker_Example-dummy.m"; sourceTree = ""; }; - F7CFC725DB20421AA2759A672603A491 /* TabBarPickerSubItemsView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TabBarPickerSubItemsView.h; sourceTree = ""; }; FBE55426C8613986F9DE17C08EC4E7CF /* POPAnimationRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = POPAnimationRuntime.h; path = pop/POPAnimationRuntime.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 49A164E6EC1A044A459D0E7CD8DA59C1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AE6D434ED9230B1D615A2DD259CB6038 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 8D982826564F33040944F955F4866DBD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -342,6 +342,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AAAAA4342085DEFE61C54EF9A4F0AC88 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8B9B75C7523CEBCAF2D86154DDFA98AD /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AC9EEAC58C6D20FD5C0254472F5D6ABD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -391,24 +399,14 @@ 9FF196DA16906822D150C60295CBB88E /* TabBarPicker.modulemap */, 4E3A05FFC672571219996826F2422FC3 /* TabBarPicker.xcconfig */, 8DB3F2E1C8B7BF5C0D77433F80F485E1 /* TabBarPicker-Private.xcconfig */, - AFFA73876E348EE6186525790CF479F1 /* TabBarPicker-dummy.m */, + 904079A84D927539A414BED833C527E3 /* TabBarPicker-dummy.m */, 9DC406894CD352D5DAFB3D4071DB8955 /* TabBarPicker-prefix.pch */, - 8A39F245747851F74126D6C816A9EF2A /* TabBarPicker-umbrella.h */, + B8B993D010B7CF17F9E9291557AF882E /* TabBarPicker-umbrella.h */, ); name = "Support Files"; path = "Example/Pods/Target Support Files/TabBarPicker"; sourceTree = ""; }; - 053B4D0E654296CC9889A04F89A345BD /* Vendor */ = { - isa = PBXGroup; - children = ( - 977370A91AC8B677022217B6F7096E4E /* MMCPSScrollView */, - FFBEFBD8E8214E18E4714B2658CAC8CB /* NSString+HexColor */, - 688F8F671B7515A7008E28C8 /* UIButton+BackgroundColor */, - ); - path = Vendor; - sourceTree = ""; - }; 0CC341720DA3391596A41DBFC029A2AA /* Pods */ = { isa = PBXGroup; children = ( @@ -454,6 +452,15 @@ path = "UIView-Overlay"; sourceTree = ""; }; + 2B50D3C0ACD825270CCC306CD51D20E7 /* MMCPSScrollView */ = { + isa = PBXGroup; + children = ( + C0AB0659065645807D7D24A071F9C843 /* MMCPSScrollView.h */, + E74ECC4D12B3ABD32F0D9603ABE541B8 /* MMCPSScrollView.m */, + ); + path = MMCPSScrollView; + sourceTree = ""; + }; 367B0AEA5A5B892E97114FB4088CA6CA /* Support Files */ = { isa = PBXGroup; children = ( @@ -495,15 +502,25 @@ path = "Target Support Files/Pods-TabBarPicker_Example"; sourceTree = ""; }; - 688F8F671B7515A7008E28C8 /* UIButton+BackgroundColor */ = { + 688DF0BD1B833D0D00FE093C /* TouchableScrollView */ = { isa = PBXGroup; children = ( - 688F8F681B7515A7008E28C8 /* UIButton+BackgroundColor.h */, - 688F8F691B7515A7008E28C8 /* UIButton+BackgroundColor.m */, - 688F8F6A1B7515A7008E28C8 /* UIImage+Color.h */, - 688F8F6B1B7515A7008E28C8 /* UIImage+Color.m */, + 688DF0BE1B833D0D00FE093C /* ToucheableScrollView.h */, + 688DF0BF1B833D0D00FE093C /* ToucheableScrollView.m */, ); - path = "UIButton+BackgroundColor"; + path = TouchableScrollView; + sourceTree = ""; + }; + 6F07576C2E19EA1A65B4E924DB9FD5C7 /* Vendor */ = { + isa = PBXGroup; + children = ( + 688DF0BD1B833D0D00FE093C /* TouchableScrollView */, + 2B50D3C0ACD825270CCC306CD51D20E7 /* MMCPSScrollView */, + D32A21F857D4479FF01EE37CF833E9CD /* NSString+HexColor */, + 8AE381098F77067F0AD825096898C950 /* SharedLocationManager */, + C5E5D49215D38A6AA1E588A6676237A7 /* UIButton+BackgroundColor */, + ); + path = Vendor; sourceTree = ""; }; 7DB346D0F39D3F0E887471402A8071AB = { @@ -518,20 +535,13 @@ ); sourceTree = ""; }; - 7F35927A828371685E9A0F8F706AFB47 /* Classes */ = { + 8AE381098F77067F0AD825096898C950 /* SharedLocationManager */ = { isa = PBXGroup; children = ( - 74ED984E73B0A43CE00E8EF6E51000BC /* TabBarItem.h */, - 989E7B3B998C2F701E914FC9BCEA3C4E /* TabBarItem.m */, - 52CE09C3405F59D40C2BD3971985CF59 /* TabBarPicker.h */, - 5316CF84EF6CC8F29F5C8F65E47C6EE0 /* TabBarPicker.m */, - F7CFC725DB20421AA2759A672603A491 /* TabBarPickerSubItemsView.h */, - BCCE418ABC02DF7186BCDA0CE8F42A6E /* TabBarPickerSubItemsView.m */, - 9A142C2387752EB8F0CBA87864EC1D9F /* TabBarSubItem.h */, - 0E0DF9726324591447BF3C7A6CC8F6FD /* TabBarSubItem.m */, - 053B4D0E654296CC9889A04F89A345BD /* Vendor */, + 69A66B68532816A729F8D7B45A344A3D /* SharedLocationManager.h */, + 6C4407C962E1D98312FB510D7F5BA8D7 /* SharedLocationManager.m */, ); - path = Classes; + path = SharedLocationManager; sourceTree = ""; }; 8E3BA7AF84CB1FD13CBE41AD45E2F68D /* Support Files */ = { @@ -540,7 +550,7 @@ 56CBBA1282670189371B75E1895ADFC7 /* Info.plist */, 4479B35E973BC64612AFE56A67C3A7E4 /* PureLayout.modulemap */, 845F67AAF14F34F0F944FCABA8A1C95F /* PureLayout.xcconfig */, - DB64D1F778418D691AE66E2A01EAD44E /* PureLayout-Private.xcconfig */, + CC4882E403503DE9288AF3969E260251 /* PureLayout-Private.xcconfig */, 574DA8A9A0215386DE1A03D64F9ABA59 /* PureLayout-dummy.m */, 76E4E222A31EB57B3FAE7BD127882279 /* PureLayout-prefix.pch */, 17DA7E900B1E7945C8B8CE59D225F706 /* PureLayout-umbrella.h */, @@ -549,13 +559,20 @@ path = "../Target Support Files/PureLayout"; sourceTree = ""; }; - 977370A91AC8B677022217B6F7096E4E /* MMCPSScrollView */ = { + 9AC469C3421DF2E3B1A8A25A16BEAFB4 /* Classes */ = { isa = PBXGroup; children = ( - 6A74066159202FC8BA84394854A1116D /* MMCPSScrollView.h */, - 7DE7A9BEF575A7AF5C663E711314C1F6 /* MMCPSScrollView.m */, + 1ADAE502D9B0B386DFB546F956BC81BA /* TabBarItem.h */, + E1272C77ED4CCB0F280E4DFB2B75B7E1 /* TabBarItem.m */, + 848C982AABCEC351952AA25A9E612B3B /* TabBarPicker.h */, + 892712A2B0521F4472AE53DB17FFA5ED /* TabBarPicker.m */, + 2BDFBF8EAD1D91F7F7C98AE097F6AD54 /* TabBarPickerSubItemsView.h */, + 6682B426E85C9170F1FA5919B0BD809D /* TabBarPickerSubItemsView.m */, + 89F770FF888D56EB719C45BF38EB5479 /* TabBarSubItem.h */, + 6194B637DF6CFA16E42BCABF5348C38B /* TabBarSubItem.m */, + 6F07576C2E19EA1A65B4E924DB9FD5C7 /* Vendor */, ); - path = MMCPSScrollView; + path = Classes; sourceTree = ""; }; A2C47666731599FCB6D3E3CC764B23F3 /* PureLayout */ = { @@ -678,6 +695,17 @@ path = "Target Support Files/Pods-TabBarPicker_Tests"; sourceTree = ""; }; + C5E5D49215D38A6AA1E588A6676237A7 /* UIButton+BackgroundColor */ = { + isa = PBXGroup; + children = ( + EBE7CFA8B928239B1CC73E2FC274AB17 /* UIButton+BackgroundColor.h */, + 151D476EC8A8F451EAA5F3E69FC4757F /* UIButton+BackgroundColor.m */, + 84377DDAEA9C569BF6EBCF717BDE81E7 /* UIImage+Color.h */, + BAC2E2B2AD148D2E4BBC115DDA61EFD5 /* UIImage+Color.m */, + ); + path = "UIButton+BackgroundColor"; + sourceTree = ""; + }; CCA510CFBEA2D207524CDA0D73C3B561 /* Products */ = { isa = PBXGroup; children = ( @@ -686,13 +714,22 @@ 3D833E7748B3655AA714241999C94DC4 /* Pods_TabBarPicker_Tests.framework */, 34BE0BA12096455AB6760CFDF1005D58 /* PureLayout.framework */, 4CD19F38BD35C5439EA45425BF343692 /* TabBarPicker.bundle */, - ECA1326C4D14AEBFBFBBD48CA93B60C2 /* TabBarPicker.framework */, + 3C16B835C951C428E453293C841C3377 /* TabBarPicker.framework */, A08C793E1F109494ED9A12FB0A0E9469 /* UIView_Overlay.framework */, 17F13764CB2CA131B25559F8C59ADD62 /* pop.framework */, ); name = Products; sourceTree = ""; }; + D32A21F857D4479FF01EE37CF833E9CD /* NSString+HexColor */ = { + isa = PBXGroup; + children = ( + 5198D727327607E4FCEA3F8B223AE56C /* NSString+HexColor.h */, + ED289C824091E9CC3700069DEB5B7133 /* NSString+HexColor.m */, + ); + path = "NSString+HexColor"; + sourceTree = ""; + }; DB7A392AE20A92DE460668D10ACDC19F /* Pods */ = { isa = PBXGroup; children = ( @@ -714,39 +751,14 @@ F8F2526D81FAB6C81731BCF9D9B94F11 /* Pod */ = { isa = PBXGroup; children = ( - 7F35927A828371685E9A0F8F706AFB47 /* Classes */, + 9AC469C3421DF2E3B1A8A25A16BEAFB4 /* Classes */, ); path = Pod; sourceTree = ""; }; - FFBEFBD8E8214E18E4714B2658CAC8CB /* NSString+HexColor */ = { - isa = PBXGroup; - children = ( - 87FF45FA0B37BD605BC79D61F412B4DE /* NSString+HexColor.h */, - 8F188C3F24D664F9CEA0905C2C40C0F2 /* NSString+HexColor.m */, - ); - path = "NSString+HexColor"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 02B67A76CB09FB21493A0D4C8E7EBE41 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - FDE2C76578028195B819883E6A76B5B2 /* MMCPSScrollView.h in Headers */, - A1F2D95F436714051CFE1601C09ACAE9 /* NSString+HexColor.h in Headers */, - 3FC1CA95A408FA5E1A57AC93B0C8A988 /* TabBarItem.h in Headers */, - DF28F428A637429E12D16D55801D4916 /* TabBarPicker-umbrella.h in Headers */, - 688F8F6C1B7515A7008E28C8 /* UIButton+BackgroundColor.h in Headers */, - C83D6A4F894219C63C6ED47E108D3EB3 /* TabBarPicker.h in Headers */, - 688F8F6E1B7515A7008E28C8 /* UIImage+Color.h in Headers */, - 7391D8870EF96C08872561E1821F1085 /* TabBarPickerSubItemsView.h in Headers */, - 860781420B1293C292A4A3D52E9F50F0 /* TabBarSubItem.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 7E48A959C6852B35F3EB10C01C5C0188 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -804,6 +816,24 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D00A1DFA85EA261569DB5E74C27FD88A /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + C3B4357DC8723B40B75036643935EBD7 /* MMCPSScrollView.h in Headers */, + 688DF0C01B833D0D00FE093C /* ToucheableScrollView.h in Headers */, + 2A65286B5726E4AF0A5395E6B035F614 /* NSString+HexColor.h in Headers */, + 399306C358953571B5B236714BAC0F0B /* SharedLocationManager.h in Headers */, + BA97F812224F556023C97037E1B9B768 /* TabBarItem.h in Headers */, + 5894F10E4EE16E60EFEA6CAF8F39BEAC /* TabBarPicker-umbrella.h in Headers */, + F6440C1C9D4ADB1F5FE7CB2B1D54E343 /* TabBarPicker.h in Headers */, + 6115D515692E38D8D809451232B83C52 /* TabBarPickerSubItemsView.h in Headers */, + B80B8212180CFDFFDCA9568F41595AE0 /* TabBarSubItem.h in Headers */, + B65A29FBEECF62A70B2A981ED1AE3BC9 /* UIButton+BackgroundColor.h in Headers */, + CBC724E48D4294B56D03568A11D05FF1 /* UIImage+Color.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; D6A8EB0B19838A8E6F05524B3A33BF15 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -849,16 +879,35 @@ buildRules = ( ); dependencies = ( - 263F085CC5D8A00D39FC39FF4FDE846B /* PBXTargetDependency */, - 556AFBD628162756239A7A3C81EAF400 /* PBXTargetDependency */, - BC58D711EAA1035DD7B4043385568300 /* PBXTargetDependency */, - D20626EC1B98DD9FB0F4E57895207498 /* PBXTargetDependency */, + 1E6DB4ADD8E4F56131BF9CAB4F13D6BF /* PBXTargetDependency */, + 53E7F8729FC986EE540050643AD0E415 /* PBXTargetDependency */, + E124F360BE28DC21A6F1DD0F2AF89D2F /* PBXTargetDependency */, + 2D2FEF8E39272D422784ABBE1FFEDF86 /* PBXTargetDependency */, ); name = "Pods-TabBarPicker_Example"; productName = "Pods-TabBarPicker_Example"; productReference = 5E359F9185BEAD84D8CE15A4D0B4B472 /* Pods_TabBarPicker_Example.framework */; productType = "com.apple.product-type.framework"; }; + 0B43C8BA292D04592FCAA7AB434DD80C /* TabBarPicker */ = { + isa = PBXNativeTarget; + buildConfigurationList = EA9B566CC07BD9C0890426A19B907D94 /* Build configuration list for PBXNativeTarget "TabBarPicker" */; + buildPhases = ( + C271834FA45F83107B54D32A95DCB323 /* Sources */, + AAAAA4342085DEFE61C54EF9A4F0AC88 /* Frameworks */, + DA9C3525A98CC766A7329A89399C38FC /* Resources */, + D00A1DFA85EA261569DB5E74C27FD88A /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 4ACBE616CF3D2242EFDF2DF55B55BF5C /* PBXTargetDependency */, + ); + name = TabBarPicker; + productName = TabBarPicker; + productReference = 3C16B835C951C428E453293C841C3377 /* TabBarPicker.framework */; + productType = "com.apple.product-type.framework"; + }; 31D04736AA8F72A7EDD28D5A60339B0F /* UIView-Overlay */ = { isa = PBXNativeTarget; buildConfigurationList = 24BE35686B3092A5E39AB603AB9548D8 /* Build configuration list for PBXNativeTarget "UIView-Overlay" */; @@ -887,7 +936,7 @@ buildRules = ( ); dependencies = ( - D353DC8A1B3A57D87730ABC8C5045347 /* PBXTargetDependency */, + 4C87918BA58D1D2EC71689576920C36D /* PBXTargetDependency */, ); name = "Pods-TabBarPicker_Tests"; productName = "Pods-TabBarPicker_Tests"; @@ -945,25 +994,6 @@ productReference = 4CD19F38BD35C5439EA45425BF343692 /* TabBarPicker.bundle */; productType = "com.apple.product-type.bundle"; }; - F1D148434467C1B78F92DD483480D390 /* TabBarPicker */ = { - isa = PBXNativeTarget; - buildConfigurationList = E2A3F482B92B850797D51004F0CAA8E1 /* Build configuration list for PBXNativeTarget "TabBarPicker" */; - buildPhases = ( - 78872F90B87B97BA37967B24DDA2A728 /* Sources */, - 49A164E6EC1A044A459D0E7CD8DA59C1 /* Frameworks */, - 8A64F6AD39E28FECB63367033055C3DB /* Resources */, - 02B67A76CB09FB21493A0D4C8E7EBE41 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - 7A50392FF78A36CA0C15F6A53BA3169D /* PBXTargetDependency */, - ); - name = TabBarPicker; - productName = TabBarPicker; - productReference = ECA1326C4D14AEBFBFBBD48CA93B60C2 /* TabBarPicker.framework */; - productType = "com.apple.product-type.framework"; - }; FFB59F3179C8BDA9D0F4229CBA2D227B /* Pods */ = { isa = PBXNativeTarget; buildConfigurationList = B406DCC2604A6093F81FC863CD22CF3F /* Build configuration list for PBXNativeTarget "Pods" */; @@ -975,8 +1005,8 @@ buildRules = ( ); dependencies = ( - 9B78FF26A80DD918CE5742D80BB2C8F1 /* PBXTargetDependency */, - 53E7C4F4F479EFEBB2A85A246A5ECCC0 /* PBXTargetDependency */, + 94F9B9912FD5C449AF656F780E2958DD /* PBXTargetDependency */, + 78739E10EACFB20BE6EF8078A3D971B6 /* PBXTargetDependency */, ); name = Pods; productName = Pods; @@ -1008,7 +1038,7 @@ 02B85A901C978E0651A76D08AD317C82 /* Pods-TabBarPicker_Example */, 32560F18B1ECECAEDFCE9D7F91247BDF /* Pods-TabBarPicker_Tests */, 8240A687A12B3496C485DFBEB80E79E2 /* PureLayout */, - F1D148434467C1B78F92DD483480D390 /* TabBarPicker */, + 0B43C8BA292D04592FCAA7AB434DD80C /* TabBarPicker */, A3EDD948F9BE0382C98E8FCC6F145936 /* TabBarPicker-TabBarPicker */, 31D04736AA8F72A7EDD28D5A60339B0F /* UIView-Overlay */, 3DA374BB5346C86BB9E37D7D8A3F9705 /* pop */, @@ -1017,14 +1047,6 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 8A64F6AD39E28FECB63367033055C3DB /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 93B87741D4207E22B2E5DDB582C68829 /* TabBarPicker.bundle in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; BAE690F24B9F8B27A81D68DD3BE79823 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1032,6 +1054,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + DA9C3525A98CC766A7329A89399C38FC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 96D7ABD08A98128E60E0F50069359FC0 /* TabBarPicker.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -1093,22 +1123,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 78872F90B87B97BA37967B24DDA2A728 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7DDBA8DBAAFFC333C9196889504A8897 /* MMCPSScrollView.m in Sources */, - 688F8F6D1B7515A7008E28C8 /* UIButton+BackgroundColor.m in Sources */, - D6B77498010DFE75E70431CBF7896FCC /* NSString+HexColor.m in Sources */, - 4878C076CDFE4C3EA1F69EA060123C59 /* TabBarItem.m in Sources */, - 6F1FE5900883A92AFA28F808B14E8726 /* TabBarPicker-dummy.m in Sources */, - B020FF612A093F9D08267D37E81E8A10 /* TabBarPicker.m in Sources */, - 688F8F6F1B7515A7008E28C8 /* UIImage+Color.m in Sources */, - 787808E143D0036BA6D65469240A1653 /* TabBarPickerSubItemsView.m in Sources */, - 2E7293FA79CA8E73693C7D7C838206AD /* TabBarSubItem.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; C174BA4E26F85DF204DC43D6E023477E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1117,6 +1131,24 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + C271834FA45F83107B54D32A95DCB323 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 141AA641914936AB790CE6FCB178B1D7 /* MMCPSScrollView.m in Sources */, + 07501B134439D43A603B50365BAB8C36 /* NSString+HexColor.m in Sources */, + 2D696A7493C3B7A7DC34C3857719B884 /* SharedLocationManager.m in Sources */, + CCBEA17C33C968D4115035DFD75D03C7 /* TabBarItem.m in Sources */, + 688DF0C11B833D0D00FE093C /* ToucheableScrollView.m in Sources */, + 8684DD0504E7EC38B91A22B510C6A01D /* TabBarPicker-dummy.m in Sources */, + 27612C6A0F69DAD74E0FEB17816B9E15 /* TabBarPicker.m in Sources */, + F959AAD4573A311BB8F79F1AF6BF166E /* TabBarPickerSubItemsView.m in Sources */, + A1A922D53B283BE53F75515F470D2755 /* TabBarSubItem.m in Sources */, + B807414C5B82738C9AE261FC4BD35633 /* UIButton+BackgroundColor.m in Sources */, + 9891293FB5D8A4C867C6FE6108C67500 /* UIImage+Color.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; F81A6CC9F7C1459BB6E1B159EB93EB03 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1131,57 +1163,84 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 263F085CC5D8A00D39FC39FF4FDE846B /* PBXTargetDependency */ = { + 1E6DB4ADD8E4F56131BF9CAB4F13D6BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = PureLayout; target = 8240A687A12B3496C485DFBEB80E79E2 /* PureLayout */; - targetProxy = 9C6221A93B45097747C1A14AAC94A539 /* PBXContainerItemProxy */; + targetProxy = F1E65B36CE83A735C24042E5B005DB98 /* PBXContainerItemProxy */; }; - 53E7C4F4F479EFEBB2A85A246A5ECCC0 /* PBXTargetDependency */ = { + 2D2FEF8E39272D422784ABBE1FFEDF86 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = pop; target = 3DA374BB5346C86BB9E37D7D8A3F9705 /* pop */; - targetProxy = 39095C2F0D844AC1B8E8E286164D6CDD /* PBXContainerItemProxy */; + targetProxy = 6DC4045376991B2F4FE77D1CFF871503 /* PBXContainerItemProxy */; }; - 556AFBD628162756239A7A3C81EAF400 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = TabBarPicker; - target = F1D148434467C1B78F92DD483480D390 /* TabBarPicker */; - targetProxy = 21714EBF452DB85A216D38E2672E44B4 /* PBXContainerItemProxy */; - }; - 7A50392FF78A36CA0C15F6A53BA3169D /* PBXTargetDependency */ = { + 4ACBE616CF3D2242EFDF2DF55B55BF5C /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "TabBarPicker-TabBarPicker"; target = A3EDD948F9BE0382C98E8FCC6F145936 /* TabBarPicker-TabBarPicker */; - targetProxy = CA4CD391A67ADA84167445460CB86CEE /* PBXContainerItemProxy */; + targetProxy = 718DAA8C463F278C51EFAE2FE4DBB153 /* PBXContainerItemProxy */; }; - 9B78FF26A80DD918CE5742D80BB2C8F1 /* PBXTargetDependency */ = { + 4C87918BA58D1D2EC71689576920C36D /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = PureLayout; - target = 8240A687A12B3496C485DFBEB80E79E2 /* PureLayout */; - targetProxy = DDC22788C49D6AA37AFF4B7A7175DCA8 /* PBXContainerItemProxy */; + name = TabBarPicker; + target = 0B43C8BA292D04592FCAA7AB434DD80C /* TabBarPicker */; + targetProxy = 2422694340FEE734A32BAEADDC2EDAA1 /* PBXContainerItemProxy */; }; - BC58D711EAA1035DD7B4043385568300 /* PBXTargetDependency */ = { + 53E7F8729FC986EE540050643AD0E415 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "UIView-Overlay"; - target = 31D04736AA8F72A7EDD28D5A60339B0F /* UIView-Overlay */; - targetProxy = A345134A6D386FDE4AF4A8F9E01EBD10 /* PBXContainerItemProxy */; + name = TabBarPicker; + target = 0B43C8BA292D04592FCAA7AB434DD80C /* TabBarPicker */; + targetProxy = 9EB5C63E5A8712567D26F5DDF85E9408 /* PBXContainerItemProxy */; }; - D20626EC1B98DD9FB0F4E57895207498 /* PBXTargetDependency */ = { + 78739E10EACFB20BE6EF8078A3D971B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = pop; target = 3DA374BB5346C86BB9E37D7D8A3F9705 /* pop */; - targetProxy = CE8A779771949E83F912B98700B02CC3 /* PBXContainerItemProxy */; + targetProxy = 4F92234C46EF40937512047DE1C68200 /* PBXContainerItemProxy */; }; - D353DC8A1B3A57D87730ABC8C5045347 /* PBXTargetDependency */ = { + 94F9B9912FD5C449AF656F780E2958DD /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = TabBarPicker; - target = F1D148434467C1B78F92DD483480D390 /* TabBarPicker */; - targetProxy = 83FF373FD2C1D0B14B1A0607CDF77E30 /* PBXContainerItemProxy */; + name = PureLayout; + target = 8240A687A12B3496C485DFBEB80E79E2 /* PureLayout */; + targetProxy = 54E7978A31596E0942D9395655EB6B6B /* PBXContainerItemProxy */; + }; + E124F360BE28DC21A6F1DD0F2AF89D2F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "UIView-Overlay"; + target = 31D04736AA8F72A7EDD28D5A60339B0F /* UIView-Overlay */; + targetProxy = 083B093D10F9DF2FDAD39AE5222A2FB2 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ + 13E6E78F0B8C8788746F00FCD7A371A3 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8DB3F2E1C8B7BF5C0D77433F80F485E1 /* TabBarPicker-Private.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 0.1.0; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0.1.0; + DYLIB_CURRENT_VERSION = "$(CURRENT_PROJECT_VERSION)"; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/TabBarPicker/TabBarPicker-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/TabBarPicker/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/TabBarPicker/TabBarPicker.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = TabBarPicker; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 2066CCDBDB87AD21E4D2D89AC51217E8 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 3C02A77BF4130FE56E0F02566F747AD2 /* Pods.release.xcconfig */; @@ -1252,25 +1311,25 @@ }; name = Debug; }; - 35828C8A7F9216B42DE47E2CB3635497 /* Release */ = { + 4B0B1BF0388DEA06DE8DF1B21F4B00AB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8DB3F2E1C8B7BF5C0D77433F80F485E1 /* TabBarPicker-Private.xcconfig */; + baseConfigurationReference = CC4882E403503DE9288AF3969E260251 /* PureLayout-Private.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 0.1.0; + CURRENT_PROJECT_VERSION = 3.0.0; DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 0.1.0; + DYLIB_COMPATIBILITY_VERSION = 3; DYLIB_CURRENT_VERSION = "$(CURRENT_PROJECT_VERSION)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/TabBarPicker/TabBarPicker-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/TabBarPicker/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/PureLayout/PureLayout-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/PureLayout/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/TabBarPicker/TabBarPicker.modulemap"; + MODULEMAP_FILE = "Target Support Files/PureLayout/PureLayout.modulemap"; MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = TabBarPicker; + PRODUCT_NAME = PureLayout; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1337,33 +1396,6 @@ }; name = Debug; }; - 6BB8C8F248F889CF0F50B1CEE04505D3 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8DB3F2E1C8B7BF5C0D77433F80F485E1 /* TabBarPicker-Private.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 0.1.0; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 0.1.0; - DYLIB_CURRENT_VERSION = "$(CURRENT_PROJECT_VERSION)"; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/TabBarPicker/TabBarPicker-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/TabBarPicker/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/TabBarPicker/TabBarPicker.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = TabBarPicker; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; 741C768B9D20203171F89E904F8DBA84 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = D2D43A5A2C5C748416BA1C566EEC2930 /* pop-Private.xcconfig */; @@ -1445,33 +1477,6 @@ }; name = Release; }; - A6561B358E01BFF5FB5CA58D277CEB4B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DB64D1F778418D691AE66E2A01EAD44E /* PureLayout-Private.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 2.0.6; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 2; - DYLIB_CURRENT_VERSION = "$(CURRENT_PROJECT_VERSION)"; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/PureLayout/PureLayout-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/PureLayout/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/PureLayout/PureLayout.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = PureLayout; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; A70CDAD61F90AC503C7D04CC22DA2923 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1540,14 +1545,14 @@ }; name = Release; }; - D2508CF669B09E50DB3CA24B7DF1C4AA /* Debug */ = { + DB5C373F43D2E2027D3302E3EB9783D7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DB64D1F778418D691AE66E2A01EAD44E /* PureLayout-Private.xcconfig */; + baseConfigurationReference = CC4882E403503DE9288AF3969E260251 /* PureLayout-Private.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 2.0.6; + CURRENT_PROJECT_VERSION = 3.0.0; DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 2; + DYLIB_COMPATIBILITY_VERSION = 3; DYLIB_CURRENT_VERSION = "$(CURRENT_PROJECT_VERSION)"; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -1567,6 +1572,33 @@ }; name = Debug; }; + E2350BC1B3EDD0429A21A55B90AFEEEB /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8DB3F2E1C8B7BF5C0D77433F80F485E1 /* TabBarPicker-Private.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 0.1.0; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 0.1.0; + DYLIB_CURRENT_VERSION = "$(CURRENT_PROJECT_VERSION)"; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/TabBarPicker/TabBarPicker-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/TabBarPicker/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/TabBarPicker/TabBarPicker.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = TabBarPicker; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; EAC45E7C968E7C99C6DDDCA7118C6046 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 8DB3F2E1C8B7BF5C0D77433F80F485E1 /* TabBarPicker-Private.xcconfig */; @@ -1684,8 +1716,8 @@ 29946541803109559D5B69F86E5F2398 /* Build configuration list for PBXNativeTarget "PureLayout" */ = { isa = XCConfigurationList; buildConfigurations = ( - D2508CF669B09E50DB3CA24B7DF1C4AA /* Debug */, - A6561B358E01BFF5FB5CA58D277CEB4B /* Release */, + DB5C373F43D2E2027D3302E3EB9783D7 /* Debug */, + 4B0B1BF0388DEA06DE8DF1B21F4B00AB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1744,11 +1776,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E2A3F482B92B850797D51004F0CAA8E1 /* Build configuration list for PBXNativeTarget "TabBarPicker" */ = { + EA9B566CC07BD9C0890426A19B907D94 /* Build configuration list for PBXNativeTarget "TabBarPicker" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6BB8C8F248F889CF0F50B1CEE04505D3 /* Debug */, - 35828C8A7F9216B42DE47E2CB3635497 /* Release */, + E2350BC1B3EDD0429A21A55B90AFEEEB /* Debug */, + 13E6E78F0B8C8788746F00FCD7A371A3 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/TabBarPicker.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/TabBarPicker.xcscheme index 3954c7b..d5d9234 100644 --- a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/TabBarPicker.xcscheme +++ b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/TabBarPicker.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> diff --git a/Example/Pods/PureLayout/PureLayout/PureLayout/ALView+PureLayout.h b/Example/Pods/PureLayout/PureLayout/PureLayout/ALView+PureLayout.h index ae74922..525e7aa 100755 --- a/Example/Pods/PureLayout/PureLayout/PureLayout/ALView+PureLayout.h +++ b/Example/Pods/PureLayout/PureLayout/PureLayout/ALView+PureLayout.h @@ -1,6 +1,5 @@ // // ALView+PureLayout.h -// v2.0.5 // https://github.com/smileyborg/PureLayout // // Copyright (c) 2012 Richard Turton @@ -30,7 +29,9 @@ #import "PureLayoutDefines.h" -#pragma mark - ALView+PureLayout +__PL_ASSUME_NONNULL_BEGIN + +#pragma mark ALView+PureLayout /** A category on UIView/NSView that provides a simple yet powerful interface for creating Auto Layout constraints. @@ -46,36 +47,14 @@ /** Initializes and returns a new view that does not convert the autoresizing mask into constraints. */ - (instancetype)initForAutoLayout; - -#pragma mark Create Constraints Without Installing - -/** Prevents constraints created in the given constraints block from being automatically installed (activated). - The constraints created from calls to the PureLayout API in the block are returned in a single array. */ -+ (NSArray *)autoCreateConstraintsWithoutInstalling:(ALConstraintsBlock)block; - - -#pragma mark Set Priority For Constraints - -/** Sets the constraint priority to the given value for all constraints created using the PureLayout API within the given constraints block. - NOTE: This method will have no effect (and will NOT set the priority) on constraints created or added without using the PureLayout API! */ -+ (void)autoSetPriority:(ALLayoutPriority)priority forConstraints:(ALConstraintsBlock)block; - - -#pragma mark Set Identifier For Constraints - -#if __PureLayout_MinBaseSDK_iOS_8_0 - -/** Sets the identifier for all constraints created using the PureLayout API within the given constraints block. - NOTE: This method will have no effect (and will NOT set the identifier) on constraints created or added without using the PureLayout API! */ -+ (void)autoSetIdentifier:(NSString *)identifier forConstraints:(ALConstraintsBlock)block; - -#endif /* __PureLayout_MinBaseSDK_iOS_8_0 */ +/** Configures an existing view to not convert the autoresizing mask into constraints and returns the view. */ +- (instancetype)configureForAutoLayout; #pragma mark Center & Align in Superview /** Centers the view in its superview. */ -- (NSArray *)autoCenterInSuperview; +- (__NSArray_of(NSLayoutConstraint *) *)autoCenterInSuperview; /** Aligns the view to the same axis of its superview. */ - (NSLayoutConstraint *)autoAlignAxisToSuperviewAxis:(ALAxis)axis; @@ -83,7 +62,7 @@ #if __PureLayout_MinBaseSDK_iOS_8_0 /** Centers the view in its superview's margins. Available in iOS 8.0 and later. */ -- (NSArray *)autoCenterInSuperviewMargins; +- (__NSArray_of(NSLayoutConstraint *) *)autoCenterInSuperviewMargins; /** Aligns the view to the corresponding margin axis of its superview. Available in iOS 8.0 and later. */ - (NSLayoutConstraint *)autoAlignAxisToSuperviewMarginAxis:(ALAxis)axis; @@ -102,11 +81,14 @@ /** Pins the given edge of the view to the same edge of its superview with an inset as a maximum or minimum. */ - (NSLayoutConstraint *)autoPinEdgeToSuperviewEdge:(ALEdge)edge withInset:(CGFloat)inset relation:(NSLayoutRelation)relation; +/** Pins the edges of the view to the edges of its superview. */ +- (__NSArray_of(NSLayoutConstraint *) *)autoPinEdgesToSuperviewEdges; + /** Pins the edges of the view to the edges of its superview with the given edge insets. */ -- (NSArray *)autoPinEdgesToSuperviewEdgesWithInsets:(ALEdgeInsets)insets; +- (__NSArray_of(NSLayoutConstraint *) *)autoPinEdgesToSuperviewEdgesWithInsets:(ALEdgeInsets)insets; /** Pins 3 of the 4 edges of the view to the edges of its superview with the given edge insets, excluding one edge. */ -- (NSArray *)autoPinEdgesToSuperviewEdgesWithInsets:(ALEdgeInsets)insets excludingEdge:(ALEdge)edge; +- (__NSArray_of(NSLayoutConstraint *) *)autoPinEdgesToSuperviewEdgesWithInsets:(ALEdgeInsets)insets excludingEdge:(ALEdge)edge; #if __PureLayout_MinBaseSDK_iOS_8_0 @@ -117,10 +99,10 @@ - (NSLayoutConstraint *)autoPinEdgeToSuperviewMargin:(ALEdge)edge relation:(NSLayoutRelation)relation; /** Pins the edges of the view to the margins of its superview. Available in iOS 8.0 and later. */ -- (NSArray *)autoPinEdgesToSuperviewMargins; +- (__NSArray_of(NSLayoutConstraint *) *)autoPinEdgesToSuperviewMargins; /** Pins 3 of the 4 edges of the view to the margins of its superview excluding one edge. Available in iOS 8.0 and later. */ -- (NSArray *)autoPinEdgesToSuperviewMarginsExcludingEdge:(ALEdge)edge; +- (__NSArray_of(NSLayoutConstraint *) *)autoPinEdgesToSuperviewMarginsExcludingEdge:(ALEdge)edge; #endif /* __PureLayout_MinBaseSDK_iOS_8_0 */ @@ -145,6 +127,9 @@ /** Aligns an axis of the view to the same axis of another view with an offset. */ - (NSLayoutConstraint *)autoAlignAxis:(ALAxis)axis toSameAxisOfView:(ALView *)otherView withOffset:(CGFloat)offset; +/** Aligns an axis of the view to the same axis of another view with a multiplier. */ +- (NSLayoutConstraint *)autoAlignAxis:(ALAxis)axis toSameAxisOfView:(ALView *)otherView withMultiplier:(CGFloat)multiplier; + #pragma mark Match Dimensions @@ -167,7 +152,7 @@ #pragma mark Set Dimensions /** Sets the view to a specific size. */ -- (NSArray *)autoSetDimensionsToSize:(CGSize)size; +- (__NSArray_of(NSLayoutConstraint *) *)autoSetDimensionsToSize:(CGSize)size; /** Sets the given dimension of the view to a specific size. */ - (NSLayoutConstraint *)autoSetDimension:(ALDimension)dimension toSize:(CGFloat)size; @@ -179,11 +164,11 @@ #pragma mark Set Content Compression Resistance & Hugging /** Sets the priority of content compression resistance for an axis. - NOTE: This method must be called from within the block passed into the method +[UIView autoSetPriority:forConstraints:] */ + NOTE: This method must be called from within the block passed into the method +[NSLayoutConstraint autoSetPriority:forConstraints:] */ - (void)autoSetContentCompressionResistancePriorityForAxis:(ALAxis)axis; /** Sets the priority of content hugging for an axis. - NOTE: This method must be called from within the block passed into the method +[UIView autoSetPriority:forConstraints:] */ + NOTE: This method must be called from within the block passed into the method +[NSLayoutConstraint autoSetPriority:forConstraints:] */ - (void)autoSetContentHuggingPriorityForAxis:(ALAxis)axis; @@ -223,31 +208,6 @@ #endif /* TARGET_OS_IPHONE */ - -#pragma mark Deprecated Methods - -/** DEPRECATED as of PureLayout v2.0.0. Retain a reference to and remove specific constraints instead, or recreate the view(s) entirely to remove all constraints. - Removes all explicit constraints that affect the view. - WARNING: Apple's constraint solver is not optimized for large-scale constraint removal; you may encounter major performance issues after using this method. - NOTE: This method preserves implicit constraints, such as intrinsic content size constraints, which you usually do not want to remove. */ -- (void)autoRemoveConstraintsAffectingView __attribute__((deprecated)); - -/** DEPRECATED as of PureLayout v2.0.0. Retain a reference to and remove specific constraints instead, or recreate the view(s) entirely to remove all constraints. - Removes all constraints that affect the view, optionally including implicit constraints. - WARNING: Apple's constraint solver is not optimized for large-scale constraint removal; you may encounter major performance issues after using this method. - NOTE: Implicit constraints are auto-generated lower priority constraints, and you usually do not want to remove these. */ -- (void)autoRemoveConstraintsAffectingViewIncludingImplicitConstraints:(BOOL)shouldRemoveImplicitConstraints __attribute__((deprecated)); - -/** DEPRECATED as of PureLayout v2.0.0. Retain a reference to and remove specific constraints instead, or recreate the view(s) entirely to remove all constraints. - Recursively removes all explicit constraints that affect the view and its subviews. - WARNING: Apple's constraint solver is not optimized for large-scale constraint removal; you may encounter major performance issues after using this method. - NOTE: This method preserves implicit constraints, such as intrinsic content size constraints, which you usually do not want to remove. */ -- (void)autoRemoveConstraintsAffectingViewAndSubviews __attribute__((deprecated)); - -/** DEPRECATED as of PureLayout v2.0.0. Retain a reference to and remove specific constraints instead, or recreate the view(s) entirely to remove all constraints. - Recursively removes all constraints from the view and its subviews, optionally including implicit constraints. - WARNING: Apple's constraint solver is not optimized for large-scale constraint removal; you may encounter major performance issues after using this method. - NOTE: Implicit constraints are auto-generated lower priority constraints, and you usually do not want to remove these. */ -- (void)autoRemoveConstraintsAffectingViewAndSubviewsIncludingImplicitConstraints:(BOOL)shouldRemoveImplicitConstraints __attribute__((deprecated)); - @end + +__PL_ASSUME_NONNULL_END diff --git a/Example/Pods/PureLayout/PureLayout/PureLayout/ALView+PureLayout.m b/Example/Pods/PureLayout/PureLayout/PureLayout/ALView+PureLayout.m index 81817ca..dcc7309 100755 --- a/Example/Pods/PureLayout/PureLayout/PureLayout/ALView+PureLayout.m +++ b/Example/Pods/PureLayout/PureLayout/PureLayout/ALView+PureLayout.m @@ -1,6 +1,5 @@ // // ALView+PureLayout.m -// v2.0.5 // https://github.com/smileyborg/PureLayout // // Copyright (c) 2012 Richard Turton @@ -62,199 +61,15 @@ return self; } - -#pragma mark Create Constraints Without Installing - /** - A global variable that stores a stack of arrays of constraints created without being immediately installed. - When executing a constraints block passed into the +[autoCreateConstraintsWithoutInstalling:] method, a new - mutable array is pushed onto this stack, and all constraints created with PureLayout in the block are added - to this array. When the block finishes executing, the array is popped off this stack. Automatic constraint - installation is prevented if this stack contains at least 1 array. - - NOTE: Access to this variable is not synchronized (and should only be done on the main thread). + Configures an existing view to not convert the autoresizing mask into constraints and returns the view. */ -static NSMutableArray *_al_arraysOfCreatedConstraints = nil; - -/** - Accessor for the global state that stores arrays of constraints created without being installed. - */ -+ (NSMutableArray *)al_arraysOfCreatedConstraints +- (instancetype)configureForAutoLayout { - if (!_al_arraysOfCreatedConstraints) { - _al_arraysOfCreatedConstraints = [NSMutableArray new]; - } - return _al_arraysOfCreatedConstraints; + self.translatesAutoresizingMaskIntoConstraints = NO; + return self; } -/** - Accessor for the current mutable array of constraints created without being immediately installed. - */ -+ (NSMutableArray *)al_currentArrayOfCreatedConstraints -{ - return [[self al_arraysOfCreatedConstraints] lastObject]; -} - -/** - Accessor for the global state that determines whether automatic constraint installation should be prevented. - */ -+ (BOOL)al_preventAutomaticConstraintInstallation -{ - return [[self al_arraysOfCreatedConstraints] count] > 0; -} - -/** - Prevents constraints created in the given constraints block from being automatically installed (activated). - The constraints created from calls to the PureLayout API in the block are returned in a single array. - - @param block A block of method calls to the PureLayout API that create constraints. - @return An array of the constraints that were created from calls to the PureLayout API inside the block. - */ -+ (NSArray *)autoCreateConstraintsWithoutInstalling:(ALConstraintsBlock)block -{ - NSAssert(block, @"The constraints block cannot be nil."); - NSArray *createdConstraints = nil; - if (block) { - [[self al_arraysOfCreatedConstraints] addObject:[NSMutableArray new]]; - block(); - createdConstraints = [self al_currentArrayOfCreatedConstraints]; - [[self al_arraysOfCreatedConstraints] removeLastObject]; - } - return createdConstraints; -} - - -#pragma mark Set Priority For Constraints - -/** - A global variable that stores a stack of layout priorities to set on constraints. - When executing a constraints block passed into the +[autoSetPriority:forConstraints:] method, the priority for - that call is pushed onto this stack, and when the block finishes executing, that priority is popped off this - stack. If this stack contains at least 1 priority, the priority at the top of the stack will be set for all - constraints created by this library (even if automatic constraint installation is being prevented). - NOTE: Access to this variable is not synchronized (and should only be done on the main thread). - */ -static NSMutableArray *_al_globalConstraintPriorities = nil; - -/** - Accessor for the global stack of layout priorities. - */ -+ (NSMutableArray *)al_globalConstraintPriorities -{ - if (!_al_globalConstraintPriorities) { - _al_globalConstraintPriorities = [NSMutableArray new]; - } - return _al_globalConstraintPriorities; -} - -/** - Returns the current layout priority to use for constraints. - When executing a constraints block passed into +[autoSetPriority:forConstraints:], this will return - the priority for the current block. Otherwise, the default Required priority is returned. - */ -+ (ALLayoutPriority)al_currentGlobalConstraintPriority -{ - NSMutableArray *globalConstraintPriorities = [self al_globalConstraintPriorities]; - if ([globalConstraintPriorities count] == 0) { - return ALLayoutPriorityRequired; - } - return [[globalConstraintPriorities lastObject] floatValue]; -} - -/** - Accessor for the global state that determines if we're currently in the scope of a priority constraints block. - */ -+ (BOOL)al_isExecutingPriorityConstraintsBlock -{ - return [[self al_globalConstraintPriorities] count] > 0; -} - -/** - Sets the constraint priority to the given value for all constraints created using the PureLayout - API within the given constraints block. - - NOTE: This method will have no effect (and will NOT set the priority) on constraints created or added - without using the PureLayout API! - - @param priority The layout priority to be set on all constraints created in the constraints block. - @param block A block of method calls to the PureLayout API that create and install constraints. - */ -+ (void)autoSetPriority:(ALLayoutPriority)priority forConstraints:(ALConstraintsBlock)block -{ - NSAssert(block, @"The constraints block cannot be nil."); - if (block) { - [[self al_globalConstraintPriorities] addObject:@(priority)]; - block(); - [[self al_globalConstraintPriorities] removeLastObject]; - } -} - - -#pragma mark Set Identifier For Constraints - -#if __PureLayout_MinBaseSDK_iOS_8_0 - -/** - A global variable that stores a stack of identifier strings to set on constraints. - When executing a constraints block passed into the +[autoSetIdentifier:forConstraints:] method, the identifier for - that call is pushed onto this stack, and when the block finishes executing, that identifier is popped off this - stack. If this stack contains at least 1 identifier, the identifier at the top of the stack will be set for all - constraints created by this library (even if automatic constraint installation is being prevented). - NOTE: Access to this variable is not synchronized (and should only be done on the main thread). - */ -static NSMutableArray *_al_globalConstraintIdentifiers = nil; - -/** - Accessor for the global state of constraint identifiers. - */ -+ (NSMutableArray *)al_globalConstraintIdentifiers -{ - if (!_al_globalConstraintIdentifiers) { - _al_globalConstraintIdentifiers = [NSMutableArray new]; - } - return _al_globalConstraintIdentifiers; -} - -/** - Returns the current identifier string to use for constraints. - When executing a constraints block passed into +[autoSetIdentifier:forConstraints:], this will return - the identifier for the current block. Otherwise, nil is returned. - */ -+ (NSString *)al_currentGlobalConstraintIdentifier -{ - NSMutableArray *globalConstraintIdentifiers = [self al_globalConstraintIdentifiers]; - if ([globalConstraintIdentifiers count] == 0) { - return nil; - } - return [globalConstraintIdentifiers lastObject]; -} - -/** - Sets the identifier for all constraints created using the PureLayout API within the given constraints block. - - NOTE: This method will have no effect (and will NOT set the identifier) on constraints created or added - without using the PureLayout API! - - @param identifier A string used to identify all constraints created in the constraints block. - @param block A block of method calls to the PureLayout API that create and install constraints. - */ -+ (void)autoSetIdentifier:(NSString *)identifier forConstraints:(ALConstraintsBlock)block -{ - NSAssert(block, @"The constraints block cannot be nil."); - NSAssert(identifier, @"The identifier string cannot be nil."); - if (block) { - if (identifier) { - [[self al_globalConstraintIdentifiers] addObject:identifier]; - } - block(); - if (identifier) { - [[self al_globalConstraintIdentifiers] removeLastObject]; - } - } -} - -#endif /* __PureLayout_MinBaseSDK_iOS_8_0 */ - #pragma mark Center in Superview @@ -263,9 +78,9 @@ static NSMutableArray *_al_globalConstraintIdentifiers = nil; @return An array of constraints added. */ -- (NSArray *)autoCenterInSuperview +- (__NSArray_of(NSLayoutConstraint *) *)autoCenterInSuperview { - NSMutableArray *constraints = [NSMutableArray new]; + __NSMutableArray_of(NSLayoutConstraint *) *constraints = [NSMutableArray new]; [constraints addObject:[self autoAlignAxisToSuperviewAxis:ALAxisHorizontal]]; [constraints addObject:[self autoAlignAxisToSuperviewAxis:ALAxisVertical]]; return constraints; @@ -292,9 +107,9 @@ static NSMutableArray *_al_globalConstraintIdentifiers = nil; @return An array of constraints added. */ -- (NSArray *)autoCenterInSuperviewMargins +- (__NSArray_of(NSLayoutConstraint *) *)autoCenterInSuperviewMargins { - NSMutableArray *constraints = [NSMutableArray new]; + __NSMutableArray_of(NSLayoutConstraint *) *constraints = [NSMutableArray new]; [constraints addObject:[self autoAlignAxisToSuperviewMarginAxis:ALAxisHorizontal]]; [constraints addObject:[self autoAlignAxisToSuperviewMarginAxis:ALAxisVertical]]; return constraints; @@ -368,6 +183,16 @@ static NSMutableArray *_al_globalConstraintIdentifiers = nil; return [self autoPinEdge:edge toEdge:edge ofView:superview withOffset:inset relation:relation]; } +/** + Pins the edges of the view to the edges of its superview. + + @return An array of constraints added. + */ +- (__NSArray_of(NSLayoutConstraint *) *)autoPinEdgesToSuperviewEdges +{ + return [self autoPinEdgesToSuperviewEdgesWithInsets:ALEdgeInsetsZero]; +} + /** Pins the edges of the view to the edges of its superview with the given edge insets. The insets.left corresponds to a leading edge constraint, and insets.right corresponds to a trailing edge constraint. @@ -375,9 +200,9 @@ static NSMutableArray *_al_globalConstraintIdentifiers = nil; @param insets The insets for this view's edges from its superview's edges. @return An array of constraints added. */ -- (NSArray *)autoPinEdgesToSuperviewEdgesWithInsets:(ALEdgeInsets)insets +- (__NSArray_of(NSLayoutConstraint *) *)autoPinEdgesToSuperviewEdgesWithInsets:(ALEdgeInsets)insets { - NSMutableArray *constraints = [NSMutableArray new]; + __NSMutableArray_of(NSLayoutConstraint *) *constraints = [NSMutableArray new]; [constraints addObject:[self autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:insets.top]]; [constraints addObject:[self autoPinEdgeToSuperviewEdge:ALEdgeLeading withInset:insets.left]]; [constraints addObject:[self autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:insets.bottom]]; @@ -394,9 +219,9 @@ static NSMutableArray *_al_globalConstraintIdentifiers = nil; @param edge The edge of this view to exclude in pinning to its superview; this method will not apply any constraint to it. @return An array of constraints added. */ -- (NSArray *)autoPinEdgesToSuperviewEdgesWithInsets:(ALEdgeInsets)insets excludingEdge:(ALEdge)edge +- (__NSArray_of(NSLayoutConstraint *) *)autoPinEdgesToSuperviewEdgesWithInsets:(ALEdgeInsets)insets excludingEdge:(ALEdge)edge { - NSMutableArray *constraints = [NSMutableArray new]; + __NSMutableArray_of(NSLayoutConstraint *) *constraints = [NSMutableArray new]; if (edge != ALEdgeTop) { [constraints addObject:[self autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:insets.top]]; } @@ -454,9 +279,9 @@ static NSMutableArray *_al_globalConstraintIdentifiers = nil; @return An array of constraints added. */ -- (NSArray *)autoPinEdgesToSuperviewMargins +- (__NSArray_of(NSLayoutConstraint *) *)autoPinEdgesToSuperviewMargins { - NSMutableArray *constraints = [NSMutableArray new]; + __NSMutableArray_of(NSLayoutConstraint *) *constraints = [NSMutableArray new]; [constraints addObject:[self autoPinEdgeToSuperviewMargin:ALEdgeTop]]; [constraints addObject:[self autoPinEdgeToSuperviewMargin:ALEdgeLeading]]; [constraints addObject:[self autoPinEdgeToSuperviewMargin:ALEdgeBottom]]; @@ -470,9 +295,9 @@ static NSMutableArray *_al_globalConstraintIdentifiers = nil; @param edge The edge of this view to exclude in pinning to its superview; this method will not apply any constraint to it. @return An array of constraints added. */ -- (NSArray *)autoPinEdgesToSuperviewMarginsExcludingEdge:(ALEdge)edge +- (__NSArray_of(NSLayoutConstraint *) *)autoPinEdgesToSuperviewMarginsExcludingEdge:(ALEdge)edge { - NSMutableArray *constraints = [NSMutableArray new]; + __NSMutableArray_of(NSLayoutConstraint *) *constraints = [NSMutableArray new]; if (edge != ALEdgeTop) { [constraints addObject:[self autoPinEdgeToSuperviewMargin:ALEdgeTop]]; } @@ -563,6 +388,19 @@ static NSMutableArray *_al_globalConstraintIdentifiers = nil; return [self autoConstrainAttribute:(ALAttribute)axis toAttribute:(ALAttribute)axis ofView:otherView withOffset:offset]; } +/** + Aligns an axis of the view to the same axis of another view with a multiplier. + + @param axis The axis of this view and the other view to align. + @param otherView The other view to align to. Must be in the same view hierarchy as this view. + @param multiplier The multiplier between the axis of this view and the axis of the other view. + @return The constraint added. + */ +- (NSLayoutConstraint *)autoAlignAxis:(ALAxis)axis toSameAxisOfView:(ALView *)otherView withMultiplier:(CGFloat)multiplier +{ + return [self autoConstrainAttribute:(ALAttribute)axis toAttribute:(ALAttribute)axis ofView:otherView withMultiplier:multiplier]; +} + #pragma mark Match Dimensions @@ -646,9 +484,9 @@ static NSMutableArray *_al_globalConstraintIdentifiers = nil; @param size The size to set this view's dimensions to. @return An array of constraints added. */ -- (NSArray *)autoSetDimensionsToSize:(CGSize)size +- (__NSArray_of(NSLayoutConstraint *) *)autoSetDimensionsToSize:(CGSize)size { - NSMutableArray *constraints = [NSMutableArray new]; + __NSMutableArray_of(NSLayoutConstraint *) *constraints = [NSMutableArray new]; [constraints addObject:[self autoSetDimension:ALDimensionWidth toSize:size.width]]; [constraints addObject:[self autoSetDimension:ALDimensionHeight toSize:size.height]]; return constraints; @@ -694,14 +532,14 @@ static NSMutableArray *_al_globalConstraintIdentifiers = nil; */ - (void)autoSetContentCompressionResistancePriorityForAxis:(ALAxis)axis { - NSAssert([ALView al_isExecutingPriorityConstraintsBlock], @"%@ should only be called from within the block passed into the method +[autoSetPriority:forConstraints:]", NSStringFromSelector(_cmd)); - if ([ALView al_isExecutingPriorityConstraintsBlock]) { + NSAssert([NSLayoutConstraint al_isExecutingPriorityConstraintsBlock], @"%@ should only be called from within the block passed into the method +[autoSetPriority:forConstraints:]", NSStringFromSelector(_cmd)); + if ([NSLayoutConstraint al_isExecutingPriorityConstraintsBlock]) { self.translatesAutoresizingMaskIntoConstraints = NO; ALLayoutConstraintAxis constraintAxis = [NSLayoutConstraint al_constraintAxisForAxis:axis]; #if TARGET_OS_IPHONE - [self setContentCompressionResistancePriority:[ALView al_currentGlobalConstraintPriority] forAxis:constraintAxis]; + [self setContentCompressionResistancePriority:[NSLayoutConstraint al_currentGlobalConstraintPriority] forAxis:constraintAxis]; #else - [self setContentCompressionResistancePriority:[ALView al_currentGlobalConstraintPriority] forOrientation:constraintAxis]; + [self setContentCompressionResistancePriority:[NSLayoutConstraint al_currentGlobalConstraintPriority] forOrientation:constraintAxis]; #endif /* TARGET_OS_IPHONE */ } } @@ -714,14 +552,14 @@ static NSMutableArray *_al_globalConstraintIdentifiers = nil; */ - (void)autoSetContentHuggingPriorityForAxis:(ALAxis)axis { - NSAssert([ALView al_isExecutingPriorityConstraintsBlock], @"%@ should only be called from within the block passed into the method +[autoSetPriority:forConstraints:]", NSStringFromSelector(_cmd)); - if ([ALView al_isExecutingPriorityConstraintsBlock]) { + NSAssert([NSLayoutConstraint al_isExecutingPriorityConstraintsBlock], @"%@ should only be called from within the block passed into the method +[autoSetPriority:forConstraints:]", NSStringFromSelector(_cmd)); + if ([NSLayoutConstraint al_isExecutingPriorityConstraintsBlock]) { self.translatesAutoresizingMaskIntoConstraints = NO; ALLayoutConstraintAxis constraintAxis = [NSLayoutConstraint al_constraintAxisForAxis:axis]; #if TARGET_OS_IPHONE - [self setContentHuggingPriority:[ALView al_currentGlobalConstraintPriority] forAxis:constraintAxis]; + [self setContentHuggingPriority:[NSLayoutConstraint al_currentGlobalConstraintPriority] forAxis:constraintAxis]; #else - [self setContentHuggingPriority:[ALView al_currentGlobalConstraintPriority] forOrientation:constraintAxis]; + [self setContentHuggingPriority:[NSLayoutConstraint al_currentGlobalConstraintPriority] forOrientation:constraintAxis]; #endif /* TARGET_OS_IPHONE */ } } @@ -884,100 +722,8 @@ static NSMutableArray *_al_globalConstraintIdentifiers = nil; #endif /* TARGET_OS_IPHONE */ -#pragma mark Deprecated Methods - -/** - DEPRECATED as of PureLayout v2.0.0. Retain a reference to and remove specific constraints instead, or recreate the view(s) entirely to remove all constraints. - Removes all explicit constraints that affect the view. - WARNING: Apple's constraint solver is not optimized for large-scale constraint removal; you may encounter major performance issues after using this method. - It is not recommended to use this method to "reset" a view for reuse in a different way with new constraints. Create a new view instead. - NOTE: This method preserves implicit constraints, such as intrinsic content size constraints, which you usually do not want to remove. - */ -- (void)autoRemoveConstraintsAffectingView -{ - [self autoRemoveConstraintsAffectingViewIncludingImplicitConstraints:NO]; -} - -/** - DEPRECATED as of PureLayout v2.0.0. Retain a reference to and remove specific constraints instead, or recreate the view(s) entirely to remove all constraints. - Removes all constraints that affect the view, optionally including implicit constraints. - WARNING: Apple's constraint solver is not optimized for large-scale constraint removal; you may encounter major performance issues after using this method. - It is not recommended to use this method to "reset" a view for reuse in a different way with new constraints. Create a new view instead. - NOTE: Implicit constraints are auto-generated lower priority constraints (such as those that attempt to keep a view at - its intrinsic content size by hugging its content & resisting compression), and you usually do not want to remove these. - - @param shouldRemoveImplicitConstraints Whether implicit constraints should be removed or skipped. - */ -- (void)autoRemoveConstraintsAffectingViewIncludingImplicitConstraints:(BOOL)shouldRemoveImplicitConstraints -{ - NSMutableArray *constraintsToRemove = [NSMutableArray new]; - ALView *startView = self; - do { - for (NSLayoutConstraint *constraint in startView.constraints) { - BOOL isImplicitConstraint = [NSStringFromClass([constraint class]) isEqualToString:@"NSContentSizeLayoutConstraint"]; - if (shouldRemoveImplicitConstraints || !isImplicitConstraint) { - if (constraint.firstItem == self || constraint.secondItem == self) { - [constraintsToRemove addObject:constraint]; - } - } - } - startView = startView.superview; - } while (startView); - [constraintsToRemove autoRemoveConstraints]; -} - -/** - DEPRECATED as of PureLayout v2.0.0. Retain a reference to and remove specific constraints instead, or recreate the view(s) entirely to remove all constraints. - Recursively removes all explicit constraints that affect the view and its subviews. - WARNING: Apple's constraint solver is not optimized for large-scale constraint removal; you may encounter major performance issues after using this method. - It is not recommended to use this method to "reset" views for reuse in a different way with new constraints. Create a new view instead. - NOTE: This method preserves implicit constraints, such as intrinsic content size constraints, which you usually do not want to remove. - */ -- (void)autoRemoveConstraintsAffectingViewAndSubviews -{ - [self autoRemoveConstraintsAffectingViewAndSubviewsIncludingImplicitConstraints:NO]; -} - -/** - DEPRECATED as of PureLayout v2.0.0. Retain a reference to and remove specific constraints instead, or recreate the view(s) entirely to remove all constraints. - Recursively removes all constraints that affect the view and its subviews, optionally including implicit constraints. - WARNING: Apple's constraint solver is not optimized for large-scale constraint removal; you may encounter major performance issues after using this method. - It is not recommended to use this method to "reset" views for reuse in a different way with new constraints. Create a new view instead. - NOTE: Implicit constraints are auto-generated lower priority constraints (such as those that attempt to keep a view at - its intrinsic content size by hugging its content & resisting compression), and you usually do not want to remove these. - - @param shouldRemoveImplicitConstraints Whether implicit constraints should be removed or skipped. - */ -- (void)autoRemoveConstraintsAffectingViewAndSubviewsIncludingImplicitConstraints:(BOOL)shouldRemoveImplicitConstraints -{ - [self autoRemoveConstraintsAffectingViewIncludingImplicitConstraints:shouldRemoveImplicitConstraints]; - for (ALView *subview in self.subviews) { - [subview autoRemoveConstraintsAffectingViewAndSubviewsIncludingImplicitConstraints:shouldRemoveImplicitConstraints]; - } -} - - #pragma mark Internal Methods -/** - Applies the global constraint priority and identifier to the given constraint. - This should be done before installing all constraints. - - @param constraint The constraint to set the global priority and identifier on. - */ -+ (void)al_applyGlobalStateToConstraint:(NSLayoutConstraint *)constraint -{ - if ([ALView al_isExecutingPriorityConstraintsBlock]) { - constraint.priority = [ALView al_currentGlobalConstraintPriority]; - } -#if __PureLayout_MinBaseSDK_iOS_8_0 - NSString *globalConstraintIdentifier = [ALView al_currentGlobalConstraintIdentifier]; - if (globalConstraintIdentifier) { - [constraint autoIdentify:globalConstraintIdentifier]; - } -#endif /* __PureLayout_MinBaseSDK_iOS_8_0 */ -} - /** Adds the given constraint to this view after applying the global state to the constraint. NOTE: This method is compatible with all versions of iOS, and should be used for older versions before the active @@ -989,9 +735,9 @@ static NSMutableArray *_al_globalConstraintIdentifiers = nil; */ - (void)al_addConstraint:(NSLayoutConstraint *)constraint { - [ALView al_applyGlobalStateToConstraint:constraint]; - if ([ALView al_preventAutomaticConstraintInstallation]) { - [[ALView al_currentArrayOfCreatedConstraints] addObject:constraint]; + [NSLayoutConstraint al_applyGlobalStateToConstraint:constraint]; + if ([NSLayoutConstraint al_preventAutomaticConstraintInstallation]) { + [[NSLayoutConstraint al_currentArrayOfCreatedConstraints] addObject:constraint]; } else { [self addConstraint:constraint]; } diff --git a/Example/Pods/PureLayout/PureLayout/PureLayout/NSArray+PureLayout.h b/Example/Pods/PureLayout/PureLayout/PureLayout/NSArray+PureLayout.h index 10ece57..3815dc4 100755 --- a/Example/Pods/PureLayout/PureLayout/PureLayout/NSArray+PureLayout.h +++ b/Example/Pods/PureLayout/PureLayout/PureLayout/NSArray+PureLayout.h @@ -1,6 +1,5 @@ // // NSArray+PureLayout.h -// v2.0.5 // https://github.com/smileyborg/PureLayout // // Copyright (c) 2012 Richard Turton @@ -30,7 +29,9 @@ #import "PureLayoutDefines.h" -#pragma mark - NSArray+PureLayout +__PL_ASSUME_NONNULL_BEGIN + +#pragma mark NSArray+PureLayout /** A category on NSArray that provides a simple yet powerful interface to: @@ -48,60 +49,67 @@ /** Deactivates the constraints in this array. */ - (void)autoRemoveConstraints; -#if __PureLayout_MinBaseSDK_iOS_8_0 +#if __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 /** Sets the string as the identifier for the constraints in this array. Available in iOS 7.0 and OS X 10.9 and later. */ - (instancetype)autoIdentifyConstraints:(NSString *)identifier; -#endif /* __PureLayout_MinBaseSDK_iOS_8_0 */ +#endif /* __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 */ #pragma mark Array of Views /** Aligns views in this array to one another along a given edge. */ -- (NSArray *)autoAlignViewsToEdge:(ALEdge)edge; +- (__NSArray_of(NSLayoutConstraint *) *)autoAlignViewsToEdge:(ALEdge)edge; /** Aligns views in this array to one another along a given axis. */ -- (NSArray *)autoAlignViewsToAxis:(ALAxis)axis; +- (__NSArray_of(NSLayoutConstraint *) *)autoAlignViewsToAxis:(ALAxis)axis; /** Matches a given dimension of all the views in this array. */ -- (NSArray *)autoMatchViewsDimension:(ALDimension)dimension; +- (__NSArray_of(NSLayoutConstraint *) *)autoMatchViewsDimension:(ALDimension)dimension; /** Sets the given dimension of all the views in this array to a given size. */ -- (NSArray *)autoSetViewsDimension:(ALDimension)dimension toSize:(CGFloat)size; +- (__NSArray_of(NSLayoutConstraint *) *)autoSetViewsDimension:(ALDimension)dimension toSize:(CGFloat)size; /** Sets all of the views in this array to a given size. */ -- (NSArray *)autoSetViewsDimensionsToSize:(CGSize)size; +- (__NSArray_of(NSLayoutConstraint *) *)autoSetViewsDimensionsToSize:(CGSize)size; -/** Distributes the views in this array equally along the selected axis in their superview. Views will be the same size (variable) in the dimension along the axis and will have spacing (fixed) between them. */ -- (NSArray *)autoDistributeViewsAlongAxis:(ALAxis)axis - alignedTo:(ALAttribute)alignment - withFixedSpacing:(CGFloat)spacing; +/** Distributes the views in this array equally along the selected axis in their superview. + Views will be the same size (variable) in the dimension along the axis and will have spacing (fixed) between them. */ +- (__NSArray_of(NSLayoutConstraint *) *)autoDistributeViewsAlongAxis:(ALAxis)axis + alignedTo:(ALAttribute)alignment + withFixedSpacing:(CGFloat)spacing; -/** Distributes the views in this array equally along the selected axis in their superview. Views will be the same size (variable) in the dimension along the axis and will have spacing (fixed) between them, with optional insets from the first and last views to their superview. */ -- (NSArray *)autoDistributeViewsAlongAxis:(ALAxis)axis - alignedTo:(ALAttribute)alignment - withFixedSpacing:(CGFloat)spacing - insetSpacing:(BOOL)shouldSpaceInsets; +/** Distributes the views in this array equally along the selected axis in their superview. + Views will be the same size (variable) in the dimension along the axis and will have spacing (fixed) between them, with optional insets from the first and last views to their superview. */ +- (__NSArray_of(NSLayoutConstraint *) *)autoDistributeViewsAlongAxis:(ALAxis)axis + alignedTo:(ALAttribute)alignment + withFixedSpacing:(CGFloat)spacing + insetSpacing:(BOOL)shouldSpaceInsets; -/** Distributes the views in this array equally along the selected axis in their superview. Views will have spacing (fixed) between them, with optional insets from the first and last views to their superview, and optionally constrained to the same size in the dimension along the axis. */ -- (NSArray *)autoDistributeViewsAlongAxis:(ALAxis)axis - alignedTo:(ALAttribute)alignment - withFixedSpacing:(CGFloat)spacing - insetSpacing:(BOOL)shouldSpaceInsets - matchedSizes:(BOOL)shouldMatchSizes; +/** Distributes the views in this array equally along the selected axis in their superview. + Views will have spacing (fixed) between them, with optional insets from the first and last views to their superview, and optionally constrained to the same size in the dimension along the axis. */ +- (__NSArray_of(NSLayoutConstraint *) *)autoDistributeViewsAlongAxis:(ALAxis)axis + alignedTo:(ALAttribute)alignment + withFixedSpacing:(CGFloat)spacing + insetSpacing:(BOOL)shouldSpaceInsets + matchedSizes:(BOOL)shouldMatchSizes; -/** Distributes the views in this array equally along the selected axis in their superview. Views will be the same size (fixed) in the dimension along the axis and will have spacing (variable) between them. */ -- (NSArray *)autoDistributeViewsAlongAxis:(ALAxis)axis - alignedTo:(ALAttribute)alignment - withFixedSize:(CGFloat)size; +/** Distributes the views in this array equally along the selected axis in their superview. + Views will be the same size (fixed) in the dimension along the axis and will have spacing (variable) between them. */ +- (__NSArray_of(NSLayoutConstraint *) *)autoDistributeViewsAlongAxis:(ALAxis)axis + alignedTo:(ALAttribute)alignment + withFixedSize:(CGFloat)size; -/** Distributes the views in this array equally along the selected axis in their superview. Views will be the same size (fixed) in the dimension along the axis and will have spacing (variable) between them, with optional insets from the first and last views to their superview. */ -- (NSArray *)autoDistributeViewsAlongAxis:(ALAxis)axis - alignedTo:(ALAttribute)alignment - withFixedSize:(CGFloat)size - insetSpacing:(BOOL)shouldSpaceInsets; +/** Distributes the views in this array equally along the selected axis in their superview. + Views will be the same size (fixed) in the dimension along the axis and will have spacing (variable) between them, with optional insets from the first and last views to their superview. */ +- (__NSArray_of(NSLayoutConstraint *) *)autoDistributeViewsAlongAxis:(ALAxis)axis + alignedTo:(ALAttribute)alignment + withFixedSize:(CGFloat)size + insetSpacing:(BOOL)shouldSpaceInsets; @end + +__PL_ASSUME_NONNULL_END diff --git a/Example/Pods/PureLayout/PureLayout/PureLayout/NSArray+PureLayout.m b/Example/Pods/PureLayout/PureLayout/PureLayout/NSArray+PureLayout.m index 81c0fb5..bea0789 100755 --- a/Example/Pods/PureLayout/PureLayout/PureLayout/NSArray+PureLayout.m +++ b/Example/Pods/PureLayout/PureLayout/PureLayout/NSArray+PureLayout.m @@ -1,6 +1,5 @@ // // NSArray+PureLayout.m -// v2.0.5 // https://github.com/smileyborg/PureLayout // // Copyright (c) 2012 Richard Turton @@ -49,11 +48,11 @@ if ([NSLayoutConstraint respondsToSelector:@selector(activateConstraints:)]) { for (id object in self) { if ([object isKindOfClass:[NSLayoutConstraint class]]) { - [ALView al_applyGlobalStateToConstraint:object]; + [NSLayoutConstraint al_applyGlobalStateToConstraint:object]; } } - if ([ALView al_preventAutomaticConstraintInstallation]) { - [[ALView al_currentArrayOfCreatedConstraints] addObjectsFromArray:self]; + if ([NSLayoutConstraint al_preventAutomaticConstraintInstallation]) { + [[NSLayoutConstraint al_currentArrayOfCreatedConstraints] addObjectsFromArray:self]; } else { [NSLayoutConstraint activateConstraints:self]; } @@ -87,7 +86,7 @@ } } -#if __PureLayout_MinBaseSDK_iOS_8_0 +#if __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 /** Sets the string as the identifier for the constraints in this array. Available in iOS 7.0 and OS X 10.9 and later. @@ -107,7 +106,7 @@ return self; } -#endif /* __PureLayout_MinBaseSDK_iOS_8_0 */ +#endif /* __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 */ #pragma mark Array of Views @@ -119,10 +118,10 @@ @param edge The edge to which the views will be aligned. @return An array of constraints added. */ -- (NSArray *)autoAlignViewsToEdge:(ALEdge)edge +- (__NSArray_of(NSLayoutConstraint *) *)autoAlignViewsToEdge:(ALEdge)edge { NSAssert([self al_containsMinimumNumberOfViews:2], @"This array must contain at least 2 views."); - NSMutableArray *constraints = [NSMutableArray new]; + __NSMutableArray_of(NSLayoutConstraint *) *constraints = [NSMutableArray new]; ALView *previousView = nil; for (id object in self) { if ([object isKindOfClass:[ALView class]]) { @@ -144,10 +143,10 @@ @param axis The axis to which the views will be aligned. @return An array of constraints added. */ -- (NSArray *)autoAlignViewsToAxis:(ALAxis)axis +- (__NSArray_of(NSLayoutConstraint *) *)autoAlignViewsToAxis:(ALAxis)axis { NSAssert([self al_containsMinimumNumberOfViews:2], @"This array must contain at least 2 views."); - NSMutableArray *constraints = [NSMutableArray new]; + __NSMutableArray_of(NSLayoutConstraint *) *constraints = [NSMutableArray new]; ALView *previousView = nil; for (id object in self) { if ([object isKindOfClass:[ALView class]]) { @@ -169,10 +168,10 @@ @param dimension The dimension to match for all of the views. @return An array of constraints added. */ -- (NSArray *)autoMatchViewsDimension:(ALDimension)dimension +- (__NSArray_of(NSLayoutConstraint *) *)autoMatchViewsDimension:(ALDimension)dimension { NSAssert([self al_containsMinimumNumberOfViews:2], @"This array must contain at least 2 views."); - NSMutableArray *constraints = [NSMutableArray new]; + __NSMutableArray_of(NSLayoutConstraint *) *constraints = [NSMutableArray new]; ALView *previousView = nil; for (id object in self) { if ([object isKindOfClass:[ALView class]]) { @@ -195,10 +194,10 @@ @param size The size to set the given dimension of each view to. @return An array of constraints added. */ -- (NSArray *)autoSetViewsDimension:(ALDimension)dimension toSize:(CGFloat)size +- (__NSArray_of(NSLayoutConstraint *) *)autoSetViewsDimension:(ALDimension)dimension toSize:(CGFloat)size { NSAssert([self al_containsMinimumNumberOfViews:1], @"This array must contain at least 1 view."); - NSMutableArray *constraints = [NSMutableArray new]; + __NSMutableArray_of(NSLayoutConstraint *) *constraints = [NSMutableArray new]; for (id object in self) { if ([object isKindOfClass:[ALView class]]) { ALView *view = (ALView *)object; @@ -216,9 +215,9 @@ @param size The size to set each view's dimensions to. @return An array of constraints added. */ -- (NSArray *)autoSetViewsDimensionsToSize:(CGSize)size +- (__NSArray_of(NSLayoutConstraint *) *)autoSetViewsDimensionsToSize:(CGSize)size { - NSMutableArray *constraints = [NSMutableArray new]; + __NSMutableArray_of(NSLayoutConstraint *) *constraints = [NSMutableArray new]; [constraints addObjectsFromArray:[self autoSetViewsDimension:ALDimensionWidth toSize:size.width]]; [constraints addObjectsFromArray:[self autoSetViewsDimension:ALDimensionHeight toSize:size.height]]; return constraints; @@ -235,9 +234,9 @@ @param spacing The fixed amount of spacing between each view. @return An array of constraints added. */ -- (NSArray *)autoDistributeViewsAlongAxis:(ALAxis)axis - alignedTo:(ALAttribute)alignment - withFixedSpacing:(CGFloat)spacing +- (__NSArray_of(NSLayoutConstraint *) *)autoDistributeViewsAlongAxis:(ALAxis)axis + alignedTo:(ALAttribute)alignment + withFixedSpacing:(CGFloat)spacing { return [self autoDistributeViewsAlongAxis:axis alignedTo:alignment @@ -256,10 +255,10 @@ @param shouldSpaceInsets Whether the first and last views should be equally inset from their superview. @return An array of constraints added. */ -- (NSArray *)autoDistributeViewsAlongAxis:(ALAxis)axis - alignedTo:(ALAttribute)alignment - withFixedSpacing:(CGFloat)spacing - insetSpacing:(BOOL)shouldSpaceInsets +- (__NSArray_of(NSLayoutConstraint *) *)autoDistributeViewsAlongAxis:(ALAxis)axis + alignedTo:(ALAttribute)alignment + withFixedSpacing:(CGFloat)spacing + insetSpacing:(BOOL)shouldSpaceInsets { return [self autoDistributeViewsAlongAxis:axis alignedTo:alignment @@ -281,13 +280,13 @@ NOTE: All views must specify an intrinsic content size if passing NO, otherwise the layout will be ambiguous! @return An array of constraints added. */ -- (NSArray *)autoDistributeViewsAlongAxis:(ALAxis)axis - alignedTo:(ALAttribute)alignment - withFixedSpacing:(CGFloat)spacing - insetSpacing:(BOOL)shouldSpaceInsets - matchedSizes:(BOOL)shouldMatchSizes +- (__NSArray_of(NSLayoutConstraint *) *)autoDistributeViewsAlongAxis:(ALAxis)axis + alignedTo:(ALAttribute)alignment + withFixedSpacing:(CGFloat)spacing + insetSpacing:(BOOL)shouldSpaceInsets + matchedSizes:(BOOL)shouldMatchSizes { - NSAssert([self al_containsMinimumNumberOfViews:2], @"This array must contain at least 2 views to distribute."); + NSAssert([self al_containsMinimumNumberOfViews:1], @"This array must contain at least 1 view to distribute."); ALDimension matchedDimension; ALEdge firstEdge, lastEdge; switch (axis) { @@ -312,7 +311,7 @@ CGFloat leadingSpacing = shouldSpaceInsets ? spacing : 0.0; CGFloat trailingSpacing = shouldSpaceInsets ? spacing : 0.0; - NSMutableArray *constraints = [NSMutableArray new]; + __NSMutableArray_of(NSLayoutConstraint *) *constraints = [NSMutableArray new]; ALView *previousView = nil; for (id object in self) { if ([object isKindOfClass:[ALView class]]) { @@ -350,9 +349,9 @@ @param size The fixed size of each view in the dimension along the given axis. @return An array of constraints added. */ -- (NSArray *)autoDistributeViewsAlongAxis:(ALAxis)axis - alignedTo:(ALAttribute)alignment - withFixedSize:(CGFloat)size +- (__NSArray_of(NSLayoutConstraint *) *)autoDistributeViewsAlongAxis:(ALAxis)axis + alignedTo:(ALAttribute)alignment + withFixedSize:(CGFloat)size { return [self autoDistributeViewsAlongAxis:axis alignedTo:alignment @@ -371,12 +370,12 @@ @param shouldSpaceInsets Whether the first and last views should be equally inset from their superview. @return An array of constraints added. */ -- (NSArray *)autoDistributeViewsAlongAxis:(ALAxis)axis - alignedTo:(ALAttribute)alignment - withFixedSize:(CGFloat)size - insetSpacing:(BOOL)shouldSpaceInsets +- (__NSArray_of(NSLayoutConstraint *) *)autoDistributeViewsAlongAxis:(ALAxis)axis + alignedTo:(ALAttribute)alignment + withFixedSize:(CGFloat)size + insetSpacing:(BOOL)shouldSpaceInsets { - NSAssert([self al_containsMinimumNumberOfViews:2], @"This array must contain at least 2 views to distribute."); + NSAssert([self al_containsMinimumNumberOfViews:1], @"This array must contain at least 1 view to distribute."); ALDimension fixedDimension; NSLayoutAttribute attribute; switch (axis) { @@ -408,8 +407,8 @@ #endif /* TARGET_OS_IPHONE */ BOOL shouldFlipOrder = isRightToLeftLayout && (axis != ALAxisVertical); // imitate the effect of leading/trailing when distributing horizontally - NSMutableArray *constraints = [NSMutableArray new]; - NSArray *views = [self al_copyViewsOnly]; + __NSMutableArray_of(NSLayoutConstraint *) *constraints = [NSMutableArray new]; + __NSArray_of(ALView *) *views = [self al_copyViewsOnly]; NSUInteger numberOfViews = [views count]; ALView *commonSuperview = [views al_commonSuperviewOfViews]; ALView *previousView = nil; @@ -443,7 +442,7 @@ #pragma mark Internal Helper Methods /** - Returns the common superview for the views in this array. + Returns the common superview for the views in this array. If there is only one view in the array, its superview will be returned. Raises an exception if the views in this array do not share a common superview. @return The common superview for the views in this array. @@ -458,7 +457,7 @@ if (previousView) { commonSuperview = [view al_commonSuperviewWithView:commonSuperview]; } else { - commonSuperview = view; + commonSuperview = view.superview; } previousView = view; } @@ -492,9 +491,9 @@ @return A new array containing only the views that are in this array. */ -- (NSArray *)al_copyViewsOnly +- (__NSArray_of(ALView *) *)al_copyViewsOnly { - NSMutableArray *viewsOnlyArray = [NSMutableArray arrayWithCapacity:[self count]]; + __NSMutableArray_of(ALView *) *viewsOnlyArray = [NSMutableArray arrayWithCapacity:[self count]]; for (id object in self) { if ([object isKindOfClass:[ALView class]]) { [viewsOnlyArray addObject:object]; diff --git a/Example/Pods/PureLayout/PureLayout/PureLayout/NSLayoutConstraint+PureLayout.h b/Example/Pods/PureLayout/PureLayout/PureLayout/NSLayoutConstraint+PureLayout.h index 87797f6..01a1dc6 100755 --- a/Example/Pods/PureLayout/PureLayout/PureLayout/NSLayoutConstraint+PureLayout.h +++ b/Example/Pods/PureLayout/PureLayout/PureLayout/NSLayoutConstraint+PureLayout.h @@ -1,6 +1,5 @@ // // NSLayoutConstraint+PureLayout.h -// v2.0.5 // https://github.com/smileyborg/PureLayout // // Copyright (c) 2013-2015 Tyler Fox @@ -29,7 +28,9 @@ #import "PureLayoutDefines.h" -#pragma mark - NSLayoutConstraint+PureLayout +__PL_ASSUME_NONNULL_BEGIN + +#pragma mark NSLayoutConstraint+PureLayout /** A category on NSLayoutConstraint that allows constraints to be easily installed & removed. @@ -37,6 +38,39 @@ @interface NSLayoutConstraint (PureLayout) +#pragma mark Batch Constraint Creation + +/** Creates all of the constraints in the block, then installs (activates) them all at once. + All constraints created from calls to the PureLayout API in the block are returned in a single array. + This may be more efficient than installing (activating) each constraint one-by-one. */ ++ (__NSArray_of(NSLayoutConstraint *) *)autoCreateAndInstallConstraints:(ALConstraintsBlock)block; + +/** Creates all of the constraints in the block but prevents them from being automatically installed (activated). + All constraints created from calls to the PureLayout API in the block are returned in a single array. */ ++ (__NSArray_of(NSLayoutConstraint *) *)autoCreateConstraintsWithoutInstalling:(ALConstraintsBlock)block; + + +#pragma mark Set Priority For Constraints + +/** Sets the constraint priority to the given value for all constraints created using the PureLayout API within the given constraints block. + NOTE: This method will have no effect (and will NOT set the priority) on constraints created or added without using the PureLayout API! */ ++ (void)autoSetPriority:(ALLayoutPriority)priority forConstraints:(ALConstraintsBlock)block; + + +#pragma mark Identify Constraints + +#if __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 + +/** Sets the identifier for all constraints created using the PureLayout API within the given constraints block. + NOTE: This method will have no effect (and will NOT set the identifier) on constraints created or added without using the PureLayout API! */ ++ (void)autoSetIdentifier:(NSString *)identifier forConstraints:(ALConstraintsBlock)block; + +/** Sets the string as the identifier for this constraint. Available in iOS 7.0 and OS X 10.9 and later. */ +- (instancetype)autoIdentify:(NSString *)identifier; + +#endif /* __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 */ + + #pragma mark Install & Remove Constraints /** Activates the the constraint. */ @@ -45,14 +79,6 @@ /** Deactivates the constraint. */ - (void)autoRemove; - -#pragma mark Identify Constraints - -#if __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 - -/** Sets the string as the identifier for this constraint. Available in iOS 7.0 and OS X 10.9 and later. */ -- (instancetype)autoIdentify:(NSString *)identifier; - -#endif /* __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 */ - @end + +__PL_ASSUME_NONNULL_END diff --git a/Example/Pods/PureLayout/PureLayout/PureLayout/NSLayoutConstraint+PureLayout.m b/Example/Pods/PureLayout/PureLayout/PureLayout/NSLayoutConstraint+PureLayout.m index 1a290b5..6c3cef2 100755 --- a/Example/Pods/PureLayout/PureLayout/PureLayout/NSLayoutConstraint+PureLayout.m +++ b/Example/Pods/PureLayout/PureLayout/PureLayout/NSLayoutConstraint+PureLayout.m @@ -1,6 +1,5 @@ // // NSLayoutConstraint+PureLayout.m -// v2.0.5 // https://github.com/smileyborg/PureLayout // // Copyright (c) 2013-2015 Tyler Fox @@ -28,6 +27,7 @@ #import "NSLayoutConstraint+PureLayout.h" #import "ALView+PureLayout.h" +#import "NSArray+PureLayout.h" #import "PureLayout+Internal.h" @@ -35,8 +35,250 @@ @implementation NSLayoutConstraint (PureLayout) +#pragma mark Batch Constraint Creation -#pragma mark Installing & Removing Constraints +/** + A global variable that stores a stack of arrays of constraints created without being immediately installed. + When executing a constraints block passed into the +[autoCreateConstraintsWithoutInstalling:] method, a new + mutable array is pushed onto this stack, and all constraints created with PureLayout in the block are added + to this array. When the block finishes executing, the array is popped off this stack. Automatic constraint + installation is prevented if this stack contains at least 1 array. + + NOTE: Access to this variable is not synchronized (and should only be done on the main thread). + */ +static __NSMutableArray_of(__NSMutableArray_of(NSLayoutConstraint *) *) *_al_arraysOfCreatedConstraints = nil; + +/** + A global variable that is set to YES when installing a batch of constraints collected from a call to +[autoCreateAndInstallConstraints]. + When this flag is YES, constraints are installed immediately without checking for or adding to the +[al_currentArrayOfCreatedConstraints]. + This is necessary to properly handle nested calls to +[autoCreateAndInstallConstraints], where calls whose block contains other call(s) + should not return constraints from within the blocks of nested call(s). + */ +static BOOL _al_isInstallingCreatedConstraints = NO; + +/** + Accessor for the global state that stores arrays of constraints created without being installed. + */ ++ (__NSMutableArray_of(__NSMutableArray_of(NSLayoutConstraint *) *) *)al_arraysOfCreatedConstraints +{ + NSAssert([NSThread isMainThread], @"PureLayout is not thread safe, and must be used exclusively from the main thread."); + if (!_al_arraysOfCreatedConstraints) { + _al_arraysOfCreatedConstraints = [NSMutableArray new]; + } + return _al_arraysOfCreatedConstraints; +} + +/** + Accessor for the current mutable array of constraints created without being immediately installed. + */ ++ (__NSMutableArray_of(NSLayoutConstraint *) *)al_currentArrayOfCreatedConstraints +{ + return [[self al_arraysOfCreatedConstraints] lastObject]; +} + +/** + Accessor for the global state that determines whether automatic constraint installation should be prevented. + */ ++ (BOOL)al_preventAutomaticConstraintInstallation +{ + return (_al_isInstallingCreatedConstraints == NO) && ([[self al_arraysOfCreatedConstraints] count] > 0); +} + +/** + Creates all of the constraints in the block, then installs (activates) them all at once. + All constraints created from calls to the PureLayout API in the block are returned in a single array. + This may be more efficient than installing (activating) each constraint one-by-one. + + Note: calls to this method may be nested. The constraints returned from a call will NOT include constraints + created in nested calls; constraints are only returned from the inner-most call they are created within. + + @param block A block of method calls to the PureLayout API that create constraints. + @return An array of the constraints that were created from calls to the PureLayout API inside the block. + */ ++ (__NSArray_of(NSLayoutConstraint *) *)autoCreateAndInstallConstraints:(ALConstraintsBlock)block +{ + NSArray *createdConstraints = [self autoCreateConstraintsWithoutInstalling:block]; + _al_isInstallingCreatedConstraints = YES; + [createdConstraints autoInstallConstraints]; + _al_isInstallingCreatedConstraints = NO; + return createdConstraints; +} + +/** + Creates all of the constraints in the block but prevents them from being automatically installed (activated). + All constraints created from calls to the PureLayout API in the block are returned in a single array. + + Note: calls to this method may be nested. The constraints returned from a call will NOT include constraints + created in nested calls; constraints are only returned from the inner-most call they are created within. + + @param block A block of method calls to the PureLayout API that create constraints. + @return An array of the constraints that were created from calls to the PureLayout API inside the block. + */ ++ (__NSArray_of(NSLayoutConstraint *) *)autoCreateConstraintsWithoutInstalling:(ALConstraintsBlock)block +{ + NSAssert(block, @"The constraints block cannot be nil."); + NSArray *createdConstraints = nil; + if (block) { + [[self al_arraysOfCreatedConstraints] addObject:[NSMutableArray new]]; + block(); + createdConstraints = [self al_currentArrayOfCreatedConstraints]; + [[self al_arraysOfCreatedConstraints] removeLastObject]; + } + return createdConstraints; +} + + +#pragma mark Set Priority For Constraints + +/** + A global variable that stores a stack of layout priorities to set on constraints. + When executing a constraints block passed into the +[autoSetPriority:forConstraints:] method, the priority for + that call is pushed onto this stack, and when the block finishes executing, that priority is popped off this + stack. If this stack contains at least 1 priority, the priority at the top of the stack will be set for all + constraints created by this library (even if automatic constraint installation is being prevented). + NOTE: Access to this variable is not synchronized (and should only be done on the main thread). + */ +static __NSMutableArray_of(NSNumber *) *_al_globalConstraintPriorities = nil; + +/** + Accessor for the global stack of layout priorities. + */ ++ (__NSMutableArray_of(NSNumber *) *)al_globalConstraintPriorities +{ + NSAssert([NSThread isMainThread], @"PureLayout is not thread safe, and must be used exclusively from the main thread."); + if (!_al_globalConstraintPriorities) { + _al_globalConstraintPriorities = [NSMutableArray new]; + } + return _al_globalConstraintPriorities; +} + +/** + Returns the current layout priority to use for constraints. + When executing a constraints block passed into +[autoSetPriority:forConstraints:], this will return + the priority for the current block. Otherwise, the default Required priority is returned. + */ ++ (ALLayoutPriority)al_currentGlobalConstraintPriority +{ + __NSMutableArray_of(NSNumber *) *globalConstraintPriorities = [self al_globalConstraintPriorities]; + if ([globalConstraintPriorities count] == 0) { + return ALLayoutPriorityRequired; + } + return [[globalConstraintPriorities lastObject] floatValue]; +} + +/** + Accessor for the global state that determines if we're currently in the scope of a priority constraints block. + */ ++ (BOOL)al_isExecutingPriorityConstraintsBlock +{ + return [[self al_globalConstraintPriorities] count] > 0; +} + +/** + Sets the constraint priority to the given value for all constraints created using the PureLayout + API within the given constraints block. + + NOTE: This method will have no effect (and will NOT set the priority) on constraints created or added + without using the PureLayout API! + + @param priority The layout priority to be set on all constraints created in the constraints block. + @param block A block of method calls to the PureLayout API that create and install constraints. + */ ++ (void)autoSetPriority:(ALLayoutPriority)priority forConstraints:(ALConstraintsBlock)block +{ + NSAssert(block, @"The constraints block cannot be nil."); + if (block) { + [[self al_globalConstraintPriorities] addObject:@(priority)]; + block(); + [[self al_globalConstraintPriorities] removeLastObject]; + } +} + + +#pragma mark Identify Constraints + +#if __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 + +/** + A global variable that stores a stack of identifier strings to set on constraints. + When executing a constraints block passed into the +[autoSetIdentifier:forConstraints:] method, the identifier for + that call is pushed onto this stack, and when the block finishes executing, that identifier is popped off this + stack. If this stack contains at least 1 identifier, the identifier at the top of the stack will be set for all + constraints created by this library (even if automatic constraint installation is being prevented). + NOTE: Access to this variable is not synchronized (and should only be done on the main thread). + */ +static __NSMutableArray_of(NSString *) *_al_globalConstraintIdentifiers = nil; + +/** + Accessor for the global state of constraint identifiers. + */ ++ (__NSMutableArray_of(NSString *) *)al_globalConstraintIdentifiers +{ + NSAssert([NSThread isMainThread], @"PureLayout is not thread safe, and must be used exclusively from the main thread."); + if (!_al_globalConstraintIdentifiers) { + _al_globalConstraintIdentifiers = [NSMutableArray new]; + } + return _al_globalConstraintIdentifiers; +} + +/** + Returns the current identifier string to use for constraints. + When executing a constraints block passed into +[autoSetIdentifier:forConstraints:], this will return + the identifier for the current block. Otherwise, nil is returned. + */ ++ (NSString *)al_currentGlobalConstraintIdentifier +{ + __NSMutableArray_of(NSString *) *globalConstraintIdentifiers = [self al_globalConstraintIdentifiers]; + if ([globalConstraintIdentifiers count] == 0) { + return nil; + } + return [globalConstraintIdentifiers lastObject]; +} + +/** + Sets the identifier for all constraints created using the PureLayout API within the given constraints block. + + NOTE: This method will have no effect (and will NOT set the identifier) on constraints created or added + without using the PureLayout API! + + @param identifier A string used to identify all constraints created in the constraints block. + @param block A block of method calls to the PureLayout API that create and install constraints. + */ ++ (void)autoSetIdentifier:(NSString *)identifier forConstraints:(ALConstraintsBlock)block +{ + NSAssert(block, @"The constraints block cannot be nil."); + NSAssert(identifier, @"The identifier string cannot be nil."); + if (block) { + if (identifier) { + [[self al_globalConstraintIdentifiers] addObject:identifier]; + } + block(); + if (identifier) { + [[self al_globalConstraintIdentifiers] removeLastObject]; + } + } +} + +/** + Sets the string as the identifier for this constraint. Available in iOS 7.0 and OS X 10.9 and later. + The identifier will be printed along with the constraint's description. + This is helpful to document a constraint's purpose and aid in debugging. + + @param identifier A string used to identify this constraint. + @return This constraint. + */ +- (instancetype)autoIdentify:(NSString *)identifier +{ + if ([self respondsToSelector:@selector(setIdentifier:)]) { + self.identifier = identifier; + } + return self; +} + +#endif /* __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 */ + + +#pragma mark Install & Remove Constraints /** Activates the constraint. @@ -45,9 +287,9 @@ { #if __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 if ([self respondsToSelector:@selector(setActive:)]) { - [ALView al_applyGlobalStateToConstraint:self]; - if ([ALView al_preventAutomaticConstraintInstallation]) { - [[ALView al_currentArrayOfCreatedConstraints] addObject:self]; + [NSLayoutConstraint al_applyGlobalStateToConstraint:self]; + if ([NSLayoutConstraint al_preventAutomaticConstraintInstallation]) { + [[NSLayoutConstraint al_currentArrayOfCreatedConstraints] addObject:self]; } else { self.active = YES; } @@ -101,30 +343,26 @@ } -#pragma mark Identify Constraints - -#if __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 +#pragma mark Internal Methods /** - Sets the string as the identifier for this constraint. Available in iOS 7.0 and OS X 10.9 and later. - The identifier will be printed along with the constraint's description. - This is helpful to document a constraint's purpose and aid in debugging. + Applies the global constraint priority and identifier to the given constraint. + This should be done before installing all constraints. - @param identifier A string used to identify this constraint. - @return This constraint. + @param constraint The constraint to set the global priority and identifier on. */ -- (instancetype)autoIdentify:(NSString *)identifier ++ (void)al_applyGlobalStateToConstraint:(NSLayoutConstraint *)constraint { - if ([self respondsToSelector:@selector(setIdentifier:)]) { - self.identifier = identifier; + if ([NSLayoutConstraint al_isExecutingPriorityConstraintsBlock]) { + constraint.priority = [NSLayoutConstraint al_currentGlobalConstraintPriority]; + } +#if __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 + NSString *globalConstraintIdentifier = [NSLayoutConstraint al_currentGlobalConstraintIdentifier]; + if (globalConstraintIdentifier) { + [constraint autoIdentify:globalConstraintIdentifier]; } - return self; -} - #endif /* __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 */ - - -#pragma mark Internal Methods +} /** Returns the corresponding NSLayoutAttribute for the given ALAttribute. @@ -234,7 +472,7 @@ break; default: NSAssert(nil, @"Not a valid ALAxis."); - constraintAxis = ALLayoutConstraintAxisHorizontal; // default to a random value to satisfy the compiler + constraintAxis = ALLayoutConstraintAxisHorizontal; // default to an arbitrary value to satisfy the compiler break; } return constraintAxis; @@ -273,7 +511,7 @@ break; default: NSAssert(nil, @"Not a valid ALEdge."); - margin = ALMarginLeft; // default to a random value to satisfy the compiler + margin = ALMarginLeft; // default to an arbitrary value to satisfy the compiler break; } return margin; @@ -299,11 +537,11 @@ case ALAxisBaseline: case ALAxisFirstBaseline: NSAssert(nil, @"The baseline axis attributes do not have corresponding margin axis attributes."); - marginAxis = ALMarginAxisVertical; // default to a random value to satisfy the compiler + marginAxis = ALMarginAxisVertical; // default to an arbitrary value to satisfy the compiler break; default: NSAssert(nil, @"Not a valid ALAxis."); - marginAxis = ALMarginAxisVertical; // default to a random value to satisfy the compiler + marginAxis = ALMarginAxisVertical; // default to an arbitrary value to satisfy the compiler break; } return marginAxis; diff --git a/Example/Pods/PureLayout/PureLayout/PureLayout/PureLayout+Internal.h b/Example/Pods/PureLayout/PureLayout/PureLayout/PureLayout+Internal.h index 28fbfcf..48335d4 100644 --- a/Example/Pods/PureLayout/PureLayout/PureLayout/PureLayout+Internal.h +++ b/Example/Pods/PureLayout/PureLayout/PureLayout/PureLayout+Internal.h @@ -1,6 +1,5 @@ // // PureLayout+Internal.h -// v2.0.5 // https://github.com/smileyborg/PureLayout // // Copyright (c) 2014-2015 Tyler Fox @@ -28,9 +27,15 @@ #import "PureLayoutDefines.h" + +// Using generics with NSMutableArray is so common in the internal implementation of PureLayout that it gets a dedicated preprocessor macro for better readability. +#define __NSMutableArray_of(type) __PL_GENERICS(NSMutableArray, type) + +__PL_ASSUME_NONNULL_BEGIN + /** A constant that represents the smallest valid positive value for the multiplier of a constraint, since a value of 0 will cause the second item to be lost in the internal auto layout engine. */ -static const CGFloat kMULTIPLIER_MIN_VALUE = 0.00001; // very small floating point numbers (e.g. CGFLOAT_MIN) can cause problems +static const CGFloat kMULTIPLIER_MIN_VALUE = (CGFloat)0.00001; // very small floating point numbers (e.g. CGFLOAT_MIN) can cause problems /** @@ -38,12 +43,6 @@ static const CGFloat kMULTIPLIER_MIN_VALUE = 0.00001; // very small floating poi */ @interface ALView (PureLayoutInternal) -+ (BOOL)al_preventAutomaticConstraintInstallation; -+ (NSMutableArray *)al_currentArrayOfCreatedConstraints; -+ (BOOL)al_isExecutingPriorityConstraintsBlock; -+ (ALLayoutPriority)al_currentGlobalConstraintPriority; -+ (NSString *)al_currentGlobalConstraintIdentifier; -+ (void)al_applyGlobalStateToConstraint:(NSLayoutConstraint *)constraint; - (void)al_addConstraint:(NSLayoutConstraint *)constraint; - (ALView *)al_commonSuperviewWithView:(ALView *)otherView; - (NSLayoutConstraint *)al_alignAttribute:(ALAttribute)attribute toView:(ALView *)otherView forAxis:(ALAxis)axis; @@ -58,7 +57,7 @@ static const CGFloat kMULTIPLIER_MIN_VALUE = 0.00001; // very small floating poi - (ALView *)al_commonSuperviewOfViews; - (BOOL)al_containsMinimumNumberOfViews:(NSUInteger)minimumNumberOfViews; -- (NSArray *)al_copyViewsOnly; +- (__NSArray_of(ALView *) *)al_copyViewsOnly; @end @@ -68,6 +67,14 @@ static const CGFloat kMULTIPLIER_MIN_VALUE = 0.00001; // very small floating poi */ @interface NSLayoutConstraint (PureLayoutInternal) ++ (BOOL)al_preventAutomaticConstraintInstallation; ++ (__NSMutableArray_of(NSLayoutConstraint *) *)al_currentArrayOfCreatedConstraints; ++ (BOOL)al_isExecutingPriorityConstraintsBlock; ++ (ALLayoutPriority)al_currentGlobalConstraintPriority; +#if __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 ++ (NSString *)al_currentGlobalConstraintIdentifier; +#endif /* __PureLayout_MinBaseSDK_iOS_8_0 || __PureLayout_MinBaseSDK_OSX_10_10 */ ++ (void)al_applyGlobalStateToConstraint:(NSLayoutConstraint *)constraint; + (NSLayoutAttribute)al_layoutAttributeForAttribute:(ALAttribute)attribute; + (ALLayoutConstraintAxis)al_constraintAxisForAxis:(ALAxis)axis; #if __PureLayout_MinBaseSDK_iOS_8_0 @@ -76,3 +83,5 @@ static const CGFloat kMULTIPLIER_MIN_VALUE = 0.00001; // very small floating poi #endif /* __PureLayout_MinBaseSDK_iOS_8_0 */ @end + +__PL_ASSUME_NONNULL_END diff --git a/Example/Pods/PureLayout/PureLayout/PureLayout/PureLayout.h b/Example/Pods/PureLayout/PureLayout/PureLayout/PureLayout.h index 8c47775..ed9b416 100755 --- a/Example/Pods/PureLayout/PureLayout/PureLayout/PureLayout.h +++ b/Example/Pods/PureLayout/PureLayout/PureLayout/PureLayout.h @@ -1,6 +1,5 @@ // // PureLayout.h -// v2.0.5 // https://github.com/smileyborg/PureLayout // // Copyright (c) 2014-2015 Tyler Fox @@ -29,6 +28,14 @@ #ifndef PureLayout_h #define PureLayout_h +#import + +//! Project version number for PureLayout. +FOUNDATION_EXPORT double PureLayoutVersionNumber; + +//! Project version string for PureLayout. +FOUNDATION_EXPORT const unsigned char PureLayoutVersionString[]; + #import "ALView+PureLayout.h" #import "NSArray+PureLayout.h" #import "NSLayoutConstraint+PureLayout.h" diff --git a/Example/Pods/PureLayout/PureLayout/PureLayout/PureLayoutDefines.h b/Example/Pods/PureLayout/PureLayout/PureLayout/PureLayoutDefines.h index 5b0f0bb..46f4ffe 100755 --- a/Example/Pods/PureLayout/PureLayout/PureLayout/PureLayoutDefines.h +++ b/Example/Pods/PureLayout/PureLayout/PureLayout/PureLayoutDefines.h @@ -1,6 +1,5 @@ // // PureLayoutDefines.h -// v2.0.5 // https://github.com/smileyborg/PureLayout // // Copyright (c) 2014-2015 Tyler Fox @@ -40,7 +39,26 @@ #define __PureLayout_MinSysVer_iOS_8_0 (TARGET_OS_IPHONE && floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1) #define __PureLayout_MinSysVer_OSX_10_9 (!TARGET_OS_IPHONE && floor(NSFoundationVersionNumber) > NSFoundationVersionNumber10_8_4) -// Define generic AL-prefixed macros for the types/constants/etc that have slight naming variations across iOS and OS X, which allows the same code to be platform-independent +// Define some preprocessor macros that allow nullability annotations to be adopted in a backwards-compatible manner. +#if __has_feature(nullability) +# define __PL_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN +# define __PL_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END +#else +# define __PL_ASSUME_NONNULL_BEGIN +# define __PL_ASSUME_NONNULL_END +#endif + +// Define some preprocessor macros that allow generics to be adopted in a backwards-compatible manner. +#if __has_feature(objc_generics) +# define __PL_GENERICS(class, ...) class<__VA_ARGS__> +#else +# define __PL_GENERICS(class, ...) class +#endif + +// Using generics with NSArray is so common in PureLayout that it gets a dedicated preprocessor macro for better readability. +#define __NSArray_of(type) __PL_GENERICS(NSArray, type) + +// Define generic AL-prefixed macros for the types/constants/etc that have slight naming variations across iOS and OS X, which allows the same code to be platform-independent. #if TARGET_OS_IPHONE # import # define ALView UIView @@ -108,9 +126,9 @@ typedef NS_ENUM(NSInteger, ALDimension) { /** Constants that represent axes of a view. */ typedef NS_ENUM(NSInteger, ALAxis) { - /** A vertical line through the middle of the view's left and right edges. */ + /** A vertical line equidistant from the view's left and right edges. */ ALAxisVertical = NSLayoutAttributeCenterX, - /** A horizontal line through the middle of the view's top and bottom edges. */ + /** A horizontal line equidistant from the view's top and bottom edges. */ ALAxisHorizontal = NSLayoutAttributeCenterY, /** A horizontal line at the baseline of the last line of text in the view. (For views that do not draw text, will be equivalent to ALEdgeBottom.) Same as ALAxisLastBaseline. */ @@ -143,9 +161,9 @@ typedef NS_ENUM(NSInteger, ALMargin) { /** Constants that represent axes of the layout margins of a view. Available in iOS 8.0 and later. */ typedef NS_ENUM(NSInteger, ALMarginAxis) { - /** A vertical line through the middle of the view's left and right margins. */ + /** A vertical line equidistant from the view's left and right margins. */ ALMarginAxisVertical = NSLayoutAttributeCenterXWithinMargins, - /** A horizontal line through the middle of the view's top and bottom margins. */ + /** A horizontal line equidistant from the view's top and bottom margins. */ ALMarginAxisHorizontal = NSLayoutAttributeCenterYWithinMargins }; @@ -170,9 +188,9 @@ typedef NS_ENUM(NSInteger, ALAttribute) { ALAttributeWidth = ALDimensionWidth, /** The height of the view. */ ALAttributeHeight = ALDimensionHeight, - /** A vertical line through the middle of the view's left and right edges. */ + /** A vertical line equidistant from the view's left and right edges. */ ALAttributeVertical = ALAxisVertical, - /** A horizontal line through the middle of the view's top and bottom edges. */ + /** A horizontal line equidistant from the view's top and bottom edges. */ ALAttributeHorizontal = ALAxisHorizontal, /** A horizontal line at the baseline of the last line of text in the view. (For views that do not draw text, will be equivalent to ALEdgeBottom.) Same as ALAxisLastBaseline. */ ALAttributeBaseline = ALAxisBaseline, @@ -193,9 +211,9 @@ typedef NS_ENUM(NSInteger, ALAttribute) { ALAttributeMarginLeading = ALMarginLeading, /** The trailing margin of the view, based on the view's layoutMargins left/right (depending on language direction) inset. */ ALAttributeMarginTrailing = ALMarginTrailing, - /** A vertical line through the middle of the view's left and right margins. */ + /** A vertical line equidistant from the view's left and right margins. */ ALAttributeMarginAxisVertical = ALMarginAxisVertical, - /** A horizontal line through the middle of the view's top and bottom margins. */ + /** A horizontal line equidistant from the view's top and bottom margins. */ ALAttributeMarginAxisHorizontal = ALMarginAxisHorizontal #endif /* __PureLayout_MinBaseSDK_iOS_8_0 */ }; diff --git a/Example/Pods/PureLayout/README.md b/Example/Pods/PureLayout/README.md index 5eb3f7b..64a8611 100644 --- a/Example/Pods/PureLayout/README.md +++ b/Example/Pods/PureLayout/README.md @@ -1,16 +1,87 @@ # [![PureLayout](https://github.com/smileyborg/PureLayout/blob/master/Images/PureLayout.png?raw=true)](#) [![Build Status](http://img.shields.io/travis/smileyborg/PureLayout.svg?style=flat)](https://travis-ci.org/smileyborg/PureLayout) [![Test Coverage](http://img.shields.io/coveralls/smileyborg/PureLayout.svg?style=flat)](https://coveralls.io/r/smileyborg/PureLayout) [![Version](http://img.shields.io/cocoapods/v/PureLayout.svg?style=flat)](http://cocoapods.org/?q=PureLayout) [![Platform](http://img.shields.io/cocoapods/p/PureLayout.svg?style=flat)](http://cocoapods.org/?q=PureLayout) [![License](http://img.shields.io/cocoapods/l/PureLayout.svg?style=flat)](LICENSE) -The ultimate API for iOS & OS X Auto Layout — impressively simple, immensely powerful. PureLayout extends `UIView`/`NSView`, `NSArray`, and `NSLayoutConstraint` with a comprehensive Auto Layout API that is modeled after Apple's own frameworks. PureLayout is an Objective-C library that also works (and looks!) great with Swift using a bridging header. +The ultimate API for iOS & OS X Auto Layout — impressively simple, immensely powerful. PureLayout extends `UIView`/`NSView`, `NSArray`, and `NSLayoutConstraint` with a comprehensive Auto Layout API that is modeled after Apple's own frameworks. PureLayout is a cross-platform Objective-C library that works (and looks!) great in Swift. It is fully backwards-compatible with all versions of iOS and OS X that support Auto Layout. Writing Auto Layout code from scratch isn't easy. PureLayout provides a fully capable and developer-friendly interface for Auto Layout. It is designed for clarity and simplicity, and takes inspiration from the AutoLayout UI options available in Interface Builder while delivering far more flexibility. The API is also highly efficient, as it adds only a thin layer of third party code and is engineered for maximum performance. +### Table of Contents + 1. [Setup](#setup) + 1. [API Cheat Sheet](#api-cheat-sheet) + 1. [Usage](#usage) + * [Sample Code](#sample-code-swift) + * [Example Apps](#example-apps) + 1. [PureLayout vs. the rest](#purelayout-vs-the-rest) + 1. [Problems, Suggestions, Pull Requests?](#problems-suggestions-pull-requests) + +## Setup +### Compatibility +The current release of PureLayout supports all versions of iOS and OS X since the introduction of Auto Layout on each platform, in both Swift and Objective-C, with a single codebase! + +* Xcode + * Language Support: **Swift** *(any version)*, **Objective-C** + * Fully Compatible With: **Xcode 7.0** + * Minimum Supported Version: **Xcode 5.0** +* iOS + * Fully Compatible With: **iOS 9.0** + * Minimum Deployment Target: **iOS 6.0** +* OS X + * Fully Compatible With: **OS X 10.11** + * Minimum Deployment Target: **OS X 10.7** + +### Using [CocoaPods](http://cocoapods.org) +1. Add the pod `PureLayout` to your [Podfile](http://guides.cocoapods.org/using/the-podfile.html). + + ```ruby + pod 'PureLayout' + ``` + +1. Run `pod install` from Terminal, then open your app's `.xcworkspace` file to launch Xcode. +1. Import the `PureLayout.h` umbrella header. + * With `use_frameworks!` in your Podfile + * Swift: `import PureLayout` + * Objective-C: `#import ` (or with Modules enabled: `@import PureLayout;`) + * Without `use_frameworks!` in your Podfile + * Swift: Add `#import "PureLayout.h"` to your bridging header. + * Objective-C: `#import "PureLayout.h"` + +That's it - now go write some beautiful Auto Layout code! + +### Using [Carthage](https://github.com/Carthage/Carthage) +1. Add the `smileyborg/PureLayout` project to your [Cartfile](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile). + + ```ogdl + github "smileyborg/PureLayout" + ``` + +1. Run `carthage update`, then follow the [additional steps required](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application) to add the framework into your project. +1. Import the PureLayout framework/module. + * Swift: `import PureLayout` + * Objective-C: `#import ` (or with Modules enabled: `@import PureLayout;`) + +That's it - now go write some beautiful Auto Layout code! + +### Manually from GitHub +1. Download the source files in the [PureLayout subdirectory](PureLayout/PureLayout). +1. Add the source files to your Xcode project. +1. Import the `PureLayout.h` header. + * Swift: Add `#import "PureLayout.h"` to your bridging header. + * Objective-C: `#import "PureLayout.h"` + +That's it - now go write some beautiful Auto Layout code! + +### App Extensions +To use PureLayout in an App Extension, you need to do a bit of extra configuration to prevent usage of unavailable APIs. [Click here](https://github.com/smileyborg/PureLayout/wiki/App-Extensions) for more info. + +### Releases +Releases are tagged in the git commit history using [semantic versioning](http://semver.org). Check out the [releases and release notes](https://github.com/smileyborg/PureLayout/releases) for each version. + ## API Cheat Sheet This is just a handy overview of the core API methods. Explore the [header files](PureLayout/PureLayout) for the full API, and find the complete documentation above the implementation of each method in the corresponding .m file. A couple of notes: -* All of the public API methods are namespaced with the prefix `auto...`, which also makes it easy for Xcode to autocomplete as you type. -* Methods that create constraints also automatically install (activate) the constraint(s), then return the new constraint(s) for you to optionally store for later adjustment or removal. -* Many methods below also have a variant which includes a `relation:` parameter to make the constraint an inequality. +* All of the public API methods are namespaced with the prefix `auto...`, which also makes it easy for Xcode to autocomplete as you type. +* Methods that create constraints also automatically install (activate) the constraint(s), then return the new constraint(s) for you to optionally store for later adjustment or removal. +* Many methods below also have a variant which includes a `relation:` parameter to make the constraint an inequality. ### Attributes @@ -27,91 +98,88 @@ There are 5 specific attribute types, which are used throughout most of the API: Additionally, there is one generic attribute type, `ALAttribute`, which is effectively a union of all the specific types. You can think of this as the "supertype" of all of the specific attribute types, which means that it is always safe to cast a specific type to the generic `ALAttribute` type. (Note that the reverse is not true -- casting a generic ALAttribute to a specific attribute type is unsafe!) ### [`UIView`/`NSView`](PureLayout/PureLayout/ALView%2BPureLayout.h) - - + autoCreateConstraintsWithoutInstalling: - + autoSetPriority:forConstraints: - + autoSetIdentifier:forConstraints: // iOS 7.0+, OS X 10.9+ only - - autoSetContent(CompressionResistance|Hugging)PriorityForAxis: - - autoCenterInSuperview: - - autoAlignAxisToSuperviewAxis: - - autoCenterInSuperviewMargins: // iOS 8.0+ only - - autoAlignAxisToSuperviewMarginAxis: // iOS 8.0+ only - - autoPinEdgeToSuperviewEdge:(withInset:) - - autoPinEdgesToSuperviewEdgesWithInsets:(excludingEdge:) - - autoPinEdgeToSuperviewMargin: // iOS 8.0+ only - - autoPinEdgesToSuperviewMargins(ExcludingEdge:) // iOS 8.0+ only - - autoPinEdge:toEdge:ofView:(withOffset:) - - autoAlignAxis:toSameAxisOfView:(withOffset:) - - autoMatchDimension:toDimension:ofView:(withOffset:|withMultiplier:) - - autoSetDimension(s)ToSize: - - autoConstrainAttribute:toAttribute:ofView:(withOffset:|withMultiplier:) - - autoPinTo(Top|Bottom)LayoutGuideOfViewController:withInset: // iOS only +``` +- autoSetContent(CompressionResistance|Hugging)PriorityForAxis: +- autoCenterInSuperview(Margins): // Margins variant iOS 8.0+ only +- autoAlignAxisToSuperview(Margin)Axis: // Margin variant iOS 8.0+ only +- autoPinEdgeToSuperview(Edge:|Margin:)(withInset:) // Margin variant iOS 8.0+ only +- autoPinEdgesToSuperview(Edges|Margins)(WithInsets:)(excludingEdge:) // Margins variant iOS 8.0+ only +- autoPinEdge:toEdge:ofView:(withOffset:) +- autoAlignAxis:toSameAxisOfView:(withOffset:|withMultiplier:) +- autoMatchDimension:toDimension:ofView:(withOffset:|withMultiplier:) +- autoSetDimension(s)ToSize: +- autoConstrainAttribute:toAttribute:ofView:(withOffset:|withMultiplier:) +- autoPinTo(Top|Bottom)LayoutGuideOfViewController:withInset: // iOS only +``` ### [`NSArray`](PureLayout/PureLayout/NSArray%2BPureLayout.h) +``` +// Arrays of Constraints +- autoInstallConstraints +- autoRemoveConstraints +- autoIdentifyConstraints: // iOS 7.0+, OS X 10.9+ only - // Arrays of Constraints - - autoInstallConstraints - - autoRemoveConstraints - - autoIdentifyConstraints: // iOS 7.0+, OS X 10.9+ only - - // Arrays of Views - - autoAlignViewsToEdge: - - autoAlignViewsToAxis: - - autoMatchViewsDimension: - - autoSetViewsDimension:toSize: - - autoSetViewsDimensionsToSize: - - autoDistributeViewsAlongAxis:alignedTo:withFixedSpacing:(insetSpacing:)(matchedSizes:) - - autoDistributeViewsAlongAxis:alignedTo:withFixedSize:(insetSpacing:) +// Arrays of Views +- autoAlignViewsToEdge: +- autoAlignViewsToAxis: +- autoMatchViewsDimension: +- autoSetViewsDimension:toSize: +- autoSetViewsDimensionsToSize: +- autoDistributeViewsAlongAxis:alignedTo:withFixedSpacing:(insetSpacing:)(matchedSizes:) +- autoDistributeViewsAlongAxis:alignedTo:withFixedSize:(insetSpacing:) +``` ### [`NSLayoutConstraint`](PureLayout/PureLayout/NSLayoutConstraint%2BPureLayout.h) - - - autoInstall - - autoRemove - - autoIdentify: // iOS 7.0+, OS X 10.9+ only - -## Setup -*Note: PureLayout requires a minimum deployment target of iOS 6.0 or OS X 10.7* - -### Using [CocoaPods](http://cocoapods.org) -1. Add the pod `PureLayout` to your [Podfile](http://guides.cocoapods.org/using/the-podfile.html). - - pod 'PureLayout' - -2. Run `pod install` from Terminal, then open your app's `.xcworkspace` file to launch Xcode. -3. Import the `PureLayout.h` header. Typically, this should be written as `#import ` - -That's it - now go write some beautiful Auto Layout code! - -### Using [Carthage](https://github.com/Carthage/Carthage) -1. Add the `smileyborg/PureLayout` project to your [Cartfile](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfile). - - github "smileyborg/PureLayout" - -2. Run `carthage update`, then follow the [additional steps required](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application) to add the iOS and/or Mac frameworks into your project. -3. Import the PureLayout framework/module (with the appropriate name for the platform you're using it on). - * Using Modules: `@import PureLayout_iOS` or `@import PureLayout_Mac` - * Without Modules: `#import ` or `#import ` - -That's it - now go write some beautiful Auto Layout code! - -### Manually from GitHub -1. Download the source files in the [PureLayout subdirectory](PureLayout/PureLayout). -2. Add the source files to your Xcode project. -3. Import the `PureLayout.h` header. - -That's it - now go write some beautiful Auto Layout code! - -### App Extensions -To use PureLayout in an App Extension, you need to do a bit of extra configuration to prevent usage of unavailable APIs. [Click here](https://github.com/smileyborg/PureLayout/wiki/App-Extensions) for more info. - -### Releases -Releases are tagged in the git commit history using [semantic versioning](http://semver.org). Check out the [releases and release notes](https://github.com/smileyborg/PureLayout/releases) for each version. +``` ++ autoCreateAndInstallConstraints: ++ autoCreateConstraintsWithoutInstalling: ++ autoSetPriority:forConstraints: ++ autoSetIdentifier:forConstraints: // iOS 7.0+, OS X 10.9+ only +- autoIdentify: // iOS 7.0+, OS X 10.9+ only +- autoInstall +- autoRemove +``` ## Usage -### Example Project -Open the project included in the repository (requires Xcode 6 or higher). It contains [iOS](PureLayout/Example-iOS) (`Example-iOS` scheme) and [OS X](PureLayout/Example-Mac) (`Example-Mac` scheme) demos of the library being used in various scenarios. +### Sample Code (Swift) +PureLayout dramatically simplifies writing Auto Layout code. Let's take a quick look at some examples, using PureLayout from Swift. -On iOS, you can use different device simulators and rotate the device to see the constraints in action (as well as toggle the taller in-call status bar in the iOS Simulator). +Here's a constraint between two views created (and automatically activated) using PureLayout: + +```swift +view1.autoPinEdge(.Top, toEdge: .Bottom, ofView: view2) +``` + +Without PureLayout, here's the equivalent code you'd have to write using Apple's Foundation API directly: + +```swift +NSLayoutConstraint(item: view1, attribute: .Top, relatedBy: .Equal, toItem: view2, attribute: .Bottom, multiplier: 1.0, constant: 0.0).active = true +``` + +Many APIs of PureLayout create multiple constraints for you under the hood, letting you write highly readable layout code: + +```swift +// 2 constraints created & activated in one line! +logoImageView.autoCenterInSuperview() + +// 4 constraints created & activated in one line! +textContentView.autoPinEdgesToSuperviewEdgesWithInsets(UIEdgeInsets(top: 20.0, left: 5.0, bottom: 10.0, right: 5.0)) +``` + +PureLayout always returns the constraints it creates so you have full control: + +```swift +let constraint = skinnyView.autoMatchDimension(.Height, toDimension: .Width, ofView: tallView) +``` + +PureLayout supports all Auto Layout features including inequalities, priorities, layout margins, identifiers, and much more. It's a comprehensive, developer-friendly way to use Auto Layout. + +Check out the example apps below for many more demos of PureLayout in use. + +### Example Apps +Open the project included in the repository (requires Xcode 6 or higher). It contains [iOS](PureLayout/Example-iOS) (`Example-iOS` scheme) and [OS X](PureLayout/Example-Mac) (`Example-Mac` scheme) demos of the library being used in various scenarios. The demos in the iOS example app make a great introductory tutorial to PureLayout -- run each demo, review the code used to implement it, then practice by making some changes of your own to the demo code. + +Each demo in the iOS example app has a Swift and Objective-C version. **To compile & run the Swift demos, you must use Xcode 7.0 or higher (Swift 2.0) and choose the `Example-iOS-Xcode7` scheme.** When you run the example app, you can easily switch between using the Swift and Objective-C versions of the demos. To see the constraints in action while running the iOS demos, try using different device simulators, rotating the device to different orientations, as well as toggling the taller in-call status bar in the iOS Simulator. On OS X, while running the app, press any key to cycle through the demos. You can resize the window to see the constraints in action. @@ -119,30 +187,33 @@ On OS X, while running the app, press any key to cycle through the demos. You ca Check out some [Tips and Tricks](https://github.com/smileyborg/PureLayout/wiki/Tips-and-Tricks) to keep in mind when using the API. ## PureLayout vs. the rest -An overview of the Auto Layout options available, ordered from the lowest- to highest-level of abstraction. +There are quite a few different ways to implement Auto Layout. Here is a quick overview of the available options: -* Apple [NSLayoutConstraint SDK API](https://developer.apple.com/library/ios/documentation/AppKit/Reference/NSLayoutConstraint_Class/index.html#//apple_ref/occ/clm/NSLayoutConstraint/constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:) - * Pros: Raw power - * Cons: Extremely verbose, tedious to write, difficult to read -* Apple [Visual Format Language](https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/VisualFormatLanguage/VisualFormatLanguage.html) - * Pros: Concise, convenient - * Cons: Doesn't support some use cases, incomplete compile-time checks, must learn syntax, hard to debug -* Apple Interface Builder - * Pros: Visual, simple - * Cons: Difficult for complex layouts, cannot dynamically set constraints at runtime, encourages hardcoded magic numbers, not always WYSIWYG -* **PureLayout** - * Pros: Simple, efficient, minimal third party code, consistent with Cocoa API style, compatible with Objective-C and Swift codebases - * Cons: Not the most concise expression of layout code -* High-level Auto Layout Libraries/DSLs ([Cartography](https://github.com/robb/Cartography), [SnapKit](https://github.com/SnapKit/SnapKit), [KeepLayout](https://github.com/iMartinKiss/KeepLayout)) - * Pros: Very clean, concise, and convenient - * Cons: Unique API style is foreign to Cocoa APIs, mixed compatibility with Objective-C & Swift, greater dependency on third party code +* Apple [NSLayoutConstraint SDK API](https://developer.apple.com/library/ios/documentation/AppKit/Reference/NSLayoutConstraint_Class/index.html#//apple_ref/occ/clm/NSLayoutConstraint/constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:) + * Pros: Raw power + * Cons: Extremely verbose; tedious to write; difficult to read +* Apple [Visual Format Language](https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/VisualFormatLanguage/VisualFormatLanguage.html) + * Pros: Concise; convenient + * Cons: Doesn't support some use cases; lacks compile-time checking and safety; must learn syntax; hard to debug +* Apple Interface Builder + * Pros: Visual; interactive; provides compile-time layout checking + * Cons: Difficult for complex layouts; cannot dynamically set constraints at runtime; encourages hardcoded magic numbers; not always WYSIWYG +* Apple [NSLayoutAnchor SDK API](https://developer.apple.com/library/prerelease/ios/documentation/AppKit/Reference/NSLayoutAnchor_ClassReference/index.html) + * Pros: Clean, readable, and type-safe API for creating individual constraints + * Cons: Only available in iOS 9.0 and OS X 10.11 and higher; requires manually activating each constraint; no API for creating multiple constraints at once +* **PureLayout** + * Pros: Compatible with Objective-C and Swift codebases; consistent with Cocoa API style; cross-platform API and implementation shared across iOS and OS X; fully backwards-compatible to iOS 6 & OS X 10.7; easy to use; type-safe; efficient + * Cons: Not the most concise expression of layout code +* High-level Auto Layout Libraries/DSLs ([Cartography](https://github.com/robb/Cartography), [SnapKit](https://github.com/SnapKit/SnapKit), [KeepLayout](https://github.com/iMartinKiss/KeepLayout)) + * Pros: Very clean, concise, and convenient + * Cons: Unique API style is foreign to Apple's APIs; mixed compatibility with Objective-C & Swift; greater dependency on third party code PureLayout takes a balanced approach to Auto Layout that makes it well suited for any project. ## Problems, Suggestions, Pull Requests? -Please open a [new Issue here](https://github.com/smileyborg/PureLayout/issues/new) if you run into an issue, have a feature request, or want to share a comment. Note that general Auto Layout questions should be asked on [Stack Overflow](http://stackoverflow.com). +Please open a [new Issue here](https://github.com/smileyborg/PureLayout/issues/new) if you run into a problem specific to PureLayout, have a feature request, or want to share a comment. Note that general Auto Layout questions should be asked on [Stack Overflow](http://stackoverflow.com). -If you're considering taking on significant changes or additions to the project, please communicate in advance by opening a new Issue. This allows everyone to get onboard with upcoming changes, ensures that changes align with the project's design philosophy, and avoids duplicated work. +Pull requests are encouraged and greatly appreciated! Please try to maintain consistency with the existing code style. If you're considering taking on significant changes or additions to the project, please communicate in advance by opening a new Issue. This allows everyone to get onboard with upcoming changes, ensures that changes align with the project's design philosophy, and avoids duplicated work. ## Meta Designed & maintained by Tyler Fox ([@smileyborg](https://twitter.com/smileyborg)). Distributed with the MIT license. diff --git a/Example/Pods/Target Support Files/PureLayout/Info.plist b/Example/Pods/Target Support Files/PureLayout/Info.plist index 88f5e5f..dc92af9 100644 --- a/Example/Pods/Target Support Files/PureLayout/Info.plist +++ b/Example/Pods/Target Support Files/PureLayout/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.0.6 + 3.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Pods/Target Support Files/TabBarPicker/TabBarPicker-umbrella.h b/Example/Pods/Target Support Files/TabBarPicker/TabBarPicker-umbrella.h index a8605da..98fa812 100644 --- a/Example/Pods/Target Support Files/TabBarPicker/TabBarPicker-umbrella.h +++ b/Example/Pods/Target Support Files/TabBarPicker/TabBarPicker-umbrella.h @@ -6,6 +6,9 @@ #import "TabBarSubItem.h" #import "MMCPSScrollView.h" #import "NSString+HexColor.h" +#import "SharedLocationManager.h" +#import "UIButton+BackgroundColor.h" +#import "UIImage+Color.h" FOUNDATION_EXPORT double TabBarPickerVersionNumber; FOUNDATION_EXPORT const unsigned char TabBarPickerVersionString[]; diff --git a/Example/TabBarPicker/TabBarPickerViewController.m b/Example/TabBarPicker/TabBarPickerViewController.m index 692c592..a6084b9 100644 --- a/Example/TabBarPicker/TabBarPickerViewController.m +++ b/Example/TabBarPicker/TabBarPickerViewController.m @@ -24,40 +24,49 @@ if (self) { - TabBarSubItem *subItem1 = [TabBarSubItem tabBarSubItemWithName:@"Peppe"]; - TabBarSubItem *subItem2 = [TabBarSubItem tabBarSubItemWithName:@"Peppe1"]; - TabBarSubItem *subItem3 = [TabBarSubItem tabBarSubItemWithName:@"Peppe2"]; - TabBarSubItem *subItem4 = [TabBarSubItem tabBarSubItemWithName:@"Peppe3"]; - TabBarSubItem *subItem5 = [TabBarSubItem tabBarSubItemWithName:@"Peppe4"]; - TabBarSubItem *subItem6 = [TabBarSubItem tabBarSubItemWithName:@"Peppe5"]; - TabBarSubItem *subItem7 = [TabBarSubItem tabBarSubItemWithName:@"Peppe6"]; + TabBarSubItem *subItem1 = [TabBarSubItem tabBarSubItemWithName:@"Peppe" andValue:@"Peppe"]; + TabBarSubItem *subItem2 = [TabBarSubItem tabBarSubItemWithName:@"Peppe1" andValue:@"Peppe1"]; + TabBarSubItem *subItem3 = [TabBarSubItem tabBarSubItemWithName:@"Peppe2" andValue:@"Peppe2"]; + TabBarSubItem *subItem4 = [TabBarSubItem tabBarSubItemWithName:@"Peppe3" andValue:@"Peppe3"]; + TabBarSubItem *subItem5 = [TabBarSubItem tabBarSubItemWithName:@"Peppe4" andValue:@"Peppe4"]; + TabBarSubItem *subItem6 = [TabBarSubItem tabBarSubItemWithName:@"Peppe5" andValue:@"Peppe5"]; + TabBarSubItem *subItem7 = [TabBarSubItem tabBarSubItemWithName:@"Peppe6" andValue:@"Peppe6"]; + TabBarPickerSubItemsView *locationSubview = [[TabBarPickerSubItemsView alloc] initWithType:TabBarPickerSubItemsViewTypeButtons subItems:@[subItem1,subItem2,subItem3,subItem4,subItem5,subItem6,subItem7] needsLocalization:YES]; - TabBarItem *location = [[TabBarItem alloc] initWithSubItems:@[subItem1,subItem2,subItem3,subItem4,subItem5,subItem6,subItem7]]; + TabBarItem *location = [[TabBarItem alloc] initWithSubItemView:locationSubview]; [location setItemName:@"Location"]; [location setImage:[UIImage imageNamed:@"location"]]; [location setSelectedImage:[UIImage imageNamed:@"location_selected"]]; [location setHighlightedImage:[UIImage imageNamed:@"location_highlighted"]]; - TabBarItem *calendar = [[TabBarItem alloc] initWithSubItems:@[subItem1,subItem2,subItem3,subItem4,subItem5,subItem6,subItem7]]; + TabBarPickerSubItemsView *calendarSubView = [[TabBarPickerSubItemsView alloc] initWithType:TabBarPickerSubItemsViewTypeButtons subItems:@[subItem1,subItem2,subItem3,subItem4,subItem5,subItem6,subItem7]]; + + TabBarItem *calendar = [[TabBarItem alloc] initWithSubItemView:calendarSubView]; [calendar setItemName:@"Calendar"]; [calendar setImage:[UIImage imageNamed:@"calendar"]]; [calendar setSelectedImage:[UIImage imageNamed:@"calendar_selected"]]; [calendar setHighlightedImage:[UIImage imageNamed:@"calendar_highlighted"]]; - TabBarItem *type = [[TabBarItem alloc] initWithSubItems:@[subItem1,subItem2,subItem3,subItem4,subItem5,subItem6,subItem7]]; + TabBarPickerSubItemsView *typeSubView = [[TabBarPickerSubItemsView alloc] initWithType:TabBarPickerSubItemsViewTypeButtons subItems:@[subItem1,subItem2,subItem3,subItem4,subItem5,subItem6,subItem7]]; + + TabBarItem *type = [[TabBarItem alloc] initWithSubItemView:typeSubView]; [type setItemName:@"Type"]; [type setImage:[UIImage imageNamed:@"type"]]; [type setSelectedImage:[UIImage imageNamed:@"type_selected"]]; [type setHighlightedImage:[UIImage imageNamed:@"type_highlighted"]]; - TabBarItem *price = [[TabBarItem alloc] initWithSubItems:@[subItem1,subItem2,subItem3,subItem4,subItem5,subItem6,subItem7]]; + TabBarPickerSubItemsView *priceSubView = [[TabBarPickerSubItemsView alloc] initWithType:TabBarPickerSubItemsViewTypeButtons subItems:@[subItem1,subItem2,subItem3,subItem4,subItem5,subItem6,subItem7]]; + + TabBarItem *price =[[TabBarItem alloc] initWithSubItemView:priceSubView]; [price setItemName:@"Price"]; [price setImage:[UIImage imageNamed:@"price"]]; [price setSelectedImage:[UIImage imageNamed:@"price_selected"]]; [price setHighlightedImage:[UIImage imageNamed:@"price_highlighted"]]; - TabBarItem *allergen = [[TabBarItem alloc] initWithSubItems:@[subItem1,subItem2,subItem3,subItem4,subItem5,subItem6,subItem7]]; + TabBarPickerSubItemsView *allergenSubView = [[TabBarPickerSubItemsView alloc] initWithType:TabBarPickerSubItemsViewTypeButtons subItems:@[subItem1,subItem2,subItem3,subItem4,subItem5,subItem6,subItem7]]; + + TabBarItem *allergen = [[TabBarItem alloc] initWithSubItemView:allergenSubView]; [allergen setItemName:@"Allergen"]; [allergen setImage:[UIImage imageNamed:@"allergen"]]; [allergen setSelectedImage:[UIImage imageNamed:@"allergen_selected"]]; @@ -100,7 +109,7 @@ - (void) viewDidAppear:(BOOL)animated { - [tabbar selectItem:0]; + //[tabbar selectItem:0]; /*TabBarSubItem *subItem1 = [TabBarSubItem tabBarSubItemWithName:@"Peppe"]; TabBarSubItem *subItem2 = [TabBarSubItem tabBarSubItemWithName:@"Peppe1"]; diff --git a/Pod/Classes/TabBarItem.h b/Pod/Classes/TabBarItem.h index 6f44352..2f8de4b 100644 --- a/Pod/Classes/TabBarItem.h +++ b/Pod/Classes/TabBarItem.h @@ -8,6 +8,7 @@ #import #import "TabBarSubItem.h" +#import "TabBarPickerSubItemsView.h" @class TabBarItem; @@ -25,14 +26,17 @@ * Represents the image visible in picker when item is not selected. */ @property (nonatomic, strong) UIImage *image; + /** * Represents the image visible in picker when item is selected. */ @property (nonatomic, strong) UIImage *selectedImage; + /** * Represents the image visible in picker when item is highlited. */ @property (nonatomic, strong) UIImage *highlightedImage; + /** * Represents the color of picker item when is highlited. */ @@ -42,11 +46,15 @@ * Represents the name of the item that can be shown in picker. */ @property (nonatomic, strong) NSString *itemName; + /** * Represents the sub items that appeare when you select the item in picker. */ -@property (nonatomic, strong) NSMutableArray *subItems; +@property (nonatomic, strong) TabBarPickerSubItemsView *itemSubView; +/** + * <#Description#> + */ @property (nonatomic, assign) id delegate; /** @@ -56,8 +64,13 @@ * * @return <#return value description#> */ -- (instancetype) initWithSubItems:(NSArray*) array; +- (instancetype) initWithSubItemView:(TabBarPickerSubItemsView*) itemSubView; +/** + * <#Description#> + * + * @param highlighted <#highlighted description#> + */ - (void) setHighlighted:(BOOL) highlighted; diff --git a/Pod/Classes/TabBarItem.m b/Pod/Classes/TabBarItem.m index 008c862..d5bce93 100644 --- a/Pod/Classes/TabBarItem.m +++ b/Pod/Classes/TabBarItem.m @@ -10,6 +10,7 @@ #import #import "NSString+HexColor.h" #import "UIButton+BackgroundColor.h" +#import @interface TabBarItem() @@ -17,32 +18,34 @@ @property (nonatomic, strong) UIButton *itemButton; @property (nonatomic) UIDeviceOrientation orientation; @property (nonatomic, assign) BOOL didSetupConstraints; +@property (nonatomic, strong) UIView *switchBarView; +@property (nonatomic, strong) UISwitch *itemSwich; +@property (nonatomic, strong) UILabel *switchBarLabel; @end @implementation TabBarItem -- (instancetype) initWithSubItems:(NSArray*) array { +- (instancetype) initWithSubItemView:(TabBarPickerSubItemsView*) itemSubView { + + return [self initWithSubItemView:itemSubView needLocalization:NO]; +} + +- (instancetype) initWithSubItemView:(TabBarPickerSubItemsView*) itemSubView needLocalization:(BOOL) needLocalitazion { self = [self initForAutoLayout]; if (self) { - NSAssert(array, @"SubItemsArray cannot be nil"); + NSAssert(itemSubView, @"itemSubView cannot be nil"); [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange:) name: UIDeviceOrientationDidChangeNotification object: nil]; _orientation = [[UIDevice currentDevice] orientation]; + _itemSubView = itemSubView; _itemButton = [[UIButton alloc] initForAutoLayout]; [_itemButton addTarget:self action:@selector(itemButtonTapped) forControlEvents:UIControlEventTouchUpInside]; [_itemButton setBackgroundColor:[@"ff4e50" colorFromHex] forState:UIControlStateHighlighted]; [self addSubview:_itemButton]; - - _subItems = [[NSMutableArray alloc] init]; - - for (NSObject *subItem in array) { - if ([subItem isKindOfClass:[TabBarSubItem class]]) { - [_subItems addObject:subItem]; - } - } + } return self; } @@ -51,9 +54,10 @@ //[_itemButton autoPinEdgesToSuperviewMargins]; if (!_didSetupConstraints) { - [_itemButton autoCenterInSuperview]; - [_itemButton autoMatchDimension:ALDimensionHeight toDimension:ALDimensionHeight ofView:self]; - [_itemButton autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self]; + [_itemButton autoCenterInSuperview]; + [_itemButton autoMatchDimension:ALDimensionHeight toDimension:ALDimensionHeight ofView:self]; + [_itemButton autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self]; + _didSetupConstraints = YES; } } @@ -88,24 +92,26 @@ - (void) setHighlighted:(BOOL) highlighted { [_itemButton setHighlighted:highlighted]; - - NSLog(@"%@",[NSNumber numberWithBool:[_itemButton isSelected]]); - NSLog(@"%@",[NSNumber numberWithBool:[_itemButton isHighlighted]]); - NSLog(@"%@",[NSNumber numberWithBool:[_itemButton isEnabled]]); - NSLog(@"%ld",_itemButton.state); } - (void) itemButtonTapped { if (_delegate && [_delegate respondsToSelector:@selector(tabBarItemSelected:)]) { [_delegate tabBarItemSelected:self]; } - NSLog(@"%@",[NSNumber numberWithBool:[_itemButton isSelected]]); - NSLog(@"%@",[NSNumber numberWithBool:[_itemButton isHighlighted]]); - NSLog(@"%@",[NSNumber numberWithBool:[_itemButton isEnabled]]); - NSLog(@"%ld",_itemButton.state); - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.002 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [_itemButton setHighlighted:YES]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.00001 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self setHighlighted:YES]; }); } + + +- (void)openSettings +{ + BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL); + if (canOpenSettings) { + NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; + [[UIApplication sharedApplication] openURL:url]; + } +} + @end diff --git a/Pod/Classes/TabBarPicker.m b/Pod/Classes/TabBarPicker.m index 719f73a..43081c1 100644 --- a/Pod/Classes/TabBarPicker.m +++ b/Pod/Classes/TabBarPicker.m @@ -9,7 +9,7 @@ #import "TabBarPicker.h" #import #import "TabBarPickerSubItemsView.h" -#import "MMCPSScrollView.h" +#import "ToucheableScrollView.h" #import #import "NSString+HexColor.h" @@ -24,7 +24,9 @@ @property (nonatomic, strong) NSLayoutConstraint *hideConstraint; @property (nonatomic, strong) NSMutableArray *tabBarItemsConstraints; @property (nonatomic, strong) TabBarItem *selectedTabBarItem; -@property (nonatomic, strong) MMCPSScrollView *subItemScrollView; + +@property (nonatomic, strong) ToucheableScrollView *subItemScrollView; +@property (assign, nonatomic) int totalPages; @end @@ -46,7 +48,7 @@ self = [self initForAutoLayout]; if (self) { - + [self setUserInteractionEnabled:YES]; _itemSpacing = 10; _layoutRelation = relation; _position = position; @@ -77,47 +79,12 @@ } } - _subItemScrollView = [[MMCPSScrollView alloc] initForAutoLayout]; - [_subItemScrollView setType:MMCPSScrollHorizontal]; - [_subItemScrollView setMMCPSDelegate:self]; + _subItemScrollView = [[ToucheableScrollView alloc] initForAutoLayout]; [_subItemScrollView setPagingEnabled:YES]; [_subItemScrollView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; + [_subItemScrollView setUserInteractionEnabled:YES]; [self addSubview:_subItemScrollView]; - - if ([_tabBarItems count] > 0) { - int i = 0; - for (TabBarItem *item in _tabBarItems) { - TabBarPickerSubItemsView *subItemSelector = [[TabBarPickerSubItemsView alloc] init]; - [subItemSelector setDelegate:self]; - switch (i) { - case 0: - [subItemSelector setBackgroundColor:[UIColor lightGrayColor]]; - break; - case 1:{ - [subItemSelector setBackgroundColor:[UIColor redColor]]; - } - break; - case 2:{ - [subItemSelector setBackgroundColor:[UIColor greenColor]]; - } - break; - case 3: { - [subItemSelector setBackgroundColor:[UIColor yellowColor]]; - } - break; - default:{ - [subItemSelector setBackgroundColor:[UIColor blueColor]]; - } - break; - } - i++; - [_subItemScrollView addSubview:subItemSelector]; - - [_subItemSelectors addObject:subItemSelector]; - } - [_subItemScrollView setPageSize:1]; - } } [self updateConstraintsIfNeeded]; @@ -126,7 +93,7 @@ } - (void) layoutSubviews { - + if (!_didSetupConstraints) { switch (_position) { @@ -185,23 +152,71 @@ [_tabBarItemsConstraints addObjectsFromArray:[_tabBarItems autoDistributeViewsAlongAxis:ALAxisHorizontal alignedTo:ALAttributeHorizontal withFixedSpacing:_itemSpacing insetSpacing:YES matchedSizes:YES]]; - - [_subItemScrollView autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self]; [_subItemScrollView autoSetDimension:ALDimensionHeight toSize:343]; [_subItemScrollView autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:[_tabBarItems firstObject]]; [_subItemScrollView autoAlignAxisToSuperviewAxis:ALAxisVertical]; - //[_subItemScrollView setPageSize:343]; - [_subItemScrollView setSegmentSize:[[UIScreen mainScreen] bounds].size.width]; + if ([_tabBarItems count] > 0) { + int i = 0; + + TabBarItem *prevItem; + for (TabBarItem *item in _tabBarItems) { + + if ([item itemSubView]) { + + [[item itemSubView] setDelegate:self]; + [[item itemSubView] setTabBarItemReference:self]; + switch (i) { + case 0: + [[item itemSubView] setBackgroundColor:[UIColor lightGrayColor]]; + break; + case 1:{ + [[item itemSubView] setBackgroundColor:[UIColor redColor]]; + } + break; + case 2:{ + [[item itemSubView] setBackgroundColor:[UIColor greenColor]]; + } + break; + case 3: { + [[item itemSubView] setBackgroundColor:[UIColor yellowColor]]; + } + break; + default:{ + [[item itemSubView] setBackgroundColor:[UIColor blueColor]]; + } + break; + } + i++; + [_subItemScrollView addSubview:[item itemSubView]]; + + [_subItemSelectors addObject:[item itemSubView]]; + + if (!prevItem) { + // Align to contentView + [pageLabel autoPinEdgeToSuperviewEdge:ALEdgeLeft]; + } else { + // Align to prev label + [pageLabel autoConstrainAttribute:ALAttributeLeading toAttribute:ALAttributeTrailing ofView:prevLabel]; + } + + if (i == pages - 1) { + // Last page + [pageLabel autoPinEdgeToSuperviewEdge:ALEdgeRight]; + } + + prevItem = item; + } + } + [_subItemScrollView setPageSize:1]; + } - [_subItemSelectors autoDistributeViewsAlongAxis:ALAxisHorizontal alignedTo:ALAttributeHorizontal withFixedSpacing:0 insetSpacing:YES matchedSizes:YES]; - [_subItemSelectors autoSetViewsDimension:ALDimensionHeight toSize:343]; - [_subItemSelectors autoSetViewsDimension:ALDimensionWidth toSize:[[UIScreen mainScreen] bounds].size.width]; + //[_subItemSelectors autoDistributeViewsAlongAxis:ALAxisHorizontal alignedTo:ALAttributeHorizontal withFixedSpacing:0 insetSpacing:YES matchedSizes:YES]; - [[_subItemSelectors firstObject] autoAlignAxisToSuperviewAxis:ALAxisHorizontal]; + //[[_subItemSelectors firstObject] autoAlignAxisToSuperviewAxis:ALAxisHorizontal]; - [_subItemScrollView setContentSize:CGSizeMake([_subItemSelectors count]*[[UIScreen mainScreen] bounds].size.width , 343)]; + //[_subItemScrollView layoutIfNeeded]; } break; @@ -209,7 +224,7 @@ _didSetupConstraints = YES; - + [self updateConstraintsIfNeeded]; } } @@ -374,7 +389,7 @@ } _selectedTabBarItem = selectedItem; - [_subItemScrollView scrollToPage:[_tabBarItems indexOfObject:_selectedTabBarItem]]; + [_subItemScrollView scrollToPage:[_tabBarItems indexOfObject:_selectedTabBarItem]+1]; } #pragma mark - diff --git a/Pod/Classes/TabBarPickerSubItemsView.h b/Pod/Classes/TabBarPickerSubItemsView.h index c849984..6061c75 100644 --- a/Pod/Classes/TabBarPickerSubItemsView.h +++ b/Pod/Classes/TabBarPickerSubItemsView.h @@ -7,8 +7,9 @@ // #import -#import "TabBarItem.h" +@class TabBarItem; +@class TabBarSubItem; @class TabBarPickerSubItemsView; typedef NS_ENUM(NSInteger, TabBarPickerSubItemsViewType) { @@ -23,7 +24,7 @@ typedef NS_ENUM(NSInteger, TabBarPickerSubItemsViewType) { @required -- (void) tabarPickerSubItemsView:(TabBarPickerSubItemsView*) tabarPickerSubItemsView didSelect:(TabBarItem*) item; +- (void) tabarPickerSubItemsView:(TabBarPickerSubItemsView*) tabarPickerSubItemsView didSelectTabBarSubItem:(TabBarSubItem*) subItem forTabBarItem:(TabBarItem*) item; @end @@ -33,6 +34,21 @@ typedef NS_ENUM(NSInteger, TabBarPickerSubItemsViewType) { * <#Description#> */ @property (nonatomic, assign) id delegate; +/** + * <#Description#> + */ +@property (nonatomic) BOOL needsLocalization; +/** + * <#Description#> + */ +@property (nonatomic, strong) UIView *localizationView; +/** + * <#Description#> + */ +@property (nonatomic, strong) TabBarItem *tabBarItemReference; +- (instancetype) initWithType:(TabBarPickerSubItemsViewType) type subItems:(NSArray*) subItems; + +- (instancetype) initWithType:(TabBarPickerSubItemsViewType) type subItems:(NSArray*) subItems needsLocalization:(BOOL) needsLocalization; @end diff --git a/Pod/Classes/TabBarPickerSubItemsView.m b/Pod/Classes/TabBarPickerSubItemsView.m index 4cb0ff3..dfa8827 100644 --- a/Pod/Classes/TabBarPickerSubItemsView.m +++ b/Pod/Classes/TabBarPickerSubItemsView.m @@ -8,23 +8,83 @@ #import "TabBarPickerSubItemsView.h" #import +#import "TabBarItem.h" +#import "NSString+HexColor.h" +#import "SharedLocationManager.h" @interface TabBarPickerSubItemsView() @property (nonatomic, assign) BOOL didSetupConstraints; @property (nonatomic) TabBarPickerSubItemsViewType type; -@property (nonatomic, strong) NSMutableArray *elementsArray; +@property (nonatomic, strong) NSMutableArray *subItems; +@property (nonatomic, strong) UIView *switchBarView; +@property (nonatomic, strong) UISwitch *itemSwich; +@property (nonatomic, strong) UILabel *switchBarLabel; +@property (nonatomic, strong) UIButton *localizationButton; @end @implementation TabBarPickerSubItemsView -- (instancetype) initWithType:(TabBarPickerSubItemsViewType) type andElements:(NSArray*) elements { +- (instancetype) initWithType:(TabBarPickerSubItemsViewType) type subItems:(NSArray*) subItems { + return [self initWithType:type subItems:subItems needsLocalization:NO]; +} + +- (instancetype) initWithType:(TabBarPickerSubItemsViewType) type subItems:(NSArray*) subItems needsLocalization:(BOOL) needsLocalization{ + self = [self initForAutoLayout]; if (self) { + [self setUserInteractionEnabled:YES]; _type = type; - _elementsArray = [[NSMutableArray alloc] initWithArray:elements]; + _needsLocalization = needsLocalization; + _switchBarView = [[UIView alloc] initForAutoLayout]; + [_switchBarView setBackgroundColor:[@"f7f7f7" colorFromHex]]; + + _switchBarLabel = [[UILabel alloc] initForAutoLayout]; + [_switchBarLabel setTextColor:[@"999999" colorFromHex]]; + [_switchBarLabel setText:NSLocalizedString(@"Distance", @"")]; + [_switchBarView addSubview:_switchBarLabel]; + + _itemSwich = [[UISwitch alloc] initForAutoLayout]; + [_itemSwich setOnTintColor:[@"ff4e50" colorFromHex]]; + + [_itemSwich.layer setBorderWidth:2]; + [_itemSwich.layer setBorderColor:[[@"cccccc" colorFromHex] CGColor]]; + [_itemSwich.layer setCornerRadius:_itemSwich.frame.size.height/2]; + [_itemSwich setUserInteractionEnabled:YES]; + [_itemSwich addTarget:self action:@selector(changeSwitch:) forControlEvents:UIControlEventValueChanged]; + [_switchBarView addSubview:_itemSwich]; + + if (_needsLocalization) { + + _localizationView = [[UIView alloc] initForAutoLayout]; + [_localizationView setBackgroundColor:[UIColor purpleColor]]; + [_localizationView setAlpha:0]; + + + _localizationButton = [[UIButton alloc] initForAutoLayout]; + [_localizationButton setTitle:NSLocalizedString(@"ATTIVA LOCALIZZAZIONE DISPOSITIVO", @"") forState:UIControlStateNormal]; + [_localizationButton addTarget:self action:@selector(openSettings) forControlEvents:UIControlEventTouchUpInside]; + [_localizationButton setBackgroundColor:[UIColor whiteColor]]; + [_localizationButton.layer setBorderColor:[[@"ff4e50" colorFromHex] CGColor]]; + [_localizationButton.layer setBorderWidth:1]; + [_localizationButton setTitleColor:[@"ff4e50" colorFromHex] forState:UIControlStateNormal]; + [_localizationButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 5)]; + [_localizationButton.titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:14]]; + + [_localizationView addSubview:_localizationButton]; + + [self addSubview:_localizationView]; + } + + /*_subItems = [[NSMutableArray alloc] init]; + for (NSObject *subItem in subItems) { + if ([subItem isKindOfClass:[TabBarSubItem class]]) { + [_subItems addObject:subItem]; + } + }*/ + [self addSubview:_switchBarView]; } [self updateConstraintsIfNeeded]; @@ -35,13 +95,77 @@ - (void) layoutSubviews { + [UIView animateWithDuration:0.5 animations:^{ + [_localizationView setAlpha:[[NSNumber numberWithBool:[[SharedLocationManager sharedManager] localizationIsAuthorized]] floatValue]]; + }]; + if (!_didSetupConstraints) { [self autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self.superview withOffset:0 relation:NSLayoutRelationEqual]; [self autoMatchDimension:ALDimensionHeight toDimension:ALDimensionHeight ofView:self.superview withOffset:0 relation:NSLayoutRelationEqual]; + [_switchBarView autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self.superview]; + [_switchBarView autoSetDimension:ALDimensionHeight toSize:40]; + [_switchBarView autoPinEdge:ALEdgeTop toEdge:ALEdgeTop ofView:self]; + [_switchBarView autoAlignAxisToSuperviewAxis:ALAxisVertical]; + + [_switchBarLabel autoPinEdge:ALEdgeLeft toEdge:ALEdgeLeft ofView:self withOffset:20]; + [_switchBarLabel autoAlignAxisToSuperviewAxis:ALAxisHorizontal]; + + [_itemSwich autoPinEdge:ALEdgeRight toEdge:ALEdgeRight ofView:_switchBarView withOffset:-20]; + [_itemSwich autoAlignAxisToSuperviewAxis:ALAxisHorizontal]; + + [_localizationView autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:_itemSwich withOffset:4]; + [_localizationView autoPinEdge:ALEdgeBottom toEdge:ALEdgeBottom ofView:self]; + [_localizationView autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self]; + + [_localizationButton autoAlignAxisToSuperviewAxis:ALAxisHorizontal]; + [_localizationButton autoAlignAxisToSuperviewAxis:ALAxisVertical]; + [_localizationButton autoSetDimension:ALDimensionHeight toSize:44 relation:NSLayoutRelationLessThanOrEqual]; + [_localizationButton autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self withMultiplier:0.8]; + _didSetupConstraints = YES; } + NSLog(@"%f %f",self.frame.size.width,self.frame.size.height); + NSLog(@"%f %f",_switchBarView.frame.size.width,_switchBarView.frame.size.height); + [_localizationButton.layer setCornerRadius:_localizationButton.frame.size.height/2]; +} + +- (void) enableLocalizationWithView:(UIView *) localizationView { + _needsLocalization = YES; + _localizationView = localizationView; + + [self addSubview:_localizationView]; +} + + +- (void)openSettings +{ + BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL); + if (canOpenSettings) { + NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; + [[UIApplication sharedApplication] openURL:url]; + } +} + +- (void)changeSwitch:(UISwitch*)sender{ + + if([sender isOn]){ + NSLog(@"Switch is ON"); + } else{ + NSLog(@"Switch is OFF"); + } + +} + +- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event +{ + [super touchesEnded: touches withEvent: event]; +} + +- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + + [super touchesBegan: touches withEvent:event]; } @end diff --git a/Pod/Classes/TabBarSubItem.h b/Pod/Classes/TabBarSubItem.h index f3258a3..12ab1c2 100644 --- a/Pod/Classes/TabBarSubItem.h +++ b/Pod/Classes/TabBarSubItem.h @@ -12,7 +12,8 @@ @property (nonatomic, strong) NSString *name; @property (nonatomic, strong) UIButton *subItemButton; +@property (nonatomic, strong) id value; -+ (instancetype) tabBarSubItemWithName:(NSString*)name; ++ (instancetype) tabBarSubItemWithName:(NSString*)name andValue:(id) value;; @end diff --git a/Pod/Classes/TabBarSubItem.m b/Pod/Classes/TabBarSubItem.m index 792aa97..c9d966a 100644 --- a/Pod/Classes/TabBarSubItem.m +++ b/Pod/Classes/TabBarSubItem.m @@ -19,28 +19,28 @@ @implementation TabBarSubItem -- (instancetype) initWithName:(NSString *) name { +- (instancetype) initWithName:(NSString *) name andValue:(id)value { self = [self initForAutoLayout]; if (self) { - [[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(deviceOrientationDidChange:) name: UIDeviceOrientationDidChangeNotification object: nil]; + //[[NSNotificationCenter defaultCenter] addObserver: self selector:@selector(deviceOrientationDidChange:) name: UIDeviceOrientationDidChangeNotification object: nil]; _name = name; - _subItemButton = [[UIButton alloc] initForAutoLayout]; [_subItemButton setTitle:_name forState:UIControlStateNormal]; + _value = value; } return self; } -+ (instancetype) tabBarSubItemWithName:(NSString*)name { - return [[self alloc] initWithName:name]; ++ (instancetype) tabBarSubItemWithName:(NSString*)name andValue:(id)value { + return [[self alloc] initWithName:name andValue:value]; } - (void) setName:(NSString *)name { _name = name; - [_subItemButton setTitle:name forState:UIControlStateNormal]; + [_subItemButton setTitle:_name forState:UIControlStateNormal]; } diff --git a/Pod/Classes/Vendor/MMCPSScrollView/MMCPSScrollView.m b/Pod/Classes/Vendor/MMCPSScrollView/MMCPSScrollView.m index 8f6501b..b05c571 100755 --- a/Pod/Classes/Vendor/MMCPSScrollView/MMCPSScrollView.m +++ b/Pod/Classes/Vendor/MMCPSScrollView/MMCPSScrollView.m @@ -18,6 +18,7 @@ if (self) { self.backgroundColor = [UIColor whiteColor]; + [self setUserInteractionEnabled:YES]; } return self; @@ -291,6 +292,7 @@ - (void)addSubview:(UIView *)view { [super addSubview:view]; + [view setUserInteractionEnabled:YES]; int currentLowestPoint = [self CGRectOrigin:_bottomComponent] + [self CGRectSize:_bottomComponent]; int viewLowestPoint = [self frameOrigin:view] + [self frameSize:view]; @@ -318,4 +320,25 @@ } } +- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event +{ + // If not dragging, send event to next responder + if (!self.dragging) { + [self.nextResponder.nextResponder touchesEnded: touches withEvent:event]; + } + else + [super touchesEnded: touches withEvent: event]; + +} + +- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + + if (!self.dragging) { + [self.nextResponder.nextResponder touchesBegan: touches withEvent:event]; + } + else + [super touchesBegan: touches withEvent:event]; + +} + @end diff --git a/Pod/Classes/Vendor/SharedLocationManager/SharedLocationManager.h b/Pod/Classes/Vendor/SharedLocationManager/SharedLocationManager.h new file mode 100755 index 0000000..e40b14d --- /dev/null +++ b/Pod/Classes/Vendor/SharedLocationManager/SharedLocationManager.h @@ -0,0 +1,23 @@ +// +// SharedLocationManager.h +// Pods +// +// Created by Giuseppe Nucifora on 15/07/15. +// + +#import +#import + +@interface SharedLocationManager : NSObject { + CLLocationManager *locationManager; + CLLocation *currentLocation; +} + ++ (id) sharedManager; +- (void) setCurrentLocation; +- (CLLocation*) getCurrentLocation; +- (BOOL) locationIsSet; +- (BOOL) localizationIsAuthorized; +- (CLAuthorizationStatus) localizationAuthorizationStatus; + +@end diff --git a/Pod/Classes/Vendor/SharedLocationManager/SharedLocationManager.m b/Pod/Classes/Vendor/SharedLocationManager/SharedLocationManager.m new file mode 100755 index 0000000..f2b51d6 --- /dev/null +++ b/Pod/Classes/Vendor/SharedLocationManager/SharedLocationManager.m @@ -0,0 +1,78 @@ +// +// SharedLocationManager.m +// Pods +// +// Created by Giuseppe Nucifora on 15/07/15. +// + +#import "SharedLocationManager.h" + +@implementation SharedLocationManager ++ (id)sharedManager { + static SharedLocationManager *sharedMyManager = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedMyManager = [[self alloc] init]; + }); + return sharedMyManager; +} + +- (id)init { + if (self = [super init]) { + locationManager = [[CLLocationManager alloc] init]; + locationManager.delegate = self; + locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; + if([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0) + { + [CLLocationManager authorizationStatus]; + } + else { + [locationManager requestWhenInUseAuthorization]; + } + } + return self; +} +- (void)setCurrentLocation { + + [locationManager startUpdatingLocation]; +} +#pragma mark - CLLocationManagerDelegate + +- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error +{ + [locationManager stopUpdatingLocation]; +} + +- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation +{ + if (newLocation != nil) { + currentLocation = newLocation; + } + [locationManager stopUpdatingLocation]; +} + +-(BOOL)locationIsSet { + if(currentLocation != nil) + return YES; + else + return NO; +} + +-(CLLocation*)getCurrentLocation { + return currentLocation; +} + +- (BOOL) localizationIsAuthorized { + if ( [CLLocationManager locationServicesEnabled] == NO || [self localizationAuthorizationStatus] == kCLAuthorizationStatusDenied) + { + return NO; + } + return YES; +} + +- (CLAuthorizationStatus) localizationAuthorizationStatus { + return [CLLocationManager authorizationStatus]; +} + + +@end diff --git a/Pod/Classes/Vendor/TouchableScrollView/ToucheableScrollView.h b/Pod/Classes/Vendor/TouchableScrollView/ToucheableScrollView.h new file mode 100755 index 0000000..5383598 --- /dev/null +++ b/Pod/Classes/Vendor/TouchableScrollView/ToucheableScrollView.h @@ -0,0 +1,13 @@ +// +// ToucheableScrollView.m +// +// +// Created by Mario Nolassi on 11/16/11. +// Copyright (c) 2011 meedori. All rights reserved. +// + +#import + +@interface ToucheableScrollView : UIScrollView + +@end diff --git a/Pod/Classes/Vendor/TouchableScrollView/ToucheableScrollView.m b/Pod/Classes/Vendor/TouchableScrollView/ToucheableScrollView.m new file mode 100755 index 0000000..9aabbf0 --- /dev/null +++ b/Pod/Classes/Vendor/TouchableScrollView/ToucheableScrollView.m @@ -0,0 +1,44 @@ +// +// ToucheableScrollView.m +// +// +// Created by Mario Nolassi on 11/16/11. +// Copyright (c) 2011 meedori. All rights reserved. +// + +#import "ToucheableScrollView.h" + +@implementation ToucheableScrollView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + + if (self) { + + } + return self; +} +- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event +{ + // If not dragging, send event to next responder + if (!self.dragging) { + if ([self.nextResponder respondsToSelector:@selector(touchesEnded:withEvent:)]) { + [self.nextResponder touchesEnded: touches withEvent:event]; + } + if ([self.nextResponder.nextResponder respondsToSelector:@selector(touchesEnded:withEvent:)]) { + [self.nextResponder.nextResponder touchesEnded: touches withEvent:event]; + } + if ([self.nextResponder.nextResponder.nextResponder respondsToSelector:@selector(touchesEnded:withEvent:)]) { + [self.nextResponder.nextResponder.nextResponder touchesEnded: touches withEvent:event]; + } + } + else { + [super touchesEnded: touches withEvent: event]; + } + +} +@end + + +