├── .gitignore ├── Carthage └── Build │ ├── .LiquidTabBarController.version │ └── iOS │ ├── A1C0377B-4BE3-3608-9159-13F527B095F0.bcsymbolmap │ ├── LiquidTabBarController.framework.dSYM │ └── Contents │ │ ├── Info.plist │ │ └── Resources │ │ └── DWARF │ │ └── LiquidTabBarController │ └── LiquidTabBarController.framework │ ├── Headers │ ├── LiquidTabBarController-Swift.h │ └── LiquidTabBarController.h │ ├── Info.plist │ ├── LiquidTabBarController │ └── Modules │ ├── LiquidTabBarController.swiftmodule │ ├── Project │ │ ├── x86_64-apple-ios-simulator.swiftsourceinfo │ │ └── x86_64.swiftsourceinfo │ ├── arm64-apple-ios.swiftdoc │ ├── arm64-apple-ios.swiftmodule │ ├── arm64.swiftdoc │ ├── arm64.swiftmodule │ ├── x86_64-apple-ios-simulator.swiftdoc │ ├── x86_64-apple-ios-simulator.swiftmodule │ ├── x86_64.swiftdoc │ └── x86_64.swiftmodule │ └── module.modulemap ├── Demo ├── Application │ ├── AppDelegate.swift │ └── SceneDelegate.swift ├── Controllers │ ├── AViewController.swift │ ├── BViewController.swift │ ├── DetailViewController.swift │ ├── HomeViewController.swift │ ├── PinkViewController.swift │ ├── SearchViewController.swift │ ├── ShimmerView.swift │ └── ViewController.swift ├── Navigation │ ├── JDNavigationBar.swift │ └── JDNavigationController.swift ├── Resources │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── LTabBar │ │ │ ├── Contents.json │ │ │ ├── tab1.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── tab1.png │ │ │ ├── tab2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── tab2.png │ │ │ ├── tab3.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── tab3.png │ │ │ └── tab4.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── tab4.png │ │ └── TabBar │ │ │ ├── Contents.json │ │ │ ├── home.imageset │ │ │ ├── Contents.json │ │ │ └── home.png │ │ │ ├── notification.imageset │ │ │ ├── Contents.json │ │ │ └── notification.png │ │ │ ├── report.imageset │ │ │ ├── Contents.json │ │ │ └── report.png │ │ │ └── search.imageset │ │ │ ├── Contents.json │ │ │ └── search.png │ └── Info.plist └── Storyboard │ └── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Images └── ezgif.com-video-to-gif-32.gif ├── LICENSE ├── LiquidTabBarController.podspec ├── LiquidTabBarController.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcuserdata │ └── jawadali.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ └── xcschememanagement.plist ├── Package.swift ├── README.md ├── Sources └── LiquidTabBarController │ ├── Extensions │ ├── CALayer+Extension.swift │ └── UIViewController+Extesion.swift │ ├── Factories │ ├── UIImageViewFactory.swift │ ├── UILabelFactory.swift │ └── UIStackViewFactory.swift │ ├── Info.plist │ ├── JDLayout │ ├── YAPLayout.swift │ └── YAPLayoutAttributes.swift │ ├── LiquidTabBar │ ├── JDTabBar.swift │ ├── LiquiTabBar.swift │ ├── LiquidTabBarController.swift │ ├── LiquidTabBarItem.swift │ └── Shape.swift │ └── LiquidTabBarController.h └── Tests ├── LinuxMain.swift └── LiquidTabBarControllerTests ├── LiquidTabBarControllerTests.swift └── XCTestManifests.swift /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | /Packages 4 | /*.xcodeproj 5 | xcuserdata/ 6 | -------------------------------------------------------------------------------- /Carthage/Build/.LiquidTabBarController.version: -------------------------------------------------------------------------------- 1 | { 2 | "Mac" : [ 3 | 4 | ], 5 | "watchOS" : [ 6 | 7 | ], 8 | "tvOS" : [ 9 | 10 | ], 11 | "commitish" : "1.0.0", 12 | "iOS" : [ 13 | { 14 | "name" : "LiquidTabBarController", 15 | "hash" : "b149dc02b32b7744dc3abbde8683b18292db3d2e37e271dd6cb484c986dfe46c", 16 | "swiftToolchainVersion" : "5.2 (swiftlang-1103.0.32.1 clang-1103.0.32.29)" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /Carthage/Build/iOS/A1C0377B-4BE3-3608-9159-13F527B095F0.bcsymbolmap: -------------------------------------------------------------------------------- 1 | BCSymbolMap Version: 2.0 2 | Apple clang version 11.0.3 (clang-1103.0.32.29) 3 | /Users/jawadali/Library/Developer/Xcode/DerivedData/LiquidTabBarController-bqiyrlngibxqgvcqzmwvguxqtlqi/Build/Intermediates.noindex/ArchiveIntermediates/LiquidTabBarController/IntermediateBuildFilesPath/LiquidTabBarController.build/Release-iphoneos/LiquidTabBarController.build/DerivedSources/LiquidTabBarController_vers.c 4 | /Users/jawadali/Documents/LiquidTabBarController 5 | _$sSo6UIViewC22LiquidTabBarControllerE5width_8constant8priorityAbC25YAPLayoutConstantModifierO_12CoreGraphics7CGFloatVSo16UILayoutPriorityatFTm 6 | _$sSo6UIViewC22LiquidTabBarControllerE6height4with_6ofView10multiplier8constant8priorityAbC13YAPLayoutEdgeO_AC0M16ConstantModifierOAB12CoreGraphics7CGFloatVAPSo16UILayoutPriorityatFTm 7 | _$sSo6UIViewC22LiquidTabBarControllerE22horizontallyCenterWith__8constant8priorityA2B_AC25YAPLayoutConstantModifierO12CoreGraphics7CGFloatVSo16UILayoutPriorityatFTm 8 | _$s22LiquidTabBarController13YAPLayoutEdgeO08safeAreaF0ACvg 9 | _$sSo6UIViewC22LiquidTabBarControllerE8toLeftOf__8constant8priorityA2B_AC25YAPLayoutConstantModifierO12CoreGraphics7CGFloatVSo16UILayoutPriorityatFTm 10 | _$s22LiquidTabBarController13YAPLayoutEdgeO4axisAA0E4AxisOvg 11 | _$sSo6UIViewC22LiquidTabBarControllerE16horizontalAnchorySo013NSLayoutXAxisG0CAC13YAPLayoutEdgeOF 12 | _$sSo6UIViewC22LiquidTabBarControllerE14verticalAnchorySo013NSLayoutYAxisG0CAC13YAPLayoutEdgeOF 13 | _$sSo12CACornerMaskVs10SetAlgebraSCsACPxycfCTW 14 | _$sSo12CACornerMaskVs10SetAlgebraSCsACP12intersectionyxxFTW 15 | _$sSo12CACornerMaskVs10SetAlgebraSCsACP6insertySb8inserted_7ElementQz17memberAfterInserttAHnFTW 16 | _$sSo12CACornerMaskVs10SetAlgebraSCsACP9formUnionyyxnFTW 17 | _$sSo12CACornerMaskVs10SetAlgebraSCsACP16formIntersectionyyxFTW 18 | _$sSo12CACornerMaskVSQSCSQ2eeoiySbx_xtFZTW 19 | _$sSo6UIViewC22LiquidTabBarControllerE15pinVerticalEdge33_43E6A5B0FF63F71AC14951332F184EBELL_02toH06ofView_8constant8priorityAbC09YAPLayoutH0O_AkbC0V16ConstantModifierO12CoreGraphics7CGFloatVSo16UILayoutPriorityatFTf4nnnnnnn_g 20 | _$sSo6UIViewC22LiquidTabBarControllerE16pinDimensionEdge33_43E6A5B0FF63F71AC14951332F184EBELL_02toH06ofView_10mutliplier8constant8priorityAbC09YAPLayoutH0O_AlbC0W16ConstantModifierO12CoreGraphics7CGFloatVAQSo16UILayoutPriorityatFTf4nnnnnnnn_g 21 | _$sSo6UIViewC22LiquidTabBarControllerE10alignEdges_8withView_8constant8priorityABSayAC13YAPLayoutEdgeOG_AbC0L16ConstantModifierO12CoreGraphics7CGFloatVSo16UILayoutPriorityatFTf4nnnnnn_g 22 | _$sSo6UIViewC22LiquidTabBarControllerE17pinHorizontalEdge33_43E6A5B0FF63F71AC14951332F184EBELL_02toH06ofView_8constant8priorityAbC09YAPLayoutH0O_AkbC0V16ConstantModifierO12CoreGraphics7CGFloatVSo16UILayoutPriorityatFTf4nnnnnnn_g 23 | _$sSo6UIViewC22LiquidTabBarControllerE10alignEdges_8withView_9constants8priorityABSayAC13YAPLayoutEdgeOG_AbC0L16ConstantModifierOSay12CoreGraphics7CGFloatVGSo16UILayoutPriorityatFTf4nnnnnn_g 24 | _$sSo6UIViewC22LiquidTabBarControllerE29centerHorizontallyInSuperview8priorityABSo16UILayoutPrioritya_tFTf4dn_n 25 | _$sSo7UIColorCMa 26 | _$sSo10CGColorRefaMa 27 | _$sSo13CATransform3DVwCP 28 | ___swift_noop_void_return 29 | ___swift_memcpy128_8 30 | _$sSo13CATransform3DVwet 31 | _$sSo13CATransform3DVwst 32 | _$sSo13CATransform3DVMa 33 | _$sSo10CGColorRefaMaTm 34 | __swift_dead_method_stub 35 | _globalinit_33_6259CB39AD462BBF9BDD556E1B4355D1_token0 36 | _$sSo7UIColorCML 37 | _$sSoMXM 38 | _$sSo10CGColorRefaMn 39 | _$sSo10CGColorRefaMf 40 | _$sSo10CGColorRefaML 41 | _$sSo13CATransform3DVWV 42 | _$sSo13CATransform3DVMn 43 | _$sSo13CATransform3DVMf 44 | _$sSo13CATransform3DVML 45 | _symbolic _____ So13CATransform3DV 46 | _$sSo13CATransform3DVMB 47 | _symbolic _____ 12CoreGraphics7CGFloatV 48 | _$sSo13CATransform3DVMF 49 | ___swift_reflection_version 50 | 51 | Apple Swift version 5.2 (swiftlang-1103.0.32.1 clang-1103.0.32.29) 52 | /Users/jawadali/Documents/LiquidTabBarController/Sources/LiquidTabBarController/JDLayout/YAPLayout.swift 53 | $sSo10CGColorRefaMa 54 | 55 | $sSo13CATransform3DVwst 56 | $sSo13CATransform3DVwet 57 | __swift_memcpy128_8 58 | __swift_noop_void_return 59 | $sSo13CATransform3DVwCP 60 | $sSo7UIColorCMa 61 | centerHorizontallyInSuperview 62 | horizontallyCenterWith 63 | pinEdge 64 | pinHorizontalEdge 65 | horizontalAnchor 66 | Sources/LiquidTabBarController/JDLayout/YAPLayoutAttributes.swift 67 | alignEdges 68 | subscript.get 69 | $sSa11_getElement_20wasNativeTypeChecked22matchingSubscriptCheckxSi_Sbs16_DependenceTokenVtF12CoreGraphics7CGFloatV_Tg5 70 | firstIndex 71 | $sSayxGSlsSly7ElementQz5IndexQzcirTW22LiquidTabBarController13YAPLayoutEdgeO_Ti5 72 | $sSayxSicir22LiquidTabBarController13YAPLayoutEdgeO_Tg5 73 | $sSa11_getElement_20wasNativeTypeChecked22matchingSubscriptCheckxSi_Sbs16_DependenceTokenVtF22LiquidTabBarController13YAPLayoutEdgeO_Tg5 74 | $sSa15_checkSubscript_20wasNativeTypeCheckeds16_DependenceTokenVSi_SbtF22LiquidTabBarController13YAPLayoutEdgeO_Tg5 75 | $ss12_ArrayBufferV37_checkInoutAndNativeTypeCheckedBounds_03wasfgH0ySi_SbtF22LiquidTabBarController13YAPLayoutEdgeO_Tg5 76 | next 77 | $ss22_ContiguousArrayBufferV5countSivg22LiquidTabBarController13YAPLayoutEdgeO_Tg5 78 | $sSiSQsSQ2eeoiySbx_xtFZTW 79 | alignEdge 80 | pinDimensionEdge 81 | pinVerticalEdge 82 | axis.get 83 | $sSa15_checkSubscript_20wasNativeTypeCheckeds16_DependenceTokenVSi_SbtF12CoreGraphics7CGFloatV_Tg5 84 | $ss12_ArrayBufferV37_checkInoutAndNativeTypeCheckedBounds_03wasfgH0ySi_SbtF12CoreGraphics7CGFloatV_Tg5 85 | $ss22_ContiguousArrayBufferV5countSivg12CoreGraphics7CGFloatV_Tg5 86 | __derived_enum_equals 87 | $sSayxGSlsSl9formIndex5aftery0B0Qzz_tFTW22LiquidTabBarController13YAPLayoutEdgeO_Ti5 88 | $sSa9formIndex5afterySiz_tF22LiquidTabBarController13YAPLayoutEdgeO_Tg5 89 | $ss22_ContiguousArrayBufferV19firstElementAddressSpyxGvg12CoreGraphics7CGFloatV_Tg5 90 | $ss12_ArrayBufferV7_natives011_ContiguousaB0VyxGvg12CoreGraphics7CGFloatV_Tg5 91 | $ss22_ContiguousArrayBufferV19firstElementAddressSpyxGvg22LiquidTabBarController13YAPLayoutEdgeO_Tg5 92 | $sSayxGSlsSl8endIndex0B0QzvgTW22LiquidTabBarController13YAPLayoutEdgeO_Ti5 93 | $sSa8endIndexSivg22LiquidTabBarController13YAPLayoutEdgeO_Tg5 94 | $sSa9_getCountSiyF22LiquidTabBarController13YAPLayoutEdgeO_Tg5 95 | $ss12_ArrayBufferV7_natives011_ContiguousaB0VyxGvg22LiquidTabBarController13YAPLayoutEdgeO_Tg5 96 | dimensionAnchor 97 | == 98 | $sSuSQsSQ2eeoiySbx_xtFZTW 99 | formIntersection 100 | $sSuSzsSz1aoiyxx_xtFZTW 101 | rawValue.get 102 | formUnion 103 | $sSuSzsSz1ooiyxx_xtFZTW 104 | insert 105 | intersection 106 | init 107 | $s22LiquidTabBarController0abC4ItemC27$__lazy_storage_$_imageView33_C38E9367597EC2B6DB9B650424041F00LLSo07UIImageI0CSgvpfi 108 | $s22LiquidTabBarController0abC4ItemC9imageSize12CoreGraphics7CGFloatVvpfi 109 | $s22LiquidTabBarController0abC4ItemC10badgeValueSSSgvpfi 110 | $s22LiquidTabBarController0abC4ItemC10badgeColorSo7UIColorCSgvpfi 111 | $s22LiquidTabBarController0abC4ItemC17animationDurationSdvpfi 112 | $s22LiquidTabBarController0abC4ItemC14imageTintColorSo7UIColorCvpfi 113 | $s22LiquidTabBarController0abC4ItemC22imageSelectedTintColorSo7UIColorCvpfi 114 | $s22LiquidTabBarController0abC4ItemC21imageHeightConstraint33_C38E9367597EC2B6DB9B650424041F00LLSo08NSLayoutH0CSgvpfi 115 | $s22LiquidTabBarController0abC4ItemC20imageWidthConstraint33_C38E9367597EC2B6DB9B650424041F00LLSo08NSLayoutH0CSgvpfi 116 | $s22LiquidTabBarController0abC4ItemC22imageCenterYConstraint33_C38E9367597EC2B6DB9B650424041F00LLSo18NSLayoutConstraintCSgvpfi 117 | $s22LiquidTabBarController04LTabC0C21previousSelectedIndex33_9FD94367B53DD66E345569B8BEE57A86LLSivpfi 118 | $s22LiquidTabBarController04LTabC0C13selectedIndex33_9FD94367B53DD66E345569B8BEE57A86LLSivpfi 119 | $s22LiquidTabBarController04LTabC0C8delegateAA0eC8Delegate_pSgvpfi 120 | $s22LiquidTabBarController04LTabC0C33$__lazy_storage_$_innerCircleView33_9FD94367B53DD66E345569B8BEE57A86LLSo6UIViewCSgvpfi 121 | $s22LiquidTabBarController04LTabC0C27$__lazy_storage_$_stackView33_9FD94367B53DD66E345569B8BEE57A86LLSo07UIStackI0CSgvpfi 122 | $s22LiquidTabBarController04LTabC0C15viewControllersSaySo06UIViewD0CGvpfi 123 | $s22LiquidTabBarController04LTabC0C17circleBorderWidth12CoreGraphics7CGFloatVvpfi 124 | $s22LiquidTabBarController04LTabC0C10circleSize12CoreGraphics7CGFloatVvpfi 125 | $s22LiquidTabBarController04LTabC0C03tabC9TintColorSo7UIColorCvpfi 126 | $s22LiquidTabBarController04LTabC0C10shapeLayer33_9FD94367B53DD66E345569B8BEE57A86LLSo07CAShapeG0Cvpfi 127 | $s22LiquidTabBarController04LTabC0C10shapeLayer33_9FD94367B53DD66E345569B8BEE57A86LLSo07CAShapeG0CvpfiAGyXEfU_ 128 | Sources/LiquidTabBarController/LiquidTabBar/LiquiTabBar.swift 129 | $s22LiquidTabBarController05JDTabC0C21previousSelectedIndex33_99E7F9C3A3A70C760AD11B97383A0F34LLSivpfi 130 | $s22LiquidTabBarController05JDTabC0C13selectedIndex33_99E7F9C3A3A70C760AD11B97383A0F34LLSivpfi 131 | $s22LiquidTabBarController05JDTabC0C8delegateAA0eC8Delegate_pSgvpfi 132 | $s22LiquidTabBarController05JDTabC0C38$__lazy_storage_$_cornerBackgroundView33_99E7F9C3A3A70C760AD11B97383A0F34LLSo6UIViewCSgvpfi 133 | $s22LiquidTabBarController05JDTabC0C33$__lazy_storage_$_outerCircleView33_99E7F9C3A3A70C760AD11B97383A0F34LLSo6UIViewCSgvpfi 134 | $s22LiquidTabBarController05JDTabC0C33$__lazy_storage_$_innerCircleView33_99E7F9C3A3A70C760AD11B97383A0F34LLSo6UIViewCSgvpfi 135 | $s22LiquidTabBarController05JDTabC0C27$__lazy_storage_$_stackView33_99E7F9C3A3A70C760AD11B97383A0F34LLSo07UIStackI0CSgvpfi 136 | $s22LiquidTabBarController05JDTabC0C10isOffSetOnSbvpfi 137 | $s22LiquidTabBarController05JDTabC0C15viewControllersSaySo06UIViewD0CGvpfi 138 | $s22LiquidTabBarController05JDTabC0C9shapeTypeAA5ShapeOvpfi 139 | $s22LiquidTabBarController05JDTabC0C17circleBorderWidth12CoreGraphics7CGFloatVvpfi 140 | $s22LiquidTabBarController05JDTabC0C10circleSize12CoreGraphics7CGFloatVvpfi 141 | $s22LiquidTabBarController05JDTabC0C03tabC9TintColorSo7UIColorCvpfi 142 | $s22LiquidTabBarControllerAAC31$__lazy_storage_$_containerView33_C2563480019D02DF4BC3CB462DC63B06LLSo6UIViewCSgvpfi 143 | $s22LiquidTabBarControllerAAC23$__lazy_storage_$_stack33_C2563480019D02DF4BC3CB462DC63B06LLSo11UIStackViewCSgvpfi 144 | $s22LiquidTabBarControllerAAC021$__lazy_storage_$_tabC033_C2563480019D02DF4BC3CB462DC63B06LLAA04LTabC0CSgvpfi 145 | $s22LiquidTabBarControllerAAC03tabC6Height12CoreGraphics7CGFloatVvpfi 146 | $s22LiquidTabBarControllerAAC15viewControllersSaySo06UIViewD0CGvpfi 147 | $s22LiquidTabBarControllerAAC21previousSelectedIndexSivpfi 148 | $s22LiquidTabBarControllerAAC11selectIndex33_C2563480019D02DF4BC3CB462DC63B06LLSivpfi 149 | $s22LiquidTabBarControllerAAC17isRoundedOffsetOnSbvpfi 150 | $s22LiquidTabBarControllerAAC13selectedIndexSivpfi 151 | $s22LiquidTabBarControllerAAC8delegateAA0abcD8Delegate_pSgvpfi 152 | toLeftOf 153 | toRightOf 154 | alignEdgesWithSuperview 155 | alignAllEdgesWithSuperview 156 | alignEdgeWithSuperview 157 | alignEdgeWithSuperviewSafeArea 158 | centerVerticallyInSuperview 159 | verticallyCenterWith 160 | alignCenterWith 161 | centerInSuperView 162 | aspectRatio 163 | height 164 | width 165 | _$s22LiquidTabBarController0abcD8Delegate_pSgWOe 166 | _$s22LiquidTabBarControllerAAC8delegateAA0abcD8Delegate_pSgvM.resume.0 167 | _$s22LiquidTabBarControllerAACIetMg_TC 168 | _$s22LiquidTabBarController04LTabC0C09didSelectB05indexySi_tF 169 | _$s22LiquidTabBarControllerAAC13selectedIndexSivM.resume.0 170 | _$s22LiquidTabBarControllerAAC21previousSelectedIndexSivpABTK 171 | _$s22LiquidTabBarControllerAAC21previousSelectedIndexSivpABTk 172 | _$s22LiquidTabBarControllerAAC13selectedIndexSivgTm 173 | _$s22LiquidTabBarControllerAAC15viewControllersSaySo06UIViewD0CGvM.resume.0 174 | _$s22LiquidTabBarControllerAAC03tabC6Height12CoreGraphics7CGFloatVvM.resume.0 175 | _$s22LiquidTabBarControllerAAC03tabC0AA04LTabC0CvM.resume.0 176 | _$s22LiquidTabBarControllerAAC11viewDidLoadyyFTo 177 | _$s22LiquidTabBarControllerAAC21viewDidLayoutSubviewsyyFTo 178 | _$s22LiquidTabBarControllerAACfETo 179 | _$s22LiquidTabBarControllerAAC7nibName6bundleABSSSg_So8NSBundleCSgtcfcTo 180 | _$s22LiquidTabBarControllerAAC5coderABSgSo7NSCoderC_tcfcTo 181 | _$s22LiquidTabBarControllerAACAA04LTabC8DelegateA2aCP03tabC0_09didSelectB2AtyAA0eC0C_SitFTW 182 | _$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo16UIViewControllerC_Tg5 183 | _$s22LiquidTabBarControllerAAC03tabC0_09didSelectB2AtyAA04LTabC0C_SitFTf4dnn_n 184 | _$s22LiquidTabBarControllerAAC13selectedIndexSivWTf4dn_n 185 | _$s22LiquidTabBarController04LTabC0C15viewControllersSaySo06UIViewD0CGvWTf4dn_n 186 | _$s22LiquidTabBarControllerAAC15viewControllersSaySo06UIViewD0CGvWTf4dn_n 187 | _$sSSSgWOe 188 | _$s22LiquidTabBarControllerAAC7nibName6bundleABSSSg_So8NSBundleCSgtcfcTf4ggn_n 189 | _$s22LiquidTabBarControllerAAC5coderABSgSo7NSCoderC_tcfcTf4gn_n 190 | _$s22LiquidTabBarController0abcD8Delegate_pSgXwWOh 191 | ___swift_instantiateConcreteTypeFromMangledName 192 | _$sSo6UIViewCMa 193 | _$s22LiquidTabBarControllerAAC17isRoundedOffsetOnSbvM.resume.0 194 | _$s22LiquidTabBarControllerAAC021$__lazy_storage_$_tabC033_C2563480019D02DF4BC3CB462DC63B06LLAA04LTabC0CSgvpWvd 195 | _$s22LiquidTabBarController04LTabC0C8delegateAA0eC8Delegate_pSgvpWvd 196 | _symbolic $s22LiquidTabBarController0abcD8DelegateP 197 | _$s22LiquidTabBarController0abcD8Delegate_pMF 198 | _$s22LiquidTabBarControllerMXM 199 | l_OBJC_LABEL_PROTOCOL_$_NSObject 200 | l_OBJC_PROTOCOL_REFERENCE_$_NSObject 201 | _symbolic x 202 | _$s22LiquidTabBarControllerAAC11selectIndex33_C2563480019D02DF4BC3CB462DC63B06LLSivpWvd 203 | _$s22LiquidTabBarControllerAAC23$__lazy_storage_$_stack33_C2563480019D02DF4BC3CB462DC63B06LLSo11UIStackViewCSgvpWvd 204 | _$s22LiquidTabBarControllerAAC31$__lazy_storage_$_containerView33_C2563480019D02DF4BC3CB462DC63B06LLSo6UIViewCSgvpWvd 205 | _symbolic So16UIViewControllerC 206 | _$s22LiquidTabBarControllerAACML 207 | _$s22LiquidTabBarControllerAACMf 208 | _symbolic _____ 22LiquidTabBarControllerAAC 209 | _symbolic ______pSgXw 22LiquidTabBarController0abcD8DelegateP 210 | _symbolic Si 211 | _symbolic Sb 212 | _symbolic SaySo16UIViewControllerCG 213 | _symbolic _____Sg 22LiquidTabBarController04LTabC0C 214 | _symbolic So11UIStackViewCSg 215 | _symbolic So6UIViewCSg 216 | _$s22LiquidTabBarControllerAACMF 217 | _symbolic _____ySo6UIViewCG s23_ContiguousArrayStorageC 218 | _$ss23_ContiguousArrayStorageCySo6UIViewCGMD 219 | _$sSo6UIViewCML 220 | _$s22LiquidTabBarController04LTabC0C15viewControllersSaySo06UIViewD0CGvpWvd 221 | _objc_classes 222 | /Users/jawadali/Documents/LiquidTabBarController/Sources/LiquidTabBarController/LiquidTabBar/LiquidTabBarController.swift 223 | $sSo6UIViewCMa 224 | $s22LiquidTabBarController0abcD8Delegate_pSgXwWOh 225 | $s22LiquidTabBarControllerAACMa 226 | viewControllers.didset 227 | viewControllers.set 228 | tabBar.get 229 | $s22LiquidTabBarControllerAAC03tabC0AA04LTabC0CvgAEyXEfU_ 230 | delegate.set 231 | selectedIndex.didset 232 | tabBar 233 | $sSa11_getElement_20wasNativeTypeChecked22matchingSubscriptCheckxSi_Sbs16_DependenceTokenVtFSo16UIViewControllerC_Tg5 234 | $ss12_ArrayBufferV18_nativeTypeCheckeds011_ContiguousaB0VyxGvgSo16UIViewControllerC_Tg5 235 | containerView.get 236 | $s22LiquidTabBarControllerAAC13containerView33_C2563480019D02DF4BC3CB462DC63B06LLSo6UIViewCvgAFyXEfU_ 237 | selectIndex.set 238 | $ss22_ContiguousArrayBufferV19firstElementAddressSpyxGvgSo16UIViewControllerC_Tg5 239 | $sSa15_checkSubscript_20wasNativeTypeCheckeds16_DependenceTokenVSi_SbtFSo16UIViewControllerC_Tg5 240 | $ss12_ArrayBufferV37_checkInoutAndNativeTypeCheckedBounds_03wasfgH0ySi_SbtFSo16UIViewControllerC_Tg5 241 | $ss22_ContiguousArrayBufferV5countSivgSo16UIViewControllerC_Tg5 242 | $ss12_ArrayBufferV7_natives011_ContiguousaB0VyxGvgSo16UIViewControllerC_Tg5 243 | $sSa29_hoistableIsNativeTypeCheckedSbyFSo16UIViewControllerC_Tg5 244 | $ss12_ArrayBufferV32arrayPropertyIsNativeTypeCheckedSbvgSo16UIViewControllerC_Tg5 245 | $ss12_ArrayBufferV20_isNativeTypeCheckedSbvgSo16UIViewControllerC_Tg5 246 | viewControllers.get 247 | previousSelectedIndex.set 248 | selectIndex.get 249 | $ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo16UIViewControllerC_Tg5 250 | $ss12_ArrayBufferV9_isNativeSbvgSo16UIViewControllerC_Tg5 251 | deinit 252 | drawConstraint 253 | $sSo6UIViewC22LiquidTabBarControllerE26alignAllEdgesWithSuperview_10edgeInsets8priorityAbC25YAPLayoutConstantModifierO_So06UIEdgeL0VSo16UILayoutPriorityatFfA0_ 254 | Sources/LiquidTabBarController/JDLayout/YAPLayout.swift 255 | tabBarHeight.get 256 | viewDidLayoutSubviews 257 | viewDidLoad 258 | stack.get 259 | createStackView 260 | Sources/LiquidTabBarController/Factories/UIStackViewFactory.swift 261 | _allocateUninitializedArray 262 | $sSa13_adoptStorage_5countSayxG_SpyxGts016_ContiguousArrayB0CyxGn_SitFZSo6UIViewC_Tg5 263 | $ss22_ContiguousArrayBufferV19firstElementAddressSpyxGvgSo6UIViewC_Tg5 264 | $ss22_ContiguousArrayBufferV5count7storageAByxGSi_s01_aB7StorageCyxGtcfCSo6UIViewC_Tg5 265 | $ss22_ContiguousArrayBufferV18_initStorageHeader5count8capacityySi_SitFSo6UIViewC_Tg5 266 | tabBar.modify 267 | tabBar.set 268 | tabBarHeight.modify 269 | tabBarHeight.set 270 | viewControllers.modify 271 | selectedIndex.get 272 | $s22LiquidTabBarControllerAAC21previousSelectedIndexSivpABTk 273 | $s22LiquidTabBarControllerAAC21previousSelectedIndexSivpABTK 274 | previousSelectedIndex.get 275 | isRoundedOffsetOn.modify 276 | isRoundedOffsetOn.set 277 | isRoundedOffsetOn.get 278 | selectedIndex.modify 279 | selectedIndex.set 280 | delegate.modify 281 | delegate.get 282 | _$s22LiquidTabBarController18UIStackViewFactoryCML 283 | _$s22LiquidTabBarController18UIStackViewFactoryCMf 284 | _symbolic _____ 22LiquidTabBarController18UIStackViewFactoryC 285 | _$s22LiquidTabBarController18UIStackViewFactoryCMF 286 | _$s22LiquidTabBarController18UIStackViewFactoryCACycfCTq 287 | /Users/jawadali/Documents/LiquidTabBarController/Sources/LiquidTabBarController/Factories/UIStackViewFactory.swift 288 | $s22LiquidTabBarController18UIStackViewFactoryCMa 289 | _$s22LiquidTabBarController05JDTabC0C03tabC9TintColorSo7UIColorCvM.resume.0 290 | _$s22LiquidTabBarController05JDTabC0C10circleSize12CoreGraphics7CGFloatVvM.resume.0 291 | _$s22LiquidTabBarController05JDTabC0C10circleSize12CoreGraphics7CGFloatVvgTm 292 | _$s22LiquidTabBarController05JDTabC0C10circleSize12CoreGraphics7CGFloatVvsTm 293 | _$s22LiquidTabBarController05JDTabC0C9shapeTypeAA5ShapeOvM.resume.0 294 | _$s22LiquidTabBarController05JDTabC0C09didSelectB05indexySi_tF 295 | _$s22LiquidTabBarController05JDTabC0C9stackView33_99E7F9C3A3A70C760AD11B97383A0F34LLSo07UIStackG0Cvg 296 | _$s22LiquidTabBarController05JDTabC0C20cornerBackgroundView33_99E7F9C3A3A70C760AD11B97383A0F34LLSo6UIViewCvg 297 | _$s22LiquidTabBarController05JDTabC0C5frameACSo6CGRectV_tcfc 298 | _$s22LiquidTabBarController05JDTabC0C5frameACSo6CGRectV_tcfcTo 299 | _$s22LiquidTabBarController05JDTabC0C5coderACSgSo7NSCoderC_tcfcTo 300 | _$s22LiquidTabBarController05JDTabC0C16setupConstraints33_99E7F9C3A3A70C760AD11B97383A0F34LLyyF 301 | _$s22LiquidTabBarController5ShapeO13layoutMarginsSay12CoreGraphics7CGFloatVGvg 302 | _$s22LiquidTabBarController5ShapeO11maskCorenrsSo12CACornerMaskVvg 303 | _$s22LiquidTabBarController05JDTabC0C4drawyySo6CGRectVFTo 304 | _$s22LiquidTabBarController05JDTabC0C12touchesBegan_4withyShySo7UITouchCG_So7UIEventCSgtFTo 305 | _$s22LiquidTabBarController05JDTabC0CfETo 306 | _$s22LiquidTabBarController05JDTabC0C9setUpView33_99E7F9C3A3A70C760AD11B97383A0F34LLyyF 307 | _$s22LiquidTabBarController05JDTabC0C16circleTransition33_99E7F9C3A3A70C760AD11B97383A0F34LL12CoreGraphics7CGFloatV6startX_AH4endXtvg 308 | _$s22LiquidTabBarController05JDTabC0C07animateB4Item33_99E7F9C3A3A70C760AD11B97383A0F34LL5indexySi_tF 309 | _$s22LiquidTabBarController0abC4ItemC07animateB8SelectedyyF 310 | _$s22LiquidTabBarController0abC4ItemC07animateB8DeSelectyyF 311 | _$sSiSQsSQ2eeoiySbx_xtFZTW 312 | _$ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo6UIViewC_Tg5 313 | _$s22LiquidTabBarController05JDTabC0CIetMg_TC 314 | _$sSBss17FixedWidthInteger14RawSignificandRpzrlE8_convert4fromx5value_Sb5exacttqd___tSzRd__lFZ12CoreGraphics7CGFloatV_SiTg5 315 | _$sSus35_ExpressibleByBuiltinIntegerLiteralssAAP08_builtindE0xBI_tcfCTW 316 | _$sSuSzsSz1aoiyxx_xtFZTW 317 | _$sShyxSh5IndexVyx_GcigSo7UITouchC_Tg5 318 | _$ss10_NativeSetV10startIndexSh0D0Vyx_GvgSo7UITouchC_Tg5 319 | _$s22LiquidTabBarController05JDTabC0C5coderACSgSo7NSCoderC_tcfcTf4gn_n 320 | _$sSo7UITouchCMa 321 | _$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl 322 | _$sSh5IndexV8_VariantOyx__GSHRzlWOe 323 | _$sSo6UIViewCMaTm 324 | _$s22LiquidTabBarController05JDTabC8Delegate_pSgXwWOh 325 | _$s22LiquidTabBarController05JDTabC8Delegate_pSgWOe 326 | _$s22LiquidTabBarController0abC4ItemC07animateB8DeSelectyyFTA 327 | _$s22LiquidTabBarController0abC4ItemC07animateB8SelectedyyFTA 328 | _$sSh5IndexV8_VariantOyx__GSHRzlWOy 329 | _$s22LiquidTabBarController05JDTabC0C17circleBorderWidth12CoreGraphics7CGFloatVvM.resume.0 330 | _$sSuSQsSQ2eeoiySbx_xtFZTW 331 | _$s22LiquidTabBarController05JDTabC0C33$__lazy_storage_$_innerCircleView33_99E7F9C3A3A70C760AD11B97383A0F34LLSo6UIViewCSgvpWvd 332 | _$sSo7UITouchCML 333 | _$sSo7UITouchCSo8NSObjectCSH10ObjectiveCWL 334 | _$s22LiquidTabBarController05JDTabC0C15viewControllersSaySo06UIViewD0CGvpWvd 335 | _symbolic $s22LiquidTabBarController05JDTabC8DelegateP 336 | _$s22LiquidTabBarController05JDTabC8Delegate_pMF 337 | _$s22LiquidTabBarController05JDTabC0C10isOffSetOnSbvpWvd 338 | _$s22LiquidTabBarController05JDTabC0C27$__lazy_storage_$_stackView33_99E7F9C3A3A70C760AD11B97383A0F34LLSo07UIStackI0CSgvpWvd 339 | _$s22LiquidTabBarController05JDTabC0C33$__lazy_storage_$_outerCircleView33_99E7F9C3A3A70C760AD11B97383A0F34LLSo6UIViewCSgvpWvd 340 | _$s22LiquidTabBarController05JDTabC0C38$__lazy_storage_$_cornerBackgroundView33_99E7F9C3A3A70C760AD11B97383A0F34LLSo6UIViewCSgvpWvd 341 | _$s22LiquidTabBarController05JDTabC0C8delegateAA0eC8Delegate_pSgvpWvd 342 | _$s22LiquidTabBarController05JDTabC0C13selectedIndex33_99E7F9C3A3A70C760AD11B97383A0F34LLSivpWvd 343 | _$s22LiquidTabBarController05JDTabC0C21previousSelectedIndex33_99E7F9C3A3A70C760AD11B97383A0F34LLSivpWvd 344 | _symbolic So6UIViewC 345 | _$s22LiquidTabBarController05JDTabC0CML 346 | _$s22LiquidTabBarController05JDTabC0CMf 347 | _symbolic _____ 22LiquidTabBarController05JDTabC0C 348 | _symbolic So7UIColorC 349 | _symbolic _____ 22LiquidTabBarController5ShapeO 350 | _symbolic ______pSgXw 22LiquidTabBarController05JDTabC8DelegateP 351 | _$s22LiquidTabBarController05JDTabC0CMF 352 | _symbolic _____ 22LiquidTabBarController0abC4ItemC 353 | _symbolic _____y_____G s23_ContiguousArrayStorageC 22LiquidTabBarController13YAPLayoutEdgeO 354 | _$ss23_ContiguousArrayStorageCy22LiquidTabBarController13YAPLayoutEdgeOGMD 355 | _$s22LiquidTabBarController05JDTabC0C15viewControllersSaySo06UIViewD0CGvgTq 356 | _$s22LiquidTabBarController05JDTabC0C15viewControllersSaySo06UIViewD0CGvsTq 357 | _$s22LiquidTabBarController05JDTabC0C15viewControllersSaySo06UIViewD0CGvMTq 358 | _$s22LiquidTabBarController05JDTabC0C10isOffSetOnSbvgTq 359 | _$s22LiquidTabBarController05JDTabC0C10isOffSetOnSbvsTq 360 | _$s22LiquidTabBarController05JDTabC0C10isOffSetOnSbvMTq 361 | _$s22LiquidTabBarController05JDTabC0C8delegateAA0eC8Delegate_pSgvgTq 362 | _$s22LiquidTabBarController05JDTabC0C8delegateAA0eC8Delegate_pSgvsTq 363 | _$s22LiquidTabBarController05JDTabC0C8delegateAA0eC8Delegate_pSgvMTq 364 | /Users/jawadali/Documents/LiquidTabBarController/Sources/LiquidTabBarController/LiquidTabBar/JDTabBar.swift 365 | $s22LiquidTabBarController0abC4ItemC07animateB8SelectedyyFTA 366 | $s22LiquidTabBarController0abC4ItemC07animateB8DeSelectyyFTA 367 | objectdestroy 368 | $s22LiquidTabBarController05JDTabC8Delegate_pSgXwWOh 369 | $sSo7UITouchCSo8NSObjectCSH10ObjectiveCWl 370 | $s22LiquidTabBarController05JDTabC0CMa 371 | commonInit 372 | setUp 373 | $ss10_NativeSetV10startIndexSh0D0Vyx_GvgSo7UITouchC_Tg5 374 | $sShyxSh5IndexVyx_GcigSo7UITouchC_Tg5 375 | $ss26_forceBridgeFromObjectiveCyxyXl_xmtlFSo7UITouchC_Tg5 376 | $sSh8_VariantV7asCocoas02__C3SetVvgSo7UITouchC_Tg5 377 | $sSo8NSObjectCSQ10ObjectiveCSQ2eeoiySbx_xtFZTW 378 | $ss10_NativeSetV9_elementsSpyxGvgSo7UITouchC_Tg5 379 | $sSo8NSObjectCSH10ObjectiveCSH13_rawHashValue4seedS2i_tFTW 380 | $sSus35_ExpressibleByBuiltinIntegerLiteralssAAP08_builtindE0xBI_tcfCTW 381 | $sSBss17FixedWidthInteger14RawSignificandRpzrlE8_convert4fromx5value_Sb5exacttqd___tSzRd__lFZ12CoreGraphics7CGFloatV_SiTg5 382 | $sSuSzsSzyxqd__cSzRd__lufCTWSi_Ti5 383 | $sSUss17FixedWidthIntegerRzrlEyxqd__cSzRd__lufCSu_SiTg5 384 | $sSuSjsSj1moiyxx_xtFZTW 385 | $sSus18AdditiveArithmeticssAAP1poiyxx_xtFZTW 386 | $s12CoreGraphics7CGFloatVSBAASB4sign18exponentBitPattern011significandfG0xs17FloatingPointSignO_11RawExponentQz0L11SignificandQztcfCTW 387 | $sSd4sign18exponentBitPattern011significandcD0Sds17FloatingPointSignO_Sus6UInt64VtcfC 388 | $sSus17FixedWidthIntegerssAAP3alloiyxx_xtFZTW 389 | $sSiSLsSL2geoiySbx_xtFZTW 390 | $s12CoreGraphics7CGFloatVs13SignedNumericAAsADP1sopyxxFZTW 391 | $s12CoreGraphics7CGFloatVSFAASF8infinityxvgZTW 392 | $sSiSLsSL1loiySbx_xtFZTW 393 | $s12CoreGraphics7CGFloatVSFAASF8exponent8ExponentQzvgTW 394 | $sSuSLsSL1goiySbx_xtFZTW 395 | $sSus17FixedWidthIntegerssAAP23addingReportingOverflowyx12partialValue_Sb8overflowtxFTW 396 | $sSuSzsSz2ggoiyxx_qd__tSzRd__lFZTWSi_Ti5 397 | $sSus18AdditiveArithmeticssAAP1soiyxx_xtFZTW 398 | $sSuSzsSz2lloiyxx_qd__tSzRd__lFZTWSi_Ti5 399 | $sSuSzsSz16_binaryLogarithmSiyFTW 400 | $ss17FixedWidthIntegerPsE16_binaryLogarithmSiyFSu_Tg5 401 | $sSus17FixedWidthIntegerssAAP19leadingZeroBitCountSivgTW 402 | $s12CoreGraphics7CGFloatVs27ExpressibleByIntegerLiteralAAsADP07integerG0x0fG4TypeQz_tcfCTW 403 | $sSiSjsSj9magnitude9MagnitudeQzvgTW 404 | $ss12_ArrayBufferV19_getElementSlowPathyyXlSiFSo6UIViewC_Tg5 405 | $ss22_ContiguousArrayBufferV5countSivgSo6UIViewC_Tg5 406 | $ss12_ArrayBufferV7_natives011_ContiguousaB0VyxGvgSo6UIViewC_Tg5 407 | $ss12_ArrayBufferV9_isNativeSbvgSo6UIViewC_Tg5 408 | animateTabItem 409 | forEach 410 | $ss18EnumeratedSequenceV8IteratorVyx_GStsSt4next7ElementQzSgyFTWSaySo6UIViewCG_Ti5 411 | $ss18EnumeratedSequenceV8IteratorV4nextSi6offset_7ElementQz7elementtSgyFSaySo6UIViewCG_Tg5 412 | $ss16IndexingIteratorVyxGStsSt4next7ElementQzSgyFTWSaySo6UIViewCG_Ti5 413 | $sSayxGSlsSly7ElementQz5IndexQzcirTWSo6UIViewC_Ti5 414 | $sSayxSicirSo6UIViewC_Tg5 415 | $sSa11_getElement_20wasNativeTypeChecked22matchingSubscriptCheckxSi_Sbs16_DependenceTokenVtFSo6UIViewC_Tg5 416 | $ss12_ArrayBufferV18_nativeTypeCheckeds011_ContiguousaB0VyxGvgSo6UIViewC_Tg5 417 | $sSayxGSlsSl9formIndex5aftery0B0Qzz_tFTWSo6UIViewC_Ti5 418 | $sSa9formIndex5afterySiz_tFSo6UIViewC_Tg5 419 | $sSiSo6UIViewCs5Error_pIgygzo_Si6offset_AB7elementtsAC_pIegnzo_TR 420 | $s22LiquidTabBarController05JDTabC0C07animateB4Item33_99E7F9C3A3A70C760AD11B97383A0F34LL5indexySi_tFySi_So6UIViewCtXEfU_ 421 | animateTabDeSelect 422 | animateTabSelected 423 | $sSa15_checkSubscript_20wasNativeTypeCheckeds16_DependenceTokenVSi_SbtFSo6UIViewC_Tg5 424 | $ss12_ArrayBufferV37_checkInoutAndNativeTypeCheckedBounds_03wasfgH0ySi_SbtFSo6UIViewC_Tg5 425 | $sSa29_hoistableIsNativeTypeCheckedSbyFSo6UIViewC_Tg5 426 | $ss12_ArrayBufferV32arrayPropertyIsNativeTypeCheckedSbvgSo6UIViewC_Tg5 427 | $ss12_ArrayBufferV20_isNativeTypeCheckedSbvgSo6UIViewC_Tg5 428 | $ss18EnumeratedSequenceVyxGSTsST12makeIterator0D0QzyFTWSaySo6UIViewCG_Ti5 429 | $ss18EnumeratedSequenceV12makeIteratorAB0D0Vyx_GyFSaySo6UIViewCG_Tg5 430 | $sSayxGSTsST12makeIterator0B0QzyFTWSo6UIViewC_Ti5 431 | makeIterator 432 | $sSayxGSlsSl10startIndex0B0QzvgTWSo6UIViewC_Ti5 433 | $sSa10startIndexSivgSo6UIViewC_Tg5 434 | $sSayxGSlsSl8endIndex0B0QzvgTWSo6UIViewC_Ti5 435 | $sSa8endIndexSivgSo6UIViewC_Tg5 436 | $sSa9_getCountSiyFSo6UIViewC_Tg5 437 | circleTransition.get 438 | tabWidth.get 439 | count.get 440 | $sSa9_getCountSiyFSo16UIViewControllerC_Tg5 441 | setUpView 442 | innerCircleView.get 443 | $s22LiquidTabBarController05JDTabC0C15innerCircleView33_99E7F9C3A3A70C760AD11B97383A0F34LLSo6UIViewCvgAGyXEfU_ 444 | tabBarTintColor.get 445 | outerCircleView.get 446 | $s22LiquidTabBarController05JDTabC0C15outerCircleView33_99E7F9C3A3A70C760AD11B97383A0F34LLSo6UIViewCvgAGyXEfU_ 447 | touchesBegan 448 | $sSd8isFiniteSbvg 449 | first.get 450 | $sShyxGSlsSly7ElementQz5IndexQzcirTWSo7UITouchC_Ti5 451 | $sShyxSh5IndexVyx_GcirSo7UITouchC_Tg5 452 | $sSh5IndexVyx_GSQsSQ2eeoiySbx_xtFZTWSo7UITouchC_Ti5 453 | $sSh5IndexV2eeoiySbAByx_G_ADtFZSo7UITouchC_Tg5 454 | $sShyxGSlsSl8endIndex0B0QzvgTWSo7UITouchC_Ti5 455 | $sSh8endIndexSh0B0Vyx_GvgSo7UITouchC_Tg5 456 | $sSh8_VariantV8endIndexSh0C0Vyx_GvgSo7UITouchC_Tg5 457 | $ss10_NativeSetV8endIndexSh0D0Vyx_GvgSo7UITouchC_Tg5 458 | $sShyxGSlsSl10startIndex0B0QzvgTWSo7UITouchC_Ti5 459 | $sSh10startIndexSh0B0Vyx_GvgSo7UITouchC_Tg5 460 | $sSh8_VariantV10startIndexSh0C0Vyx_GvgSo7UITouchC_Tg5 461 | draw 462 | setupConstraints 463 | circleBorderWidth.get 464 | circleSize.get 465 | $sSa13_adoptStorage_5countSayxG_SpyxGts016_ContiguousArrayB0CyxGn_SitFZ22LiquidTabBarController13YAPLayoutEdgeO_Tg5 466 | shapeType.get 467 | $ss22_ContiguousArrayBufferV5count7storageAByxGSi_s01_aB7StorageCyxGtcfC22LiquidTabBarController13YAPLayoutEdgeO_Tg5 468 | $ss22_ContiguousArrayBufferV18_initStorageHeader5count8capacityySi_SitF22LiquidTabBarController13YAPLayoutEdgeO_Tg5 469 | last.get 470 | $sSayxGSlsSly7ElementQz5IndexQzcirTW12CoreGraphics7CGFloatV_Ti5 471 | $sSayxSicir12CoreGraphics7CGFloatV_Tg5 472 | $sSayxGSKsSK5index6before5IndexQzAE_tFTW12CoreGraphics7CGFloatV_Ti5 473 | $sSa5index6beforeS2i_tF12CoreGraphics7CGFloatV_Tg5 474 | $sSayxGSlsSl7isEmptySbvgTW12CoreGraphics7CGFloatV_Ti5 475 | isEmpty.get 476 | $sSayxGSlsSl8endIndex0B0QzvgTW12CoreGraphics7CGFloatV_Ti5 477 | $sSa8endIndexSivg12CoreGraphics7CGFloatV_Tg5 478 | $sSa9_getCountSiyF12CoreGraphics7CGFloatV_Tg5 479 | cornerBackgroundView.get 480 | $s22LiquidTabBarController05JDTabC0C20cornerBackgroundView33_99E7F9C3A3A70C760AD11B97383A0F34LLSo6UIViewCvgAGyXEfU_ 481 | stackView.get 482 | didSelectTab 483 | shapeType.modify 484 | shapeType.set 485 | shapeType.didset 486 | circleBorderWidth.modify 487 | circleSize.set 488 | circleSize.didset 489 | circleSize.modify 490 | tabBarTintColor.modify 491 | tabBarTintColor.set 492 | tabBarTintColor.didset 493 | $s22LiquidTabBarController05JDTabC0C03tabC9TintColorSo7UIColorCvWySi_So6UIViewCtXEfU_ 494 | imageSelectedTintColor.set 495 | Sources/LiquidTabBarController/LiquidTabBar/LiquidTabBarItem.swift 496 | _globalinit_33_6259CB39AD462BBF9BDD556E1B4355D1_func0 497 | _$sSo16UIViewControllerC012LiquidTabBarB0E16hidesBottomSOBarSbvgTo 498 | _$sypSgWOb 499 | _$sypSgWOh 500 | ___swift_destroy_boxed_opaque_existential_0 501 | _$sSo16UIViewControllerC012LiquidTabBarB0E16hidesBottomSOBarSbvsTo 502 | _$sSo16UIViewControllerC012LiquidTabBarB0E16newViewDidAppearyySbFTo 503 | _$sSo16UIViewControllerCMa 504 | _$s22LiquidTabBarController12associateKey33_6259CB39AD462BBF9BDD556E1B4355D1LLytSgvp 505 | _$sSo16UIViewControllerCML 506 | _objc_categories 507 | /Users/jawadali/Documents/LiquidTabBarController/Sources/LiquidTabBarController/Extensions/UIViewController+Extesion.swift 508 | $sSo16UIViewControllerCMa 509 | setUpTabBar 510 | $sSo16UIViewControllerC012LiquidTabBarB0E05setUpdE0yyFZyyXEfU_ 511 | != 512 | newViewDidAppear 513 | Sources/LiquidTabBarController/LiquidTabBar/LiquidTabBarController.swift 514 | hidesBottomSOBar.set 515 | $s22LiquidTabBarController12associateKey33_6259CB39AD462BBF9BDD556E1B4355D1LLytSgvau 516 | $sSo16UIViewControllerC012LiquidTabBarB0E16hidesBottomSOBarSbvsTo 517 | __swift_destroy_boxed_opaque_existential_0 518 | $sypSgWOh 519 | $sypSgWOb 520 | hidesBottomSOBar.get 521 | $sSo16UIViewControllerC012LiquidTabBarB0E16hidesBottomSOBarSbvgTo 522 | jDTabBarController.get 523 | globalinit_33_6259CB39AD462BBF9BDD556E1B4355D1_func0 524 | _$s12CoreGraphics7CGFloatVs13SignedNumericAAsADP1sopyxxFZTW 525 | _$ss15ContiguousArrayV16_copyToNewBuffer8oldCountySi_tFSo8NSNumberC_Tg5 526 | _$ss20_ArrayBufferProtocolPsE025_forceCreateUniqueMutableB0011countForNewB003minJ8Capacitys011_ContiguousaB0Vy7ElementQzGSi_SitFAGySo8NSNumberCG_Tg5 527 | _$ss20_ArrayBufferProtocolPsE22_arrayOutOfPlaceUpdateyys011_ContiguousaB0Vy7ElementQzGz_S2iySpyAGG_SitXEtFfA2_AEySo8NSNumberCG_Tg5 528 | _$ss20_ArrayBufferProtocolPsE22_arrayOutOfPlaceUpdateyys011_ContiguousaB0Vy7ElementQzGz_S2iySpyAGG_SitXEtFAEySo8NSNumberCG_Tg5 529 | _$ss20_ArrayBufferProtocolPsE025_forceCreateUniqueMutableB4Impl08countForB014minNewCapacity08requiredM0s011_ContiguousaB0Vy7ElementQzGSi_S2itFAHySo8NSNumberCG_Tg5 530 | _$ss20_ArrayBufferProtocolPsE22_arrayOutOfPlaceUpdateyys011_ContiguousaB0Vy7ElementQzGz_S2iySpyAGG_SitXEtFfA2_yAI_SitcfU_AEySo8NSNumberCG_Tg5 531 | _$sSis35_ExpressibleByBuiltinIntegerLiteralssAAP08_builtindE0xBI_tcfCTW 532 | _$s12CoreGraphics7CGFloatVs27ExpressibleByIntegerLiteralAAsADP07integerG0x0fG4TypeQz_tcfCTW 533 | _$sSo8NSNumberCMa 534 | _$ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCSo8NSNumberC_Tg5Tf4nnd_n 535 | _$sSo11CAAnimationCMa 536 | _$sSo8NSNumberCMaTm 537 | _symbolic _____yypG s23_ContiguousArrayStorageC 538 | _$ss23_ContiguousArrayStorageCyypGMD 539 | _symbolic _____ySo8NSNumberCG s23_ContiguousArrayStorageC 540 | _$ss23_ContiguousArrayStorageCySo8NSNumberCGMD 541 | _$sSo8NSNumberCML 542 | _symbolic _____ySo11CAAnimationCG s23_ContiguousArrayStorageC 543 | _$ss23_ContiguousArrayStorageCySo11CAAnimationCGMD 544 | _$sSo11CAAnimationCML 545 | /Users/jawadali/Documents/LiquidTabBarController/Sources/LiquidTabBarController/Extensions/CALayer+Extension.swift 546 | $sSo8NSNumberCMa 547 | $ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCSo8NSNumberC_Tg5Tf4nnd_n 548 | $ss22_ContiguousArrayBufferV18_initStorageHeader5count8capacityySi_SitFSo8NSNumberC_Tg5 549 | _swift_stdlib_malloc_size 550 | Downloads/Xcode 2.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.4.sdk/usr/lib/swift/shims/LibcShims.h 551 | /Users/jawadali 552 | $ss22_ContiguousArrayBufferVAByxGycfCSo8NSNumberC_Tg5 553 | $sSis35_ExpressibleByBuiltinIntegerLiteralssAAP08_builtindE0xBI_tcfCTW 554 | $ss20_ArrayBufferProtocolPsE22_arrayOutOfPlaceUpdateyys011_ContiguousaB0Vy7ElementQzGz_S2iySpyAGG_SitXEtFfA2_yAI_SitcfU_AEySo8NSNumberCG_Tg5 555 | $ss20_ArrayBufferProtocolPsE025_forceCreateUniqueMutableB4Impl08countForB014minNewCapacity08requiredM0s011_ContiguousaB0Vy7ElementQzGSi_S2itFAHySo8NSNumberCG_Tg5 556 | $ss22_ContiguousArrayBufferV19_uninitializedCount15minimumCapacityAByxGSi_SitcfCSo8NSNumberC_Tg5 557 | $ss22_ContiguousArrayBufferVyxGs01_bC8ProtocolssADP8capacitySivgTWSo8NSNumberC_Ti5 558 | $ss22_ContiguousArrayBufferV8capacitySivgSo8NSNumberC_Tg5 559 | $ss20_ArrayBufferProtocolPsE22_arrayOutOfPlaceUpdateyys011_ContiguousaB0Vy7ElementQzGz_S2iySpyAGG_SitXEtFAEySo8NSNumberCG_Tg5 560 | $ss22_ContiguousArrayBufferVyxGs01_bC8ProtocolssADP13_copyContents8subRange12initializingSpy7ElementQzGSnySiG_AKtFTWSo8NSNumberC_Ti5 561 | $ss22_ContiguousArrayBufferV13_copyContents8subRange12initializingSpyxGSnySiG_AFtFSo8NSNumberC_Tg5 562 | $ss22_ContiguousArrayBufferV5countSivsSo8NSNumberC_Tg5 563 | $sSp12deinitialize5countSvSi_tFSo8NSNumberC_Tg5 564 | $ss22_ContiguousArrayBufferV5countSivgSo8NSNumberC_Tg5 565 | $sSp14moveInitialize4from5countySpyxG_SitFSo8NSNumberC_Tg5 566 | $ss22_ContiguousArrayBufferVyxGs01_bC8ProtocolssADP19firstElementAddressSpy0F0QzGvgTWSo8NSNumberC_Ti5 567 | $ss22_ContiguousArrayBufferV19firstElementAddressSpyxGvgSo8NSNumberC_Tg5 568 | $sSp10initialize4from5countySPyxG_SitFSo8NSNumberC_Tg5 569 | $ss22_ContiguousArrayBufferVyxGSlsSl8endIndex0E0QzvgTWSo8NSNumberC_Ti5 570 | $ss22_ContiguousArrayBufferV8endIndexSivgSo8NSNumberC_Tg5 571 | $ss22_ContiguousArrayBufferVyxGs01_bC8ProtocolssADP027requestUniqueMutableBackingC015minimumCapacityABy7ElementQzGSgSi_tFTWSo8NSNumberC_Ti5 572 | $ss22_ContiguousArrayBufferV027requestUniqueMutableBackingC015minimumCapacityAByxGSgSi_tFSo8NSNumberC_Tg5 573 | $ss22_ContiguousArrayBufferV20isUniquelyReferencedSbyFSo8NSNumberC_Tg5 574 | $ss22_ContiguousArrayBufferVyxGSlsSl5countSivgTWSo8NSNumberC_Ti5 575 | $ss20_ArrayBufferProtocolPsE22_arrayOutOfPlaceUpdateyys011_ContiguousaB0Vy7ElementQzGz_S2iySpyAGG_SitXEtFfA2_AEySo8NSNumberCG_Tg5 576 | $ss20_ArrayBufferProtocolPsE025_forceCreateUniqueMutableB0011countForNewB003minJ8Capacitys011_ContiguousaB0Vy7ElementQzGSi_SitFAGySo8NSNumberCG_Tg5 577 | $ss15ContiguousArrayV16_copyToNewBuffer8oldCountySi_tFSo8NSNumberC_Tg5 578 | aimateJelly 579 | $sSa13_adoptStorage_5countSayxG_SpyxGts016_ContiguousArrayB0CyxGn_SitFZSo11CAAnimationC_Tg5 580 | $ss22_ContiguousArrayBufferV19firstElementAddressSpyxGvgSo11CAAnimationC_Tg5 581 | $ss22_ContiguousArrayBufferV5count7storageAByxGSi_s01_aB7StorageCyxGtcfCSo11CAAnimationC_Tg5 582 | $ss22_ContiguousArrayBufferV18_initStorageHeader5count8capacityySi_SitFSo11CAAnimationC_Tg5 583 | $sSa13_adoptStorage_5countSayxG_SpyxGts016_ContiguousArrayB0CyxGn_SitFZSo8NSNumberC_Tg5 584 | $ss22_ContiguousArrayBufferV5count7storageAByxGSi_s01_aB7StorageCyxGtcfCSo8NSNumberC_Tg5 585 | $sSa13_adoptStorage_5countSayxG_SpyxGts016_ContiguousArrayB0CyxGn_SitFZyp_Tg5 586 | $ss22_ContiguousArrayBufferV19firstElementAddressSpyxGvgyp_Tg5 587 | $ss22_ContiguousArrayBufferV5count7storageAByxGSi_s01_aB7StorageCyxGtcfCyp_Tg5 588 | $ss22_ContiguousArrayBufferV18_initStorageHeader5count8capacityySi_SitFyp_Tg5 589 | aimateReverseForward 590 | map 591 | $sSaySayxGqd__c7ElementQyd__RszSTRd__lufCSo8NSNumberC_s15ContiguousArrayVyAEGTg5 592 | $ss12_ArrayBufferV7_buffer19shiftedToStartIndexAByxGs011_ContiguousaB0VyxG_SitcfCSo8NSNumberC_Tg5 593 | $ss15ContiguousArrayV6appendyyxnFSo8NSNumberC_Tg5 594 | $ss15ContiguousArrayV37_appendElementAssumeUniqueAndCapacity_03newD0ySi_xntFSo8NSNumberC_Tg5 595 | $sSp10initialize2toyx_tFSo8NSNumberC_Tg5 596 | $ss15ContiguousArrayV36_reserveCapacityAssumingUniqueBuffer8oldCountySi_tFSo8NSNumberC_Tg5 597 | $ss15ContiguousArrayV9_getCountSiyFSo8NSNumberC_Tg5 598 | $ss15ContiguousArrayV034_makeUniqueAndReserveCapacityIfNotD0yyFSo8NSNumberC_Tg5 599 | $ss22_ContiguousArrayBufferV30isMutableAndUniquelyReferencedSbyFSo8NSNumberC_Tg5 600 | $sSdSo8NSNumberCs5Error_pIgyozo_SdABsAC_pIegnrzo_TR 601 | $sSo7CALayerC22LiquidTabBarControllerE20aimateReverseForward4from4endXy12CoreGraphics7CGFloatV_AItFSo8NSNumberCSdXEfU_ 602 | $ss15ContiguousArrayV15reserveCapacityyySiFSo8NSNumberC_Tg5 603 | $sSksSx5IndexRpzSnyABG7IndicesRtzSiAA_6StrideRTzrlE7indicesACvgs22_ContiguousArrayBufferVySo8NSNumberCG_Tg5 604 | $ss15ContiguousArrayV5countSivgSo8NSNumberC_Tg5 605 | animateShapeSpring 606 | $s12CoreGraphics7CGFloatVSjAASj9magnitude9MagnitudeQzvgTW 607 | $sSd9magnitudeSdvg 608 | _$sIeg_IeyB_TR 609 | _$s22LiquidTabBarController04LTabC0C03tabC9TintColorSo7UIColorCvM.resume.0 610 | _$s22LiquidTabBarController04LTabC0CIetMg_TC 611 | _$s22LiquidTabBarController04LTabC0C10circleSize12CoreGraphics7CGFloatVvM.resume.0 612 | _$s22LiquidTabBarController04LTabC0C10circleSize12CoreGraphics7CGFloatVvgTm 613 | _$s22LiquidTabBarController04LTabC0C10circleSize12CoreGraphics7CGFloatVvsTm 614 | _$s22LiquidTabBarController04LTabC0C8drawTabs33_9FD94367B53DD66E345569B8BEE57A86LLyyF 615 | _$s22LiquidTabBarController04LTabC0C9stackView33_9FD94367B53DD66E345569B8BEE57A86LLSo07UIStackG0Cvg 616 | _$s22LiquidTabBarController04LTabC0C5frameACSo6CGRectV_tcfc 617 | _$s22LiquidTabBarController04LTabC0C5frameACSo6CGRectV_tcfcTo 618 | _$s22LiquidTabBarController04LTabC0C5coderACSgSo7NSCoderC_tcfcTo 619 | _$s22LiquidTabBarController04LTabC0C16setupConstraints33_9FD94367B53DD66E345569B8BEE57A86LLyyF 620 | _$s22LiquidTabBarController04LTabC0C13drawShapePath33_9FD94367B53DD66E345569B8BEE57A86LL11holdingViewySo6UIViewC_tF 621 | _$s22LiquidTabBarController04LTabC0C4drawyySo6CGRectVFTo 622 | _$s22LiquidTabBarController04LTabC0C12touchesBegan_4withyShySo7UITouchCG_So7UIEventCSgtFTo 623 | _$s22LiquidTabBarController04LTabC0CfETo 624 | _$s22LiquidTabBarController04LTabC0C9setUpView33_9FD94367B53DD66E345569B8BEE57A86LLyyF 625 | _$s22LiquidTabBarController04LTabC0C16circleTransition12CoreGraphics7CGFloatV6startX_AG4endXtvg 626 | _$s22LiquidTabBarController04LTabC0C07animateB4Item33_9FD94367B53DD66E345569B8BEE57A86LL5indexySi_tF 627 | _$s22LiquidTabBarController0abC4ItemC03tabcE09tintColorACSo05UITabcE0C_So7UIColorCtcfcTf4ggn_n 628 | _$s22LiquidTabBarController04LTabC0C5coderACSgSo7NSCoderC_tcfcTf4gn_n 629 | _$s22LiquidTabBarController04LTabC0C4drawyySo6CGRectVFTf4dn_n 630 | _$s22LiquidTabBarController04LTabC8Delegate_pSgXwWOh 631 | _$s22LiquidTabBarController04LTabC8Delegate_pSgWOe 632 | _$sSo7UITouchCMaTm 633 | _$sSo17OS_dispatch_queueCMa 634 | _$s22LiquidTabBarController04LTabC0C15viewControllersSaySo06UIViewD0CGvWyycfU_TA 635 | _block_copy_helper 636 | _block_destroy_helper 637 | _$s8Dispatch0A13WorkItemFlagsVACs10SetAlgebraAAWl 638 | _$sSay8Dispatch0A13WorkItemFlagsVGSayxGSTsWl 639 | ___swift_instantiateConcreteTypeFromMangledNameAbstract 640 | _$s22LiquidTabBarController04LTabC0C17circleBorderWidth12CoreGraphics7CGFloatVvM.resume.0 641 | _symbolic $s22LiquidTabBarController04LTabC8DelegateP 642 | _$s22LiquidTabBarController04LTabC8Delegate_pMF 643 | _$s22LiquidTabBarController04LTabC0C10shapeLayer33_9FD94367B53DD66E345569B8BEE57A86LLSo07CAShapeG0CvpWvd 644 | _$s22LiquidTabBarController04LTabC0C27$__lazy_storage_$_stackView33_9FD94367B53DD66E345569B8BEE57A86LLSo07UIStackI0CSgvpWvd 645 | _$s22LiquidTabBarController04LTabC0C33$__lazy_storage_$_innerCircleView33_9FD94367B53DD66E345569B8BEE57A86LLSo6UIViewCSgvpWvd 646 | _$s22LiquidTabBarController04LTabC0C13selectedIndex33_9FD94367B53DD66E345569B8BEE57A86LLSivpWvd 647 | _$s22LiquidTabBarController04LTabC0C21previousSelectedIndex33_9FD94367B53DD66E345569B8BEE57A86LLSivpWvd 648 | _$s22LiquidTabBarController04LTabC0CML 649 | _$s22LiquidTabBarController04LTabC0CMf 650 | _symbolic _____ 22LiquidTabBarController04LTabC0C 651 | _symbolic So12CAShapeLayerC 652 | _symbolic ______pSgXw 22LiquidTabBarController04LTabC8DelegateP 653 | _$s22LiquidTabBarController04LTabC0CMF 654 | _$sSo17OS_dispatch_queueCML 655 | _block_descriptor 656 | _$s8Dispatch0A13WorkItemFlagsVACs10SetAlgebraAAWL 657 | _symbolic Say_____G 8Dispatch0A13WorkItemFlagsV 658 | _$sSay8Dispatch0A13WorkItemFlagsVGMD 659 | _$sSay8Dispatch0A13WorkItemFlagsVGSayxGSTsWL 660 | _$s22LiquidTabBarController04LTabC0C15viewControllersSaySo06UIViewD0CGvgTq 661 | _$s22LiquidTabBarController04LTabC0C15viewControllersSaySo06UIViewD0CGvsTq 662 | _$s22LiquidTabBarController04LTabC0C15viewControllersSaySo06UIViewD0CGvMTq 663 | _$s22LiquidTabBarController04LTabC0C8delegateAA0eC8Delegate_pSgvgTq 664 | _$s22LiquidTabBarController04LTabC0C8delegateAA0eC8Delegate_pSgvsTq 665 | _$s22LiquidTabBarController04LTabC0C8delegateAA0eC8Delegate_pSgvMTq 666 | /Users/jawadali/Documents/LiquidTabBarController/Sources/LiquidTabBarController/LiquidTabBar/LiquiTabBar.swift 667 | $sSay8Dispatch0A13WorkItemFlagsVGSayxGSTsWl 668 | $s8Dispatch0A13WorkItemFlagsVACs10SetAlgebraAAWl 669 | block_destroy_helper 670 | block_copy_helper 671 | $s22LiquidTabBarController04LTabC0C15viewControllersSaySo06UIViewD0CGvWyycfU_TA 672 | $s22LiquidTabBarController04LTabC0C15viewControllersSaySo06UIViewD0CGvWyycfU_ 673 | $sSo17OS_dispatch_queueCMa 674 | $sSo7UITouchCMa 675 | $s22LiquidTabBarController04LTabC8Delegate_pSgXwWOh 676 | $s22LiquidTabBarController04LTabC0CMa 677 | shapeLayer.get 678 | $s22LiquidTabBarController04LTabC0C15innerCircleView33_9FD94367B53DD66E345569B8BEE57A86LLSo6UIViewCvgAGyXEfU_ 679 | async 680 | $sSayxGSlsSl8endIndex0B0QzvgTWSo16UIViewControllerC_Ti5 681 | $sSa8endIndexSivgSo16UIViewControllerC_Tg5 682 | $sSayxGSlsSl10startIndex0B0QzvgTWSo16UIViewControllerC_Ti5 683 | $sSa10startIndexSivgSo16UIViewControllerC_Tg5 684 | $s22LiquidTabBarController04LTabC0C07animateB4Item33_9FD94367B53DD66E345569B8BEE57A86LL5indexySi_tFySi_So6UIViewCtXEfU_ 685 | drawShapePath 686 | drawTabs 687 | $sSayxGSlsSl9formIndex5aftery0B0Qzz_tFTWSo16UIViewControllerC_Ti5 688 | $sSa9formIndex5afterySiz_tFSo16UIViewControllerC_Tg5 689 | $s22LiquidTabBarController0abC4ItemC03tabcE09tintColorACSo05UITabcE0C_So7UIColorCtcfcfA0_ 690 | $sSayxGSlsSly7ElementQz5IndexQzcirTWSo16UIViewControllerC_Ti5 691 | $sSayxSicirSo16UIViewControllerC_Tg5 692 | _$s22LiquidTabBarController5ShapeOSQAASQ2eeoiySbx_xtFZTW 693 | _$s22LiquidTabBarController5ShapeOSHAASQWb 694 | _$s22LiquidTabBarController5ShapeOACSQAAWl 695 | _$s22LiquidTabBarController5ShapeOSHAASH9hashValueSivgTW 696 | _$s22LiquidTabBarController5ShapeOSHAASH4hash4intoys6HasherVz_tFTW 697 | _$s22LiquidTabBarController5ShapeOSHAASH13_rawHashValue4seedS2i_tFTW 698 | _$s22LiquidTabBarController5ShapeOSYAASY8rawValuexSg03RawG0Qz_tcfCTW 699 | _$s22LiquidTabBarController5ShapeOSYAASY8rawValue03RawG0QzvgTW 700 | ___swift_memcpy1_1 701 | _$s22LiquidTabBarController5ShapeOwet 702 | _$s22LiquidTabBarController5ShapeOwst 703 | _$s22LiquidTabBarController5ShapeOwug 704 | _$s22LiquidTabBarController5ShapeOwup 705 | _$s22LiquidTabBarController5ShapeOwui 706 | _$sSuSzsSz1ooiyxx_xtFZTW 707 | _$s22LiquidTabBarController5ShapeOACSQAAWL 708 | _associated conformance 22LiquidTabBarController5ShapeOSHAASQ 709 | _$s22LiquidTabBarController5ShapeOWV 710 | _$s22LiquidTabBarController5ShapeOMf 711 | _$s22LiquidTabBarController5ShapeOMF 712 | _symbolic _____y_____G s23_ContiguousArrayStorageC 12CoreGraphics7CGFloatV 713 | _$ss23_ContiguousArrayStorageCy12CoreGraphics7CGFloatVGMD 714 | _symbolic $sSY 715 | _$s22LiquidTabBarController5ShapeOSYAAMA 716 | /Users/jawadali/Documents/LiquidTabBarController/Sources/LiquidTabBarController/LiquidTabBar/Shape.swift 717 | $s22LiquidTabBarController5ShapeOMa 718 | $s22LiquidTabBarController5ShapeOwui 719 | $s22LiquidTabBarController5ShapeOwup 720 | $s22LiquidTabBarController5ShapeOwug 721 | $s22LiquidTabBarController5ShapeOwst 722 | $s22LiquidTabBarController5ShapeOwet 723 | __swift_memcpy1_1 724 | _rawHashValue 725 | hash 726 | $sSiSHsSH4hash4intoys6HasherVz_tFTW 727 | $sSi4hash4intoys6HasherVz_tF 728 | hashValue.get 729 | $sSiSHsSH9hashValueSivgTW 730 | $s22LiquidTabBarController5ShapeOACSQAAWl 731 | $s22LiquidTabBarController5ShapeOSHAASQWb 732 | maskCorenrs.get 733 | llvm.loop.isvectorized 734 | llvm.loop.unroll.runtime.disable 735 | $ss16IndexingIteratorVyxGStsSt4next7ElementQzSgyFTWSaySo12CACornerMaskVG_Ti5 736 | $sSayxGSlsSl9formIndex5aftery0B0Qzz_tFTWSo12CACornerMaskV_Ti5 737 | $sSa9formIndex5afterySiz_tFSo12CACornerMaskV_Tg5 738 | $sSayxGSlsSly7ElementQz5IndexQzcirTWSo12CACornerMaskV_Ti5 739 | $sSayxSicirSo12CACornerMaskV_Tg5 740 | $sSa11_getElement_20wasNativeTypeChecked22matchingSubscriptCheckxSi_Sbs16_DependenceTokenVtFSo12CACornerMaskV_Tg5 741 | $sSayxGSlsSl8endIndex0B0QzvgTWSo12CACornerMaskV_Ti5 742 | $sSa8endIndexSivgSo12CACornerMaskV_Tg5 743 | $sSa9_getCountSiyFSo12CACornerMaskV_Tg5 744 | $ss22_ContiguousArrayBufferV5countSivgSo12CACornerMaskV_Tg5 745 | layoutMargins.get 746 | _$s22LiquidTabBarController0abC4ItemCIetMg_TC 747 | _$s22LiquidTabBarController0abC4ItemC22imageSelectedTintColorSo7UIColorCvgTm 748 | _$s22LiquidTabBarController0abC4ItemC22imageSelectedTintColorSo7UIColorCvsTm 749 | _$s22LiquidTabBarController0abC4ItemC10badgeColorSo7UIColorCSgvM.resume.0 750 | _$sSSSgWOy 751 | _$s22LiquidTabBarController0abC4ItemC9imageView33_C38E9367597EC2B6DB9B650424041F00LLSo07UIImageG0Cvg 752 | _$s22LiquidTabBarController0abC4ItemC5coderACSgSo7NSCoderC_tcfcTo 753 | _$s22LiquidTabBarController0abC4ItemC5frameACSo6CGRectV_tcfcTo 754 | _$s22LiquidTabBarController0abC4ItemCfETo 755 | _$s22LiquidTabBarController0abC4ItemC16setupConstraints33_C38E9367597EC2B6DB9B650424041F00LLyyF 756 | _$sSbIegy_SbIeyBy_TR 757 | _$s22LiquidTabBarController0abC4ItemC5coderACSgSo7NSCoderC_tcfcTf4dn_n 758 | _$s22LiquidTabBarController0abC4ItemC07animateB8DeSelectyyFyycfU_TA 759 | _$s22LiquidTabBarController0abC4ItemC07animateB8DeSelectyyFySbcfU0_TA 760 | _block_copy_helper.4 761 | _block_copy_helper.10 762 | _$s22LiquidTabBarController0abC4ItemC07animateB8SelectedyyFyycfU_TA 763 | _block_destroy_helper.5 764 | _block_destroy_helper.11 765 | _$s22LiquidTabBarController0abC4ItemC22imageSelectedTintColorSo7UIColorCvM.resume.0 766 | _$s22LiquidTabBarController0abC4ItemC17animationDurationSdvM.resume.0 767 | _$s22LiquidTabBarController0abC4ItemC14imageTintColorSo7UIColorCvM.resume.0 768 | _$s22LiquidTabBarController0abC4ItemC10badgeValueSSSgvM.resume.0 769 | _$s22LiquidTabBarController0abC4ItemC5image33_C38E9367597EC2B6DB9B650424041F00LLSo7UIImageCvpWvd 770 | _$s22LiquidTabBarController0abC4ItemC22imageCenterYConstraint33_C38E9367597EC2B6DB9B650424041F00LLSo18NSLayoutConstraintCSgvpWvd 771 | _$s22LiquidTabBarController0abC4ItemC20imageWidthConstraint33_C38E9367597EC2B6DB9B650424041F00LLSo08NSLayoutH0CSgvpWvd 772 | _$s22LiquidTabBarController0abC4ItemC21imageHeightConstraint33_C38E9367597EC2B6DB9B650424041F00LLSo08NSLayoutH0CSgvpWvd 773 | _$s22LiquidTabBarController0abC4ItemC9imageSize12CoreGraphics7CGFloatVvpWvd 774 | _$s22LiquidTabBarController0abC4ItemC27$__lazy_storage_$_imageView33_C38E9367597EC2B6DB9B650424041F00LLSo07UIImageI0CSgvpWvd 775 | _$s22LiquidTabBarController0abC4ItemCML 776 | _$s22LiquidTabBarController0abC4ItemCMf 777 | _symbolic So7UIImageC 778 | _symbolic So18NSLayoutConstraintCSg 779 | _symbolic Sd 780 | _symbolic So7UIColorCSg 781 | _symbolic SSSg 782 | _symbolic So11UIImageViewCSg 783 | _$s22LiquidTabBarController0abC4ItemCMF 784 | _block_descriptor.6 785 | _block_descriptor.12 786 | _$s22LiquidTabBarController0abC4ItemC9imageSize12CoreGraphics7CGFloatVvgTq 787 | _$s22LiquidTabBarController0abC4ItemC9imageSize12CoreGraphics7CGFloatVvsTq 788 | _$s22LiquidTabBarController0abC4ItemC9imageSize12CoreGraphics7CGFloatVvMTq 789 | _$s22LiquidTabBarController0abC4ItemC03tabcE09tintColorACSo05UITabcE0C_So7UIColorCtcfCTq 790 | /Users/jawadali/Documents/LiquidTabBarController/Sources/LiquidTabBarController/LiquidTabBar/LiquidTabBarItem.swift 791 | $s22LiquidTabBarController0abC4ItemC07animateB8DeSelectyyFySbcfU0_TA 792 | $s22LiquidTabBarController0abC4ItemC07animateB8DeSelectyyFySbcfU0_ 793 | $s22LiquidTabBarController0abC4ItemC07animateB8DeSelectyyFyycfU_TA 794 | $s22LiquidTabBarController0abC4ItemC07animateB8DeSelectyyFyycfU_ 795 | setup 796 | setupViews 797 | $sSbIegy_SbIeyBy_TR 798 | imageHeightConstraint.get 799 | imageHeightConstraint.set 800 | imageSize.get 801 | imageWidthConstraint.get 802 | imageWidthConstraint.set 803 | imageCenterYConstraint.get 804 | imageCenterYConstraint.set 805 | $s22LiquidTabBarController0abC4ItemCMa 806 | $ss25_unimplementedInitializer9className04initD04file4line6columns5NeverOs12StaticStringV_A2JS2utFySRys5UInt8VGXEfU0_ 807 | $ss25_unimplementedInitializer9className04initD04file4line6columns5NeverOs12StaticStringV_A2JS2utFySRys5UInt8VGXEfU0_yAMXEfU_ 808 | imageView.get 809 | createImageView 810 | Sources/LiquidTabBarController/Factories/UIImageViewFactory.swift 811 | imageTintColor.get 812 | badgeValue.modify 813 | badgeValue.set 814 | badgeValue.get 815 | badgeColor.modify 816 | badgeColor.set 817 | badgeColor.get 818 | animationDuration.modify 819 | animationDuration.set 820 | animationDuration.get 821 | imageTintColor.modify 822 | imageSelectedTintColor.get 823 | imageSelectedTintColor.modify 824 | $sIeg_IeyB_TR 825 | _$s22LiquidTabBarController14UILabelFactoryCML 826 | _$s22LiquidTabBarController14UILabelFactoryCMf 827 | _symbolic _____ 22LiquidTabBarController14UILabelFactoryC 828 | _$s22LiquidTabBarController14UILabelFactoryCMF 829 | _$s22LiquidTabBarController14UILabelFactoryCACycfCTq 830 | /Users/jawadali/Documents/LiquidTabBarController/Sources/LiquidTabBarController/Factories/UILabelFactory.swift 831 | $s22LiquidTabBarController14UILabelFactoryCMa 832 | createUILabel 833 | _$s22LiquidTabBarController13YAPLayoutEdgeOSQAASQ2eeoiySbx_xtFZTW 834 | _$s22LiquidTabBarController13YAPLayoutEdgeOSHAASH9hashValueSivgTW 835 | _$s22LiquidTabBarController13YAPLayoutEdgeOSHAASH4hash4intoys6HasherVz_tFTW 836 | _$s22LiquidTabBarController13YAPLayoutEdgeOSHAASH13_rawHashValue4seedS2i_tFTW 837 | _$sSiSHsSH4hash4intoys6HasherVz_tFTW 838 | _$s22LiquidTabBarController13YAPLayoutEdgeOSHAASQWb 839 | _$s22LiquidTabBarController13YAPLayoutEdgeOACSQAAWl 840 | _$s22LiquidTabBarController25YAPLayoutConstantModifierOSHAASQWb 841 | _$s22LiquidTabBarController25YAPLayoutConstantModifierOACSQAAWl 842 | _$s22LiquidTabBarController13YAPLayoutEdgeOwet 843 | _$s22LiquidTabBarController13YAPLayoutEdgeOwst 844 | _$s22LiquidTabBarController13YAPLayoutEdgeOwug 845 | _$s22LiquidTabBarController13YAPLayoutEdgeOwup 846 | _$s22LiquidTabBarController13YAPLayoutEdgeOwui 847 | _$s22LiquidTabBarController25YAPLayoutConstantModifierOwet 848 | _$s22LiquidTabBarController25YAPLayoutConstantModifierOwst 849 | _$s22LiquidTabBarController25YAPLayoutConstantModifierOwup 850 | _$s22LiquidTabBarController25YAPLayoutConstantModifierOwui 851 | _$s22LiquidTabBarController25YAPLayoutConstantModifierOwug 852 | _$s22LiquidTabBarController25YAPLayoutConstantModifierOSQAASQ2eeoiySbx_xtFZTW 853 | _$s22LiquidTabBarController25YAPLayoutConstantModifierOSHAASH9hashValueSivgTW 854 | _$s22LiquidTabBarController25YAPLayoutConstantModifierOSHAASH13_rawHashValue4seedS2i_tFTW 855 | _$s22LiquidTabBarController25YAPLayoutConstantModifierOSHAASH4hash4intoys6HasherVz_tFTW 856 | _$s22LiquidTabBarController13YAPLayoutEdgeOACSQAAWL 857 | _associated conformance 22LiquidTabBarController13YAPLayoutEdgeOSHAASQ 858 | _$s22LiquidTabBarController25YAPLayoutConstantModifierOACSQAAWL 859 | _associated conformance 22LiquidTabBarController25YAPLayoutConstantModifierOSHAASQ 860 | _$s22LiquidTabBarController13YAPLayoutEdgeOWV 861 | _$s22LiquidTabBarController13YAPLayoutEdgeOMf 862 | _symbolic _____ 22LiquidTabBarController13YAPLayoutEdgeO 863 | _$s22LiquidTabBarController13YAPLayoutEdgeOMF 864 | _$s22LiquidTabBarController25YAPLayoutConstantModifierOWV 865 | _$s22LiquidTabBarController25YAPLayoutConstantModifierOMf 866 | _symbolic _____ 22LiquidTabBarController25YAPLayoutConstantModifierO 867 | _$s22LiquidTabBarController25YAPLayoutConstantModifierOMF 868 | /Users/jawadali/Documents/LiquidTabBarController/Sources/LiquidTabBarController/JDLayout/YAPLayoutAttributes.swift 869 | $s22LiquidTabBarController25YAPLayoutConstantModifierOMa 870 | $s22LiquidTabBarController25YAPLayoutConstantModifierOwup 871 | $s22LiquidTabBarController25YAPLayoutConstantModifierOwst 872 | $s22LiquidTabBarController25YAPLayoutConstantModifierOwet 873 | $s22LiquidTabBarController13YAPLayoutEdgeOMa 874 | $s22LiquidTabBarController13YAPLayoutEdgeOwui 875 | $s22LiquidTabBarController13YAPLayoutEdgeOwup 876 | $s22LiquidTabBarController13YAPLayoutEdgeOwug 877 | $s22LiquidTabBarController13YAPLayoutEdgeOwst 878 | $s22LiquidTabBarController13YAPLayoutEdgeOwet 879 | $s22LiquidTabBarController25YAPLayoutConstantModifierOACSQAAWl 880 | $s22LiquidTabBarController25YAPLayoutConstantModifierOSHAASQWb 881 | $s22LiquidTabBarController13YAPLayoutEdgeOACSQAAWl 882 | $s22LiquidTabBarController13YAPLayoutEdgeOSHAASQWb 883 | combine 884 | _hashValue 885 | verticalAnchor 886 | safeAreaEdge.get 887 | _$s22LiquidTabBarController18UIImageViewFactoryCML 888 | _$s22LiquidTabBarController18UIImageViewFactoryCMf 889 | _symbolic _____ 22LiquidTabBarController18UIImageViewFactoryC 890 | _$s22LiquidTabBarController18UIImageViewFactoryCMF 891 | _$s22LiquidTabBarController18UIImageViewFactoryCACycfCTq 892 | /Users/jawadali/Documents/LiquidTabBarController/Sources/LiquidTabBarController/Factories/UIImageViewFactory.swift 893 | $s22LiquidTabBarController18UIImageViewFactoryCMa 894 | createBackgroundImageView 895 | -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework.dSYM/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleIdentifier 8 | com.apple.xcode.dsym.XeroT.LiquidTabBarController 9 | CFBundleInfoDictionaryVersion 10 | 6.0 11 | CFBundlePackageType 12 | dSYM 13 | CFBundleSignature 14 | ???? 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleVersion 18 | 1 19 | 20 | 21 | -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework.dSYM/Contents/Resources/DWARF/LiquidTabBarController: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwd-ali/LiquidTabBarController/0f79221b10a2e33b15f3fbdfdbcd8fb1dbf649b6/Carthage/Build/iOS/LiquidTabBarController.framework.dSYM/Contents/Resources/DWARF/LiquidTabBarController -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework/Headers/LiquidTabBarController-Swift.h: -------------------------------------------------------------------------------- 1 | #ifndef TARGET_OS_SIMULATOR 2 | #include 3 | #endif 4 | #if TARGET_OS_SIMULATOR 5 | // Generated by Apple Swift version 5.2 (swiftlang-1103.0.32.1 clang-1103.0.32.29) 6 | #pragma clang diagnostic push 7 | #pragma clang diagnostic ignored "-Wgcc-compat" 8 | 9 | #if !defined(__has_include) 10 | # define __has_include(x) 0 11 | #endif 12 | #if !defined(__has_attribute) 13 | # define __has_attribute(x) 0 14 | #endif 15 | #if !defined(__has_feature) 16 | # define __has_feature(x) 0 17 | #endif 18 | #if !defined(__has_warning) 19 | # define __has_warning(x) 0 20 | #endif 21 | 22 | #if __has_include() 23 | # include 24 | #endif 25 | 26 | #pragma clang diagnostic ignored "-Wauto-import" 27 | #include 28 | #include 29 | #include 30 | #include 31 | 32 | #if !defined(SWIFT_TYPEDEFS) 33 | # define SWIFT_TYPEDEFS 1 34 | # if __has_include() 35 | # include 36 | # elif !defined(__cplusplus) 37 | typedef uint_least16_t char16_t; 38 | typedef uint_least32_t char32_t; 39 | # endif 40 | typedef float swift_float2 __attribute__((__ext_vector_type__(2))); 41 | typedef float swift_float3 __attribute__((__ext_vector_type__(3))); 42 | typedef float swift_float4 __attribute__((__ext_vector_type__(4))); 43 | typedef double swift_double2 __attribute__((__ext_vector_type__(2))); 44 | typedef double swift_double3 __attribute__((__ext_vector_type__(3))); 45 | typedef double swift_double4 __attribute__((__ext_vector_type__(4))); 46 | typedef int swift_int2 __attribute__((__ext_vector_type__(2))); 47 | typedef int swift_int3 __attribute__((__ext_vector_type__(3))); 48 | typedef int swift_int4 __attribute__((__ext_vector_type__(4))); 49 | typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); 50 | typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); 51 | typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); 52 | #endif 53 | 54 | #if !defined(SWIFT_PASTE) 55 | # define SWIFT_PASTE_HELPER(x, y) x##y 56 | # define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) 57 | #endif 58 | #if !defined(SWIFT_METATYPE) 59 | # define SWIFT_METATYPE(X) Class 60 | #endif 61 | #if !defined(SWIFT_CLASS_PROPERTY) 62 | # if __has_feature(objc_class_property) 63 | # define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ 64 | # else 65 | # define SWIFT_CLASS_PROPERTY(...) 66 | # endif 67 | #endif 68 | 69 | #if __has_attribute(objc_runtime_name) 70 | # define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) 71 | #else 72 | # define SWIFT_RUNTIME_NAME(X) 73 | #endif 74 | #if __has_attribute(swift_name) 75 | # define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) 76 | #else 77 | # define SWIFT_COMPILE_NAME(X) 78 | #endif 79 | #if __has_attribute(objc_method_family) 80 | # define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) 81 | #else 82 | # define SWIFT_METHOD_FAMILY(X) 83 | #endif 84 | #if __has_attribute(noescape) 85 | # define SWIFT_NOESCAPE __attribute__((noescape)) 86 | #else 87 | # define SWIFT_NOESCAPE 88 | #endif 89 | #if __has_attribute(ns_consumed) 90 | # define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed)) 91 | #else 92 | # define SWIFT_RELEASES_ARGUMENT 93 | #endif 94 | #if __has_attribute(warn_unused_result) 95 | # define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 96 | #else 97 | # define SWIFT_WARN_UNUSED_RESULT 98 | #endif 99 | #if __has_attribute(noreturn) 100 | # define SWIFT_NORETURN __attribute__((noreturn)) 101 | #else 102 | # define SWIFT_NORETURN 103 | #endif 104 | #if !defined(SWIFT_CLASS_EXTRA) 105 | # define SWIFT_CLASS_EXTRA 106 | #endif 107 | #if !defined(SWIFT_PROTOCOL_EXTRA) 108 | # define SWIFT_PROTOCOL_EXTRA 109 | #endif 110 | #if !defined(SWIFT_ENUM_EXTRA) 111 | # define SWIFT_ENUM_EXTRA 112 | #endif 113 | #if !defined(SWIFT_CLASS) 114 | # if __has_attribute(objc_subclassing_restricted) 115 | # define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA 116 | # define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 117 | # else 118 | # define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 119 | # define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 120 | # endif 121 | #endif 122 | #if !defined(SWIFT_RESILIENT_CLASS) 123 | # if __has_attribute(objc_class_stub) 124 | # define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub)) 125 | # define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME) 126 | # else 127 | # define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) 128 | # define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME) 129 | # endif 130 | #endif 131 | 132 | #if !defined(SWIFT_PROTOCOL) 133 | # define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA 134 | # define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA 135 | #endif 136 | 137 | #if !defined(SWIFT_EXTENSION) 138 | # define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) 139 | #endif 140 | 141 | #if !defined(OBJC_DESIGNATED_INITIALIZER) 142 | # if __has_attribute(objc_designated_initializer) 143 | # define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) 144 | # else 145 | # define OBJC_DESIGNATED_INITIALIZER 146 | # endif 147 | #endif 148 | #if !defined(SWIFT_ENUM_ATTR) 149 | # if defined(__has_attribute) && __has_attribute(enum_extensibility) 150 | # define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) 151 | # else 152 | # define SWIFT_ENUM_ATTR(_extensibility) 153 | # endif 154 | #endif 155 | #if !defined(SWIFT_ENUM) 156 | # define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type 157 | # if __has_feature(generalized_swift_name) 158 | # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type 159 | # else 160 | # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) 161 | # endif 162 | #endif 163 | #if !defined(SWIFT_UNAVAILABLE) 164 | # define SWIFT_UNAVAILABLE __attribute__((unavailable)) 165 | #endif 166 | #if !defined(SWIFT_UNAVAILABLE_MSG) 167 | # define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) 168 | #endif 169 | #if !defined(SWIFT_AVAILABILITY) 170 | # define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) 171 | #endif 172 | #if !defined(SWIFT_WEAK_IMPORT) 173 | # define SWIFT_WEAK_IMPORT __attribute__((weak_import)) 174 | #endif 175 | #if !defined(SWIFT_DEPRECATED) 176 | # define SWIFT_DEPRECATED __attribute__((deprecated)) 177 | #endif 178 | #if !defined(SWIFT_DEPRECATED_MSG) 179 | # define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) 180 | #endif 181 | #if __has_feature(attribute_diagnose_if_objc) 182 | # define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) 183 | #else 184 | # define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) 185 | #endif 186 | #if !defined(IBSegueAction) 187 | # define IBSegueAction 188 | #endif 189 | #if __has_feature(modules) 190 | #if __has_warning("-Watimport-in-framework-header") 191 | #pragma clang diagnostic ignored "-Watimport-in-framework-header" 192 | #endif 193 | @import CoreGraphics; 194 | @import QuartzCore; 195 | @import UIKit; 196 | #endif 197 | 198 | #pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" 199 | #pragma clang diagnostic ignored "-Wduplicate-method-arg" 200 | #if __has_warning("-Wpragma-clang-attribute") 201 | # pragma clang diagnostic ignored "-Wpragma-clang-attribute" 202 | #endif 203 | #pragma clang diagnostic ignored "-Wunknown-pragmas" 204 | #pragma clang diagnostic ignored "-Wnullability" 205 | 206 | #if __has_attribute(external_source_symbol) 207 | # pragma push_macro("any") 208 | # undef any 209 | # pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="LiquidTabBarController",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) 210 | # pragma pop_macro("any") 211 | #endif 212 | 213 | 214 | 215 | @class NSCoder; 216 | @class UITouch; 217 | @class UIEvent; 218 | 219 | SWIFT_CLASS("_TtC22LiquidTabBarController8JDTabBar") 220 | @interface JDTabBar : UIView 221 | - (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE; 222 | - (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER; 223 | - (void)drawRect:(CGRect)rect; 224 | - (void)touchesBegan:(NSSet * _Nonnull)touches withEvent:(UIEvent * _Nullable)event; 225 | @end 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | SWIFT_CLASS("_TtC22LiquidTabBarController7LTabBar") 237 | @interface LTabBar : UIView 238 | - (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE; 239 | - (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER; 240 | - (void)drawRect:(CGRect)rect; 241 | - (void)touchesBegan:(NSSet * _Nonnull)touches withEvent:(UIEvent * _Nullable)event; 242 | @end 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | @class NSBundle; 255 | 256 | SWIFT_CLASS("_TtC22LiquidTabBarController22LiquidTabBarController") 257 | @interface LiquidTabBarController : UIViewController 258 | - (void)viewDidLoad; 259 | - (void)viewDidLayoutSubviews; 260 | - (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER; 261 | - (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER; 262 | @end 263 | 264 | 265 | 266 | 267 | SWIFT_CLASS("_TtC22LiquidTabBarController16LiquidTabBarItem") 268 | @interface LiquidTabBarItem : UIView 269 | - (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder SWIFT_UNAVAILABLE; 270 | - (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE; 271 | @end 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | @interface UIViewController (SWIFT_EXTENSION(LiquidTabBarController)) 291 | @property (nonatomic) IBInspectable BOOL hidesBottomSOBar; 292 | - (void)newViewDidAppear:(BOOL)animated; 293 | @end 294 | 295 | #if __has_attribute(external_source_symbol) 296 | # pragma clang attribute pop 297 | #endif 298 | #pragma clang diagnostic pop 299 | 300 | #else 301 | // Generated by Apple Swift version 5.2 (swiftlang-1103.0.32.1 clang-1103.0.32.29) 302 | #pragma clang diagnostic push 303 | #pragma clang diagnostic ignored "-Wgcc-compat" 304 | 305 | #if !defined(__has_include) 306 | # define __has_include(x) 0 307 | #endif 308 | #if !defined(__has_attribute) 309 | # define __has_attribute(x) 0 310 | #endif 311 | #if !defined(__has_feature) 312 | # define __has_feature(x) 0 313 | #endif 314 | #if !defined(__has_warning) 315 | # define __has_warning(x) 0 316 | #endif 317 | 318 | #if __has_include() 319 | # include 320 | #endif 321 | 322 | #pragma clang diagnostic ignored "-Wauto-import" 323 | #include 324 | #include 325 | #include 326 | #include 327 | 328 | #if !defined(SWIFT_TYPEDEFS) 329 | # define SWIFT_TYPEDEFS 1 330 | # if __has_include() 331 | # include 332 | # elif !defined(__cplusplus) 333 | typedef uint_least16_t char16_t; 334 | typedef uint_least32_t char32_t; 335 | # endif 336 | typedef float swift_float2 __attribute__((__ext_vector_type__(2))); 337 | typedef float swift_float3 __attribute__((__ext_vector_type__(3))); 338 | typedef float swift_float4 __attribute__((__ext_vector_type__(4))); 339 | typedef double swift_double2 __attribute__((__ext_vector_type__(2))); 340 | typedef double swift_double3 __attribute__((__ext_vector_type__(3))); 341 | typedef double swift_double4 __attribute__((__ext_vector_type__(4))); 342 | typedef int swift_int2 __attribute__((__ext_vector_type__(2))); 343 | typedef int swift_int3 __attribute__((__ext_vector_type__(3))); 344 | typedef int swift_int4 __attribute__((__ext_vector_type__(4))); 345 | typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); 346 | typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); 347 | typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); 348 | #endif 349 | 350 | #if !defined(SWIFT_PASTE) 351 | # define SWIFT_PASTE_HELPER(x, y) x##y 352 | # define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) 353 | #endif 354 | #if !defined(SWIFT_METATYPE) 355 | # define SWIFT_METATYPE(X) Class 356 | #endif 357 | #if !defined(SWIFT_CLASS_PROPERTY) 358 | # if __has_feature(objc_class_property) 359 | # define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ 360 | # else 361 | # define SWIFT_CLASS_PROPERTY(...) 362 | # endif 363 | #endif 364 | 365 | #if __has_attribute(objc_runtime_name) 366 | # define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) 367 | #else 368 | # define SWIFT_RUNTIME_NAME(X) 369 | #endif 370 | #if __has_attribute(swift_name) 371 | # define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) 372 | #else 373 | # define SWIFT_COMPILE_NAME(X) 374 | #endif 375 | #if __has_attribute(objc_method_family) 376 | # define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) 377 | #else 378 | # define SWIFT_METHOD_FAMILY(X) 379 | #endif 380 | #if __has_attribute(noescape) 381 | # define SWIFT_NOESCAPE __attribute__((noescape)) 382 | #else 383 | # define SWIFT_NOESCAPE 384 | #endif 385 | #if __has_attribute(ns_consumed) 386 | # define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed)) 387 | #else 388 | # define SWIFT_RELEASES_ARGUMENT 389 | #endif 390 | #if __has_attribute(warn_unused_result) 391 | # define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 392 | #else 393 | # define SWIFT_WARN_UNUSED_RESULT 394 | #endif 395 | #if __has_attribute(noreturn) 396 | # define SWIFT_NORETURN __attribute__((noreturn)) 397 | #else 398 | # define SWIFT_NORETURN 399 | #endif 400 | #if !defined(SWIFT_CLASS_EXTRA) 401 | # define SWIFT_CLASS_EXTRA 402 | #endif 403 | #if !defined(SWIFT_PROTOCOL_EXTRA) 404 | # define SWIFT_PROTOCOL_EXTRA 405 | #endif 406 | #if !defined(SWIFT_ENUM_EXTRA) 407 | # define SWIFT_ENUM_EXTRA 408 | #endif 409 | #if !defined(SWIFT_CLASS) 410 | # if __has_attribute(objc_subclassing_restricted) 411 | # define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA 412 | # define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 413 | # else 414 | # define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 415 | # define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA 416 | # endif 417 | #endif 418 | #if !defined(SWIFT_RESILIENT_CLASS) 419 | # if __has_attribute(objc_class_stub) 420 | # define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub)) 421 | # define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME) 422 | # else 423 | # define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) 424 | # define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME) 425 | # endif 426 | #endif 427 | 428 | #if !defined(SWIFT_PROTOCOL) 429 | # define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA 430 | # define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA 431 | #endif 432 | 433 | #if !defined(SWIFT_EXTENSION) 434 | # define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) 435 | #endif 436 | 437 | #if !defined(OBJC_DESIGNATED_INITIALIZER) 438 | # if __has_attribute(objc_designated_initializer) 439 | # define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) 440 | # else 441 | # define OBJC_DESIGNATED_INITIALIZER 442 | # endif 443 | #endif 444 | #if !defined(SWIFT_ENUM_ATTR) 445 | # if defined(__has_attribute) && __has_attribute(enum_extensibility) 446 | # define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) 447 | # else 448 | # define SWIFT_ENUM_ATTR(_extensibility) 449 | # endif 450 | #endif 451 | #if !defined(SWIFT_ENUM) 452 | # define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type 453 | # if __has_feature(generalized_swift_name) 454 | # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type 455 | # else 456 | # define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) 457 | # endif 458 | #endif 459 | #if !defined(SWIFT_UNAVAILABLE) 460 | # define SWIFT_UNAVAILABLE __attribute__((unavailable)) 461 | #endif 462 | #if !defined(SWIFT_UNAVAILABLE_MSG) 463 | # define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) 464 | #endif 465 | #if !defined(SWIFT_AVAILABILITY) 466 | # define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) 467 | #endif 468 | #if !defined(SWIFT_WEAK_IMPORT) 469 | # define SWIFT_WEAK_IMPORT __attribute__((weak_import)) 470 | #endif 471 | #if !defined(SWIFT_DEPRECATED) 472 | # define SWIFT_DEPRECATED __attribute__((deprecated)) 473 | #endif 474 | #if !defined(SWIFT_DEPRECATED_MSG) 475 | # define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) 476 | #endif 477 | #if __has_feature(attribute_diagnose_if_objc) 478 | # define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) 479 | #else 480 | # define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) 481 | #endif 482 | #if !defined(IBSegueAction) 483 | # define IBSegueAction 484 | #endif 485 | #if __has_feature(modules) 486 | #if __has_warning("-Watimport-in-framework-header") 487 | #pragma clang diagnostic ignored "-Watimport-in-framework-header" 488 | #endif 489 | @import CoreGraphics; 490 | @import QuartzCore; 491 | @import UIKit; 492 | #endif 493 | 494 | #pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" 495 | #pragma clang diagnostic ignored "-Wduplicate-method-arg" 496 | #if __has_warning("-Wpragma-clang-attribute") 497 | # pragma clang diagnostic ignored "-Wpragma-clang-attribute" 498 | #endif 499 | #pragma clang diagnostic ignored "-Wunknown-pragmas" 500 | #pragma clang diagnostic ignored "-Wnullability" 501 | 502 | #if __has_attribute(external_source_symbol) 503 | # pragma push_macro("any") 504 | # undef any 505 | # pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="LiquidTabBarController",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) 506 | # pragma pop_macro("any") 507 | #endif 508 | 509 | 510 | 511 | @class NSCoder; 512 | @class UITouch; 513 | @class UIEvent; 514 | 515 | SWIFT_CLASS("_TtC22LiquidTabBarController8JDTabBar") 516 | @interface JDTabBar : UIView 517 | - (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE; 518 | - (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER; 519 | - (void)drawRect:(CGRect)rect; 520 | - (void)touchesBegan:(NSSet * _Nonnull)touches withEvent:(UIEvent * _Nullable)event; 521 | @end 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | SWIFT_CLASS("_TtC22LiquidTabBarController7LTabBar") 533 | @interface LTabBar : UIView 534 | - (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE; 535 | - (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER; 536 | - (void)drawRect:(CGRect)rect; 537 | - (void)touchesBegan:(NSSet * _Nonnull)touches withEvent:(UIEvent * _Nullable)event; 538 | @end 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | @class NSBundle; 551 | 552 | SWIFT_CLASS("_TtC22LiquidTabBarController22LiquidTabBarController") 553 | @interface LiquidTabBarController : UIViewController 554 | - (void)viewDidLoad; 555 | - (void)viewDidLayoutSubviews; 556 | - (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER; 557 | - (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder OBJC_DESIGNATED_INITIALIZER; 558 | @end 559 | 560 | 561 | 562 | 563 | SWIFT_CLASS("_TtC22LiquidTabBarController16LiquidTabBarItem") 564 | @interface LiquidTabBarItem : UIView 565 | - (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)coder SWIFT_UNAVAILABLE; 566 | - (nonnull instancetype)initWithFrame:(CGRect)frame SWIFT_UNAVAILABLE; 567 | @end 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | @interface UIViewController (SWIFT_EXTENSION(LiquidTabBarController)) 587 | @property (nonatomic) IBInspectable BOOL hidesBottomSOBar; 588 | - (void)newViewDidAppear:(BOOL)animated; 589 | @end 590 | 591 | #if __has_attribute(external_source_symbol) 592 | # pragma clang attribute pop 593 | #endif 594 | #pragma clang diagnostic pop 595 | 596 | #endif 597 | -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework/Headers/LiquidTabBarController.h: -------------------------------------------------------------------------------- 1 | // 2 | // LiquidTabBarController.h 3 | // LiquidTabBarController 4 | // 5 | // Created by Jawad Ali on 18/09/2020. 6 | // Copyright © 2020 Jawad Ali. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for LiquidTabBarController. 12 | FOUNDATION_EXPORT double LiquidTabBarControllerVersionNumber; 13 | 14 | //! Project version string for LiquidTabBarController. 15 | FOUNDATION_EXPORT const unsigned char LiquidTabBarControllerVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwd-ali/LiquidTabBarController/0f79221b10a2e33b15f3fbdfdbcd8fb1dbf649b6/Carthage/Build/iOS/LiquidTabBarController.framework/Info.plist -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework/LiquidTabBarController: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwd-ali/LiquidTabBarController/0f79221b10a2e33b15f3fbdfdbcd8fb1dbf649b6/Carthage/Build/iOS/LiquidTabBarController.framework/LiquidTabBarController -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwd-ali/LiquidTabBarController/0f79221b10a2e33b15f3fbdfdbcd8fb1dbf649b6/Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/Project/x86_64.swiftsourceinfo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwd-ali/LiquidTabBarController/0f79221b10a2e33b15f3fbdfdbcd8fb1dbf649b6/Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/Project/x86_64.swiftsourceinfo -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/arm64-apple-ios.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwd-ali/LiquidTabBarController/0f79221b10a2e33b15f3fbdfdbcd8fb1dbf649b6/Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/arm64-apple-ios.swiftdoc -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/arm64-apple-ios.swiftmodule: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwd-ali/LiquidTabBarController/0f79221b10a2e33b15f3fbdfdbcd8fb1dbf649b6/Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/arm64-apple-ios.swiftmodule -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/arm64.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwd-ali/LiquidTabBarController/0f79221b10a2e33b15f3fbdfdbcd8fb1dbf649b6/Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/arm64.swiftdoc -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/arm64.swiftmodule: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwd-ali/LiquidTabBarController/0f79221b10a2e33b15f3fbdfdbcd8fb1dbf649b6/Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/arm64.swiftmodule -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/x86_64-apple-ios-simulator.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwd-ali/LiquidTabBarController/0f79221b10a2e33b15f3fbdfdbcd8fb1dbf649b6/Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/x86_64-apple-ios-simulator.swiftdoc -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/x86_64-apple-ios-simulator.swiftmodule: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwd-ali/LiquidTabBarController/0f79221b10a2e33b15f3fbdfdbcd8fb1dbf649b6/Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/x86_64-apple-ios-simulator.swiftmodule -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/x86_64.swiftdoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwd-ali/LiquidTabBarController/0f79221b10a2e33b15f3fbdfdbcd8fb1dbf649b6/Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/x86_64.swiftdoc -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/x86_64.swiftmodule: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwd-ali/LiquidTabBarController/0f79221b10a2e33b15f3fbdfdbcd8fb1dbf649b6/Carthage/Build/iOS/LiquidTabBarController.framework/Modules/LiquidTabBarController.swiftmodule/x86_64.swiftmodule -------------------------------------------------------------------------------- /Carthage/Build/iOS/LiquidTabBarController.framework/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module LiquidTabBarController { 2 | umbrella header "LiquidTabBarController.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | 8 | module LiquidTabBarController.Swift { 9 | header "LiquidTabBarController-Swift.h" 10 | requires objc 11 | } 12 | -------------------------------------------------------------------------------- /Demo/Application/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Demo 4 | // 5 | // Created by Jawad Ali on 09/09/2020. 6 | // Copyright © 2020 Jawad Ali. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | 15 | 16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 17 | UIViewController.setUpTabBar() 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | // MARK: UISceneSession Lifecycle 23 | 24 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 25 | // Called when a new scene session is being created. 26 | // Use this method to select a configuration to create the new scene with. 27 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 28 | } 29 | 30 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { 31 | // Called when the user discards a scene session. 32 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. 33 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 34 | } 35 | 36 | 37 | } 38 | 39 | -------------------------------------------------------------------------------- /Demo/Application/SceneDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SceneDelegate.swift 3 | // Demo 4 | // 5 | // Created by Jawad Ali on 09/09/2020. 6 | // Copyright © 2020 Jawad Ali. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class SceneDelegate: UIResponder, UIWindowSceneDelegate { 12 | 13 | var window: UIWindow? 14 | 15 | 16 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { 17 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. 18 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. 19 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). 20 | guard let _ = (scene as? UIWindowScene) else { return } 21 | } 22 | 23 | func sceneDidDisconnect(_ scene: UIScene) { 24 | // Called as the scene is being released by the system. 25 | // This occurs shortly after the scene enters the background, or when its session is discarded. 26 | // Release any resources associated with this scene that can be re-created the next time the scene connects. 27 | // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead). 28 | } 29 | 30 | func sceneDidBecomeActive(_ scene: UIScene) { 31 | // Called when the scene has moved from an inactive state to an active state. 32 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. 33 | } 34 | 35 | func sceneWillResignActive(_ scene: UIScene) { 36 | // Called when the scene will move from an active state to an inactive state. 37 | // This may occur due to temporary interruptions (ex. an incoming phone call). 38 | } 39 | 40 | func sceneWillEnterForeground(_ scene: UIScene) { 41 | // Called as the scene transitions from the background to the foreground. 42 | // Use this method to undo the changes made on entering the background. 43 | } 44 | 45 | func sceneDidEnterBackground(_ scene: UIScene) { 46 | // Called as the scene transitions from the foreground to the background. 47 | // Use this method to save data, release shared resources, and store enough scene-specific state information 48 | // to restore the scene back to its current state. 49 | } 50 | 51 | 52 | } 53 | 54 | -------------------------------------------------------------------------------- /Demo/Controllers/AViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AViewController.swift 3 | // SOTabBar_Example 4 | // 5 | // Created by Jawad Ali on 04/09/2020. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class AViewController: UIViewController { 12 | 13 | @IBOutlet var shimmerViews: [ShimmerView]! 14 | 15 | override func viewWillAppear(_ animated: Bool) { 16 | super.viewWillAppear(animated) 17 | 18 | 19 | } 20 | override func viewDidLoad() { 21 | super.viewDidLoad() 22 | shimmerViews.forEach { (shimmer) in 23 | shimmer.layer.cornerRadius = 20 24 | shimmer.gradientLayer?.cornerRadius = 20 25 | shimmer.gradientLayer?.masksToBounds = true 26 | shimmer.layer.shadowOffset = .zero 27 | shimmer.layer.shadowColor = UIColor.black.cgColor 28 | shimmer.layer.shadowOpacity = 0.3 29 | shimmer.layer.shadowRadius = 8 30 | } 31 | // shimmerViews.forEach { (shimmer) in 32 | // //shimmer.backgroundColor = .clear 33 | // shimmer.layer.masksToBounds = true 34 | // 35 | // let i = Double.random(in: 0...1) 36 | // DispatchQueue.main.asyncAfter(deadline: .now() + i) { 37 | // shimmer.startAnimating() 38 | // } 39 | // 40 | // } 41 | } 42 | 43 | override func viewDidLayoutSubviews() { 44 | super.viewDidLayoutSubviews() 45 | 46 | 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Demo/Controllers/BViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BViewController.swift 3 | // SOTabBar_Example 4 | // 5 | // Created by Jawad Ali on 04/09/2020. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class BViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | override func viewWillAppear(_ animated: Bool) { 19 | super.viewWillAppear(animated) 20 | } 21 | 22 | 23 | } 24 | -------------------------------------------------------------------------------- /Demo/Controllers/DetailViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DetailViewController.swift 3 | // Demo 4 | // 5 | // Created by Jawad Ali on 11/09/2020. 6 | // Copyright © 2020 Jawad Ali. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class DetailViewController: UIViewController { 12 | 13 | 14 | } 15 | -------------------------------------------------------------------------------- /Demo/Controllers/HomeViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeViewController.swift 3 | // Demo 4 | // 5 | // Created by Jawad Ali on 10/09/2020. 6 | // Copyright © 2020 Jawad Ali. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import LiquidTabBarController 11 | class HomeViewController: UIViewController { 12 | 13 | @IBOutlet var shimmerViewes: [ShimmerView]! 14 | override func viewDidLoad() { 15 | super.viewDidLoad() 16 | 17 | self.title = "Home" 18 | 19 | shimmerViewes.forEach { (shimmer) in 20 | //shimmer.backgroundColor = .white 21 | 22 | shimmer.layer.shadowOffset = .zero 23 | shimmer.layer.shadowColor = UIColor.black.cgColor 24 | shimmer.layer.shadowOpacity = 0.3 25 | shimmer.layer.shadowRadius = 8 26 | 27 | let i = Double.random(in: 0...1) 28 | DispatchQueue.main.asyncAfter(deadline: .now() + i) { 29 | // shimmer.startAnimating() 30 | } 31 | 32 | } 33 | 34 | 35 | } 36 | 37 | override func viewWillDisappear(_ animated: Bool) { 38 | super.viewWillDisappear(animated) 39 | shimmerViewes.forEach { (shimmer) in 40 | 41 | shimmer.StopAnimation() 42 | 43 | 44 | } 45 | 46 | } 47 | 48 | override func viewWillAppear(_ animated: Bool) { 49 | super.viewWillAppear(animated) 50 | 51 | // jDNavigationController?.jDnavigationBar?.changeColor(#colorLiteral(red: 0.1186391339, green: 0.09400636703, blue: 0.2113042176, alpha: 1)) 52 | } 53 | 54 | 55 | @IBAction func setStyle(_ sender: UIButton) { 56 | // self.jDTabBarController?.tabBar.shapeType = Shape(rawValue: sender.tag) ?? Shape.upperRound 57 | 58 | } 59 | } 60 | 61 | -------------------------------------------------------------------------------- /Demo/Controllers/PinkViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PinkViewController.swift 3 | // SOTabBar_Example 4 | // 5 | // Created by Jawad Ali on 02/09/2020. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class PinkViewController: UIViewController { 12 | 13 | @IBOutlet weak var shimmerView: ShimmerView! 14 | @IBOutlet weak var stackView: UIStackView! 15 | override func viewDidLoad() { 16 | 17 | self.title = "Reports" 18 | 19 | shimmerView.layer.shadowOffset = .zero 20 | shimmerView.layer.shadowColor = UIColor.black.cgColor 21 | shimmerView.layer.shadowOpacity = 0.3 22 | shimmerView.layer.shadowRadius = 8 23 | 24 | shimmerView.startAnimating() 25 | 26 | super.viewDidLoad() 27 | 28 | } 29 | 30 | override func viewDidAppear(_ animated: Bool) { 31 | // shimmerView.startAnimating() 32 | super.viewDidAppear(animated) 33 | } 34 | 35 | 36 | @IBAction func goTo(_ sender: UIButton) { 37 | self.jDTabBarController?.selectedIndex = sender.tag 38 | } 39 | 40 | override func viewWillDisappear(_ animated: Bool) { 41 | super.viewWillDisappear(animated) 42 | shimmerView.StopAnimation() 43 | 44 | } 45 | 46 | } 47 | 48 | @IBDesignable public class ShadowButton: UIButton { 49 | 50 | override init(frame: CGRect) { 51 | super.init(frame: frame) 52 | commonInit() 53 | } 54 | 55 | required init?(coder: NSCoder) { 56 | super.init(coder: coder) 57 | commonInit() 58 | } 59 | 60 | private func commonInit() { 61 | self.addShadow() 62 | } 63 | 64 | public override func layoutSubviews() { 65 | super.layoutSubviews() 66 | self.addShadow() 67 | } 68 | 69 | } 70 | 71 | public extension ShadowButton { 72 | func addShadow() { 73 | layer.cornerRadius = bounds.midY 74 | layer.shadowColor = UIColor.black.cgColor 75 | layer.shadowOpacity = 0.2 76 | layer.shadowRadius = 10 77 | layer.shadowOffset = CGSize(width: 0,height: 5) 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /Demo/Controllers/SearchViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SearchViewController.swift 3 | // Demo 4 | // 5 | // Created by Jawad Ali on 10/09/2020. 6 | // Copyright © 2020 Jawad Ali. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class SearchViewController: UIViewController { 12 | 13 | @IBOutlet var shimmerViews: [ShimmerView]! 14 | override func viewDidLoad() { 15 | self.title = "Search" 16 | 17 | shimmerViews.forEach { (shimmer) in 18 | //shimmer.backgroundColor = .clear 19 | shimmer.layer.shadowOffset = .zero 20 | shimmer.layer.shadowColor = UIColor.black.cgColor 21 | shimmer.layer.shadowOpacity = 0.3 22 | shimmer.layer.shadowRadius = 8 23 | let i = Double.random(in: 0...1) 24 | DispatchQueue.main.asyncAfter(deadline: .now() + i) { 25 | // shimmer.startAnimating() 26 | } 27 | 28 | } 29 | super.viewDidLoad() 30 | 31 | // Do any additional setup after loading the view. 32 | } 33 | override func viewWillAppear(_ animated: Bool) { 34 | super.viewWillAppear(animated) 35 | 36 | // jDNavigationController?.jDnavigationBar?.changeColor(#colorLiteral(red: 0.7254902124, green: 0.4784313738, blue: 0.09803921729, alpha: 1)) 37 | 38 | } 39 | 40 | 41 | override func viewWillDisappear(_ animated: Bool) { 42 | super.viewWillDisappear(animated) 43 | shimmerViews.forEach { (shimmer) in 44 | 45 | shimmer.StopAnimation() 46 | 47 | 48 | } 49 | 50 | } 51 | @IBAction func changeTintColor(_ sender: UIButton) { 52 | jDTabBarController?.tabBar.tabBarTintColor = sender.backgroundColor ?? .white 53 | } 54 | 55 | 56 | } 57 | -------------------------------------------------------------------------------- /Demo/Controllers/ShimmerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ShimmerView.swift 3 | // ShimmerAnimationComplete 4 | // 5 | // Created by Jha, Vasudha on 29/11/19. 6 | // Copyright © 2019 Jha, Vasudha. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ShimmerView: UIView { 12 | 13 | var gradientColorOne : CGColor = #colorLiteral(red: 0.2607625723, green: 0.2311978936, blue: 0.3661505282, alpha: 1)// UIColor(white: 0.85, alpha: 1.0).cgColor 14 | var gradientColorTwo = #colorLiteral(red: 0.1865324974, green: 0.1558980048, blue: 0.3036286235, alpha: 1).cgColor //UIColor(white: 0.95, alpha: 1.0).cgColor 15 | var gradientLayer:CAGradientLayer? 16 | 17 | 18 | func addGradientLayer() -> CAGradientLayer { 19 | 20 | let gradientLayer = CAGradientLayer() 21 | gradientLayer.opacity = 0.4 22 | gradientLayer.frame = self.bounds 23 | gradientLayer.startPoint = CGPoint(x: 0.0, y: 1.0) 24 | gradientLayer.endPoint = CGPoint(x: 1.0, y: 1.0) 25 | gradientLayer.colors = [gradientColorOne, gradientColorTwo, gradientColorOne] 26 | gradientLayer.locations = [0.0, 0.5, 1.0] 27 | self.layer.addSublayer(gradientLayer) 28 | 29 | return gradientLayer 30 | } 31 | 32 | func addAnimation() -> CABasicAnimation { 33 | 34 | let animation = CABasicAnimation(keyPath: "locations") 35 | animation.fromValue = [-1.0, -0.5, 0.0] 36 | animation.toValue = [1.0, 1.5, 2.0] 37 | animation.repeatCount = .infinity 38 | animation.duration = 3 39 | return animation 40 | } 41 | 42 | func startAnimating() { 43 | 44 | let gradientLayer = addGradientLayer() 45 | self.gradientLayer = gradientLayer 46 | let animation = addAnimation() 47 | 48 | gradientLayer.add(animation, forKey: animation.keyPath) 49 | } 50 | 51 | func StopAnimation() { 52 | gradientLayer?.removeAllAnimations() 53 | gradientLayer?.removeFromSuperlayer() 54 | } 55 | 56 | 57 | } 58 | -------------------------------------------------------------------------------- /Demo/Controllers/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Demo 4 | // 5 | // Created by Jawad Ali on 09/09/2020. 6 | // Copyright © 2020 Jawad Ali. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import LiquidTabBarController 11 | class ViewController: LiquidTabBarController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | self.delegate = self 17 | let homeStoryboard = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "HOME_ID") 18 | let chatStoryboard = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CHAT_ID") 19 | let sleepStoryboard = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SLEEP_ID") 20 | let musicStoryboard = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MUSIC_ID") 21 | 22 | 23 | homeStoryboard.tabBarItem = UITabBarItem(title: "Home", image: UIImage(named: "tab1"), tag: 0) 24 | chatStoryboard.tabBarItem = UITabBarItem(title: "Search", image: UIImage(named: "tab2"), tag: 1) 25 | sleepStoryboard.tabBarItem = UITabBarItem(title: "Report", image: UIImage(named: "tab3"), tag: 2) 26 | musicStoryboard.tabBarItem = UITabBarItem(title: "tab4", image: UIImage(named: "tab4"), tag: 3) 27 | 28 | 29 | viewControllers = [homeStoryboard, chatStoryboard,sleepStoryboard,musicStoryboard] 30 | 31 | } 32 | override var preferredStatusBarStyle : UIStatusBarStyle { 33 | return .lightContent 34 | } 35 | } 36 | 37 | extension ViewController: LiquidTabBarControllerDelegate { 38 | func tabBarController(_ tabBarController: LiquidTabBarController, didSelect viewController: UIViewController) { 39 | print(viewController.tabBarItem.title ?? "") 40 | } 41 | } 42 | 43 | -------------------------------------------------------------------------------- /Demo/Navigation/JDNavigationBar.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NavigationController.swift 3 | // JDNavigationBar 4 | // 5 | // Created by Jawad Ali on 26/08/2020. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | 8 | import UIKit 9 | 10 | // Availables Shapes 11 | public enum ShapeMode: Int { 12 | case zigzag = 0 13 | case wave 14 | case folded 15 | case square 16 | } 17 | 18 | public class JDNavigationBar: UINavigationBar { 19 | private let statusBar = UIView() 20 | private var color: UIColor = #colorLiteral(red: 0.1186391339, green: 0.09400636703, blue: 0.2113042176, alpha: 1) 21 | public var cycles: Int = 3 { 22 | didSet { 23 | setNeedsDisplay() 24 | } 25 | } 26 | 27 | public var shape: ShapeMode = .wave { 28 | didSet { 29 | setNeedsDisplay() 30 | } 31 | } 32 | 33 | public var heightShape: CGFloat = 40 { 34 | didSet { 35 | self.heightShape = self.heightShape >= 0 ? self.heightShape : 0 36 | } 37 | } 38 | 39 | private lazy var customHeight = self.bounds.height + self.heightShape 40 | 41 | let shadowLayer = CAShapeLayer() 42 | 43 | public override init(frame: CGRect) { 44 | super.init(frame: frame) 45 | commonInit() 46 | } 47 | 48 | required init?(coder: NSCoder) { 49 | super.init(coder: coder) 50 | commonInit() 51 | } 52 | 53 | 54 | func commonInit() { 55 | 56 | let shadow = NSShadow() 57 | shadow.shadowColor = UIColor.black 58 | shadow.shadowBlurRadius = 4 59 | shadow.shadowOffset = CGSize(width: 0, height: 3) 60 | 61 | self.titleTextAttributes = [.foregroundColor: UIColor.white] 62 | 63 | barStyle = .black 64 | isTranslucent = false 65 | tintColor = .white 66 | backgroundColor = .clear 67 | changeColor(color) 68 | 69 | // DispatchQueue.main.async { 70 | // 71 | // if #available(iOS 13.0, *) { 72 | // 73 | // self.statusBar = UIView(frame: (UIApplication.shared.windows.filter {$0.isKeyWindow}.first?.windowScene?.statusBarManager?.statusBarFrame) ?? CGRect.zero) 74 | // self.statusBar.backgroundColor = self.color 75 | // UIApplication.shared.windows.filter {$0.isKeyWindow}.first?.addSubview(self.statusBar) 76 | // 77 | // } else { 78 | // 79 | // if let getStatusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView { 80 | // self.statusBar = getStatusBar 81 | // if self.statusBar.responds(to: #selector(setter: UIView.backgroundColor)) { 82 | // self.statusBar.backgroundColor = self.color 83 | // } 84 | // } 85 | // } 86 | // } 87 | } 88 | 89 | 90 | public func changeColor(_ color : UIColor){ 91 | self.color = color 92 | shadowLayer.fillColor = self.color.cgColor 93 | // DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { 94 | self.statusBar.backgroundColor = self.color 95 | // } 96 | } 97 | 98 | override public func draw(_ rect: CGRect) { 99 | super.draw(rect) 100 | 101 | switch shape { 102 | case .folded: 103 | shadowLayer.path = self.drawFolded() 104 | case .wave: 105 | shadowLayer.path = self.drawWave() 106 | case .zigzag: 107 | shadowLayer.path = self.drawZigzag() 108 | case .square: 109 | shadowLayer.path = self.drawSquare() 110 | } 111 | 112 | 113 | 114 | if #available(iOS 13.0, *) { 115 | 116 | self.statusBar.frame = (UIApplication.shared.windows.filter {$0.isKeyWindow}.first?.windowScene?.statusBarManager?.statusBarFrame) ?? CGRect.zero 117 | self.statusBar.backgroundColor = self.color 118 | self.statusBar.tag = 999 119 | self.statusBar.removeFromSuperview() 120 | UIApplication.shared.windows.filter {$0.isKeyWindow}.first?.addSubview(self.statusBar) 121 | 122 | } else { 123 | 124 | if let getStatusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView { 125 | self.statusBar.frame = getStatusBar.frame 126 | if self.statusBar.responds(to: #selector(setter: UIView.backgroundColor)) { 127 | self.statusBar.backgroundColor = self.color 128 | } 129 | } 130 | } 131 | 132 | 133 | 134 | self.layer.shadowColor = UIColor.black.cgColor 135 | self.layer.shadowOpacity = 0.23 136 | self.layer.shadowRadius = 10 137 | self.layer.shadowOffset = CGSize(width: 0, height: 10) 138 | self.layer.shouldRasterize = true 139 | 140 | 141 | layer.insertSublayer(shadowLayer, below: self.topItem?.titleView?.layer) 142 | } 143 | 144 | } 145 | 146 | //MARK:- Paths 147 | extension JDNavigationBar { 148 | 149 | /* 150 | Add a Zigzag shape to the navigation bar 151 | */ 152 | func drawZigzag()-> CGPath { 153 | 154 | let width = self.layer.frame.width 155 | let height = self.layer.frame.height 156 | 157 | let bezierPath: UIBezierPath = UIBezierPath() 158 | bezierPath.move(to: CGPoint(x: 0, y: 0)) 159 | bezierPath.addLine(to: CGPoint(x: 0, y: height)) 160 | 161 | let cycleSizeHalf: CGFloat = (width / CGFloat(self.cycles)) / 2 162 | var x: CGFloat = 0 163 | for _ in 1...(self.cycles * 2) { 164 | x = x + cycleSizeHalf 165 | bezierPath.addLine(to: CGPoint(x: x, y: height + CGFloat(self.heightShape))) 166 | x = x + cycleSizeHalf 167 | bezierPath.addLine(to: CGPoint(x: x, y: height)) 168 | } 169 | bezierPath.addLine(to: CGPoint(x: width, y: 0)) 170 | bezierPath.close() 171 | return bezierPath.cgPath 172 | } 173 | 174 | 175 | 176 | func drawFolded()-> CGPath { 177 | let bezierPath: UIBezierPath = UIBezierPath() 178 | let frame = CGRect(x: 0, y: 0, width: bounds.maxX, height: bounds.maxY + heightShape/2) 179 | 180 | bezierPath.append(UIBezierPath(roundedRect: frame, byRoundingCorners: [.bottomLeft ,.bottomRight], cornerRadii: CGSize(width: heightShape, height: heightShape))) 181 | heightShape /= 2 182 | return bezierPath.cgPath 183 | } 184 | 185 | /* 186 | Add a Wave shape to the navigation bar 187 | */ 188 | 189 | func drawWave()-> CGPath { 190 | let width = self.layer.frame.width 191 | let height = self.layer.frame.height 192 | let bezierPath: UIBezierPath = UIBezierPath() 193 | // Mandatory Odd number 194 | if self.cycles % 2 == 0 { 195 | self.cycles += 1 196 | } 197 | 198 | bezierPath.move(to: CGPoint(x: 0, y: 0)) 199 | bezierPath.addLine(to: CGPoint(x: 0, y: height)) 200 | 201 | let cycleSize = width / CGFloat(self.cycles) 202 | var x: CGFloat = 0 203 | let arcHeight = CGFloat(self.heightShape) / 2 204 | let y: CGFloat = height + arcHeight 205 | 206 | for i in 0.. CGPath { 227 | let width = self.layer.frame.width 228 | let height = self.layer.frame.height 229 | let bezierPath: UIBezierPath = UIBezierPath() 230 | bezierPath.move(to: CGPoint(x: 0, y: 0)) 231 | bezierPath.addLine(to: CGPoint(x: 0, y: height)) 232 | 233 | let cycleSize: CGFloat = width / CGFloat(self.cycles * 2) 234 | let xOffset = cycleSize / 2 235 | var x = xOffset 236 | 237 | bezierPath.addLine(to: CGPoint(x: xOffset, y: height)) 238 | 239 | for i in 0.. 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIApplicationSceneManifest 24 | 25 | UIApplicationSupportsMultipleScenes 26 | 27 | UISceneConfigurations 28 | 29 | UIWindowSceneSessionRoleApplication 30 | 31 | 32 | UISceneConfigurationName 33 | Default Configuration 34 | UISceneDelegateClassName 35 | $(PRODUCT_MODULE_NAME).SceneDelegate 36 | UISceneStoryboardFile 37 | Main 38 | 39 | 40 | 41 | 42 | UILaunchStoryboardName 43 | LaunchScreen 44 | UIMainStoryboardFile 45 | Main 46 | UIRequiredDeviceCapabilities 47 | 48 | armv7 49 | 50 | UISupportedInterfaceOrientations 51 | 52 | UIInterfaceOrientationPortrait 53 | UIInterfaceOrientationLandscapeLeft 54 | UIInterfaceOrientationLandscapeRight 55 | 56 | UISupportedInterfaceOrientations~ipad 57 | 58 | UIInterfaceOrientationPortrait 59 | UIInterfaceOrientationPortraitUpsideDown 60 | UIInterfaceOrientationLandscapeLeft 61 | UIInterfaceOrientationLandscapeRight 62 | 63 | UIViewControllerBasedStatusBarAppearance 64 | 65 | UIUserInterfaceStyle 66 | Light 67 | 68 | 69 | -------------------------------------------------------------------------------- /Demo/Storyboard/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Images/ezgif.com-video-to-gif-32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jwd-ali/LiquidTabBarController/0f79221b10a2e33b15f3fbdfdbcd8fb1dbf649b6/Images/ezgif.com-video-to-gif-32.gif -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Jawad Ali 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /LiquidTabBarController.podspec: -------------------------------------------------------------------------------- 1 | 2 | Pod::Spec.new do |s| 3 | s.name = "LiquidTabBarController" 4 | s.version = "1.0.0" 5 | s.summary = "LiquidTabBarController framework" 6 | s.description = <<-DESC 7 | You can add elegant LiquidTabBarController animation in your view with just 2 line of code 8 | DESC 9 | s.homepage = "https://github.com/jwd-ali/IOS-Portfolio" 10 | s.license = "MIT" 11 | # s.license = { :type => "MIT", :file => "FILE_LICENSE" } 12 | s.authors = { "Jawad Ali" => "L060214@gmail.com" } 13 | s.platforms = { :ios => "11.0" } 14 | s.source = { :git => "https://github.com/jwd-ali/LiquidTabBarController.git", :tag => "#{s.version}" } 15 | 16 | s.source_files = "Sources/**/*.{h,m,swift}" 17 | s.requires_arc = true 18 | s.swift_version = "5.0" 19 | 20 | end 21 | -------------------------------------------------------------------------------- /LiquidTabBarController.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | E3E845C525149E82007B66E7 /* LiquidTabBarController.h in Headers */ = {isa = PBXBuildFile; fileRef = E3E845C325149E82007B66E7 /* LiquidTabBarController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | E3E845E025149EB4007B66E7 /* UIViewController+Extesion.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E845CF25149EB4007B66E7 /* UIViewController+Extesion.swift */; }; 12 | E3E845E125149EB4007B66E7 /* CALayer+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E845D025149EB4007B66E7 /* CALayer+Extension.swift */; }; 13 | E3E845E225149EB4007B66E7 /* YAPLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E845D225149EB4007B66E7 /* YAPLayout.swift */; }; 14 | E3E845E325149EB4007B66E7 /* YAPLayoutAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E845D325149EB4007B66E7 /* YAPLayoutAttributes.swift */; }; 15 | E3E845E425149EB4007B66E7 /* UILabelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E845D525149EB4007B66E7 /* UILabelFactory.swift */; }; 16 | E3E845E525149EB4007B66E7 /* UIImageViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E845D625149EB4007B66E7 /* UIImageViewFactory.swift */; }; 17 | E3E845E625149EB4007B66E7 /* UIStackViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E845D725149EB4007B66E7 /* UIStackViewFactory.swift */; }; 18 | E3E845E725149EB4007B66E7 /* LiquidTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E845D925149EB4007B66E7 /* LiquidTabBarController.swift */; }; 19 | E3E845E825149EB4007B66E7 /* LiquiTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E845DA25149EB4007B66E7 /* LiquiTabBar.swift */; }; 20 | E3E845E925149EB4007B66E7 /* LiquidTabBarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E845DB25149EB4007B66E7 /* LiquidTabBarItem.swift */; }; 21 | E3E845EA25149EB4007B66E7 /* Shape.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E845DC25149EB4007B66E7 /* Shape.swift */; }; 22 | E3E845EB25149EB4007B66E7 /* JDTabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E845DD25149EB4007B66E7 /* JDTabBar.swift */; }; 23 | E3E8461C2514A30C007B66E7 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E846062514A30C007B66E7 /* AppDelegate.swift */; }; 24 | E3E8461D2514A30C007B66E7 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E846072514A30C007B66E7 /* SceneDelegate.swift */; }; 25 | E3E8461E2514A30C007B66E7 /* JDNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E846092514A30C007B66E7 /* JDNavigationController.swift */; }; 26 | E3E8461F2514A30C007B66E7 /* JDNavigationBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E8460A2514A30C007B66E7 /* JDNavigationBar.swift */; }; 27 | E3E846202514A30C007B66E7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E3E8460C2514A30C007B66E7 /* Assets.xcassets */; }; 28 | E3E846222514A30C007B66E7 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E3E8460F2514A30C007B66E7 /* LaunchScreen.storyboard */; }; 29 | E3E846232514A30C007B66E7 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E3E846112514A30C007B66E7 /* Main.storyboard */; }; 30 | E3E846242514A30C007B66E7 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E846142514A30C007B66E7 /* ViewController.swift */; }; 31 | E3E846252514A30C007B66E7 /* SearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E846152514A30C007B66E7 /* SearchViewController.swift */; }; 32 | E3E846262514A30C007B66E7 /* PinkViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E846162514A30C007B66E7 /* PinkViewController.swift */; }; 33 | E3E846272514A30C007B66E7 /* ShimmerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E846172514A30C007B66E7 /* ShimmerView.swift */; }; 34 | E3E846282514A30C007B66E7 /* DetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E846182514A30C007B66E7 /* DetailViewController.swift */; }; 35 | E3E846292514A30C007B66E7 /* HomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E846192514A30C007B66E7 /* HomeViewController.swift */; }; 36 | E3E8462A2514A30C007B66E7 /* BViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E8461A2514A30C007B66E7 /* BViewController.swift */; }; 37 | E3E8462B2514A30C007B66E7 /* AViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E8461B2514A30C007B66E7 /* AViewController.swift */; }; 38 | /* End PBXBuildFile section */ 39 | 40 | /* Begin PBXFileReference section */ 41 | E3E845C025149E82007B66E7 /* LiquidTabBarController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LiquidTabBarController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | E3E845C325149E82007B66E7 /* LiquidTabBarController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LiquidTabBarController.h; sourceTree = ""; }; 43 | E3E845CF25149EB4007B66E7 /* UIViewController+Extesion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewController+Extesion.swift"; sourceTree = ""; }; 44 | E3E845D025149EB4007B66E7 /* CALayer+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CALayer+Extension.swift"; sourceTree = ""; }; 45 | E3E845D225149EB4007B66E7 /* YAPLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YAPLayout.swift; sourceTree = ""; }; 46 | E3E845D325149EB4007B66E7 /* YAPLayoutAttributes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YAPLayoutAttributes.swift; sourceTree = ""; }; 47 | E3E845D525149EB4007B66E7 /* UILabelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UILabelFactory.swift; sourceTree = ""; }; 48 | E3E845D625149EB4007B66E7 /* UIImageViewFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIImageViewFactory.swift; sourceTree = ""; }; 49 | E3E845D725149EB4007B66E7 /* UIStackViewFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIStackViewFactory.swift; sourceTree = ""; }; 50 | E3E845D925149EB4007B66E7 /* LiquidTabBarController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidTabBarController.swift; sourceTree = ""; }; 51 | E3E845DA25149EB4007B66E7 /* LiquiTabBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquiTabBar.swift; sourceTree = ""; }; 52 | E3E845DB25149EB4007B66E7 /* LiquidTabBarItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidTabBarItem.swift; sourceTree = ""; }; 53 | E3E845DC25149EB4007B66E7 /* Shape.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Shape.swift; sourceTree = ""; }; 54 | E3E845DD25149EB4007B66E7 /* JDTabBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JDTabBar.swift; sourceTree = ""; }; 55 | E3E845DE25149EB4007B66E7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56 | E3E845F12514A05A007B66E7 /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 57 | E3E846062514A30C007B66E7 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 58 | E3E846072514A30C007B66E7 /* SceneDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 59 | E3E846092514A30C007B66E7 /* JDNavigationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JDNavigationController.swift; sourceTree = ""; }; 60 | E3E8460A2514A30C007B66E7 /* JDNavigationBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JDNavigationBar.swift; sourceTree = ""; }; 61 | E3E8460C2514A30C007B66E7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 62 | E3E8460D2514A30C007B66E7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 63 | E3E846102514A30C007B66E7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 64 | E3E846122514A30C007B66E7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 65 | E3E846142514A30C007B66E7 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 66 | E3E846152514A30C007B66E7 /* SearchViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchViewController.swift; sourceTree = ""; }; 67 | E3E846162514A30C007B66E7 /* PinkViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PinkViewController.swift; sourceTree = ""; }; 68 | E3E846172514A30C007B66E7 /* ShimmerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShimmerView.swift; sourceTree = ""; }; 69 | E3E846182514A30C007B66E7 /* DetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailViewController.swift; sourceTree = ""; }; 70 | E3E846192514A30C007B66E7 /* HomeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; 71 | E3E8461A2514A30C007B66E7 /* BViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BViewController.swift; sourceTree = ""; }; 72 | E3E8461B2514A30C007B66E7 /* AViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AViewController.swift; sourceTree = ""; }; 73 | /* End PBXFileReference section */ 74 | 75 | /* Begin PBXFrameworksBuildPhase section */ 76 | E3E845BD25149E82007B66E7 /* Frameworks */ = { 77 | isa = PBXFrameworksBuildPhase; 78 | buildActionMask = 2147483647; 79 | files = ( 80 | ); 81 | runOnlyForDeploymentPostprocessing = 0; 82 | }; 83 | E3E845EE2514A059007B66E7 /* Frameworks */ = { 84 | isa = PBXFrameworksBuildPhase; 85 | buildActionMask = 2147483647; 86 | files = ( 87 | ); 88 | runOnlyForDeploymentPostprocessing = 0; 89 | }; 90 | /* End PBXFrameworksBuildPhase section */ 91 | 92 | /* Begin PBXGroup section */ 93 | E3E845B625149E82007B66E7 = { 94 | isa = PBXGroup; 95 | children = ( 96 | E3E845CB25149EB4007B66E7 /* Sources */, 97 | E3E845F22514A05A007B66E7 /* Demo */, 98 | E3E845C125149E82007B66E7 /* Products */, 99 | ); 100 | sourceTree = ""; 101 | }; 102 | E3E845C125149E82007B66E7 /* Products */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | E3E845C025149E82007B66E7 /* LiquidTabBarController.framework */, 106 | E3E845F12514A05A007B66E7 /* Demo.app */, 107 | ); 108 | name = Products; 109 | sourceTree = ""; 110 | }; 111 | E3E845CB25149EB4007B66E7 /* Sources */ = { 112 | isa = PBXGroup; 113 | children = ( 114 | E3E845CC25149EB4007B66E7 /* LiquidTabBarController */, 115 | ); 116 | path = Sources; 117 | sourceTree = ""; 118 | }; 119 | E3E845CC25149EB4007B66E7 /* LiquidTabBarController */ = { 120 | isa = PBXGroup; 121 | children = ( 122 | E3E845C325149E82007B66E7 /* LiquidTabBarController.h */, 123 | E3E845CE25149EB4007B66E7 /* Extensions */, 124 | E3E845D125149EB4007B66E7 /* JDLayout */, 125 | E3E845D425149EB4007B66E7 /* Factories */, 126 | E3E845D825149EB4007B66E7 /* LiquidTabBar */, 127 | E3E845DE25149EB4007B66E7 /* Info.plist */, 128 | ); 129 | path = LiquidTabBarController; 130 | sourceTree = ""; 131 | }; 132 | E3E845CE25149EB4007B66E7 /* Extensions */ = { 133 | isa = PBXGroup; 134 | children = ( 135 | E3E845CF25149EB4007B66E7 /* UIViewController+Extesion.swift */, 136 | E3E845D025149EB4007B66E7 /* CALayer+Extension.swift */, 137 | ); 138 | path = Extensions; 139 | sourceTree = ""; 140 | }; 141 | E3E845D125149EB4007B66E7 /* JDLayout */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | E3E845D225149EB4007B66E7 /* YAPLayout.swift */, 145 | E3E845D325149EB4007B66E7 /* YAPLayoutAttributes.swift */, 146 | ); 147 | path = JDLayout; 148 | sourceTree = ""; 149 | }; 150 | E3E845D425149EB4007B66E7 /* Factories */ = { 151 | isa = PBXGroup; 152 | children = ( 153 | E3E845D525149EB4007B66E7 /* UILabelFactory.swift */, 154 | E3E845D625149EB4007B66E7 /* UIImageViewFactory.swift */, 155 | E3E845D725149EB4007B66E7 /* UIStackViewFactory.swift */, 156 | ); 157 | path = Factories; 158 | sourceTree = ""; 159 | }; 160 | E3E845D825149EB4007B66E7 /* LiquidTabBar */ = { 161 | isa = PBXGroup; 162 | children = ( 163 | E3E845D925149EB4007B66E7 /* LiquidTabBarController.swift */, 164 | E3E845DA25149EB4007B66E7 /* LiquiTabBar.swift */, 165 | E3E845DB25149EB4007B66E7 /* LiquidTabBarItem.swift */, 166 | E3E845DC25149EB4007B66E7 /* Shape.swift */, 167 | E3E845DD25149EB4007B66E7 /* JDTabBar.swift */, 168 | ); 169 | path = LiquidTabBar; 170 | sourceTree = ""; 171 | }; 172 | E3E845F22514A05A007B66E7 /* Demo */ = { 173 | isa = PBXGroup; 174 | children = ( 175 | E3E846052514A30C007B66E7 /* Application */, 176 | E3E846132514A30C007B66E7 /* Controllers */, 177 | E3E846082514A30C007B66E7 /* Navigation */, 178 | E3E8460B2514A30C007B66E7 /* Resources */, 179 | E3E8460E2514A30C007B66E7 /* Storyboard */, 180 | ); 181 | path = Demo; 182 | sourceTree = ""; 183 | }; 184 | E3E846052514A30C007B66E7 /* Application */ = { 185 | isa = PBXGroup; 186 | children = ( 187 | E3E846062514A30C007B66E7 /* AppDelegate.swift */, 188 | E3E846072514A30C007B66E7 /* SceneDelegate.swift */, 189 | ); 190 | path = Application; 191 | sourceTree = ""; 192 | }; 193 | E3E846082514A30C007B66E7 /* Navigation */ = { 194 | isa = PBXGroup; 195 | children = ( 196 | E3E846092514A30C007B66E7 /* JDNavigationController.swift */, 197 | E3E8460A2514A30C007B66E7 /* JDNavigationBar.swift */, 198 | ); 199 | path = Navigation; 200 | sourceTree = ""; 201 | }; 202 | E3E8460B2514A30C007B66E7 /* Resources */ = { 203 | isa = PBXGroup; 204 | children = ( 205 | E3E8460C2514A30C007B66E7 /* Assets.xcassets */, 206 | E3E8460D2514A30C007B66E7 /* Info.plist */, 207 | ); 208 | path = Resources; 209 | sourceTree = ""; 210 | }; 211 | E3E8460E2514A30C007B66E7 /* Storyboard */ = { 212 | isa = PBXGroup; 213 | children = ( 214 | E3E8460F2514A30C007B66E7 /* LaunchScreen.storyboard */, 215 | E3E846112514A30C007B66E7 /* Main.storyboard */, 216 | ); 217 | path = Storyboard; 218 | sourceTree = ""; 219 | }; 220 | E3E846132514A30C007B66E7 /* Controllers */ = { 221 | isa = PBXGroup; 222 | children = ( 223 | E3E846142514A30C007B66E7 /* ViewController.swift */, 224 | E3E846152514A30C007B66E7 /* SearchViewController.swift */, 225 | E3E846162514A30C007B66E7 /* PinkViewController.swift */, 226 | E3E846172514A30C007B66E7 /* ShimmerView.swift */, 227 | E3E846182514A30C007B66E7 /* DetailViewController.swift */, 228 | E3E846192514A30C007B66E7 /* HomeViewController.swift */, 229 | E3E8461A2514A30C007B66E7 /* BViewController.swift */, 230 | E3E8461B2514A30C007B66E7 /* AViewController.swift */, 231 | ); 232 | path = Controllers; 233 | sourceTree = ""; 234 | }; 235 | /* End PBXGroup section */ 236 | 237 | /* Begin PBXHeadersBuildPhase section */ 238 | E3E845BB25149E82007B66E7 /* Headers */ = { 239 | isa = PBXHeadersBuildPhase; 240 | buildActionMask = 2147483647; 241 | files = ( 242 | E3E845C525149E82007B66E7 /* LiquidTabBarController.h in Headers */, 243 | ); 244 | runOnlyForDeploymentPostprocessing = 0; 245 | }; 246 | /* End PBXHeadersBuildPhase section */ 247 | 248 | /* Begin PBXNativeTarget section */ 249 | E3E845BF25149E82007B66E7 /* LiquidTabBarController */ = { 250 | isa = PBXNativeTarget; 251 | buildConfigurationList = E3E845C825149E82007B66E7 /* Build configuration list for PBXNativeTarget "LiquidTabBarController" */; 252 | buildPhases = ( 253 | E3E845BB25149E82007B66E7 /* Headers */, 254 | E3E845BC25149E82007B66E7 /* Sources */, 255 | E3E845BD25149E82007B66E7 /* Frameworks */, 256 | E3E845BE25149E82007B66E7 /* Resources */, 257 | ); 258 | buildRules = ( 259 | ); 260 | dependencies = ( 261 | ); 262 | name = LiquidTabBarController; 263 | productName = LiquidTabBarController; 264 | productReference = E3E845C025149E82007B66E7 /* LiquidTabBarController.framework */; 265 | productType = "com.apple.product-type.framework"; 266 | }; 267 | E3E845F02514A059007B66E7 /* Demo */ = { 268 | isa = PBXNativeTarget; 269 | buildConfigurationList = E3E846022514A05D007B66E7 /* Build configuration list for PBXNativeTarget "Demo" */; 270 | buildPhases = ( 271 | E3E845ED2514A059007B66E7 /* Sources */, 272 | E3E845EE2514A059007B66E7 /* Frameworks */, 273 | E3E845EF2514A059007B66E7 /* Resources */, 274 | ); 275 | buildRules = ( 276 | ); 277 | dependencies = ( 278 | ); 279 | name = Demo; 280 | productName = Demo; 281 | productReference = E3E845F12514A05A007B66E7 /* Demo.app */; 282 | productType = "com.apple.product-type.application"; 283 | }; 284 | /* End PBXNativeTarget section */ 285 | 286 | /* Begin PBXProject section */ 287 | E3E845B725149E82007B66E7 /* Project object */ = { 288 | isa = PBXProject; 289 | attributes = { 290 | LastSwiftUpdateCheck = 1140; 291 | LastUpgradeCheck = 1140; 292 | ORGANIZATIONNAME = "Jawad Ali"; 293 | TargetAttributes = { 294 | E3E845BF25149E82007B66E7 = { 295 | CreatedOnToolsVersion = 11.4.1; 296 | }; 297 | E3E845F02514A059007B66E7 = { 298 | CreatedOnToolsVersion = 11.4.1; 299 | }; 300 | }; 301 | }; 302 | buildConfigurationList = E3E845BA25149E82007B66E7 /* Build configuration list for PBXProject "LiquidTabBarController" */; 303 | compatibilityVersion = "Xcode 9.3"; 304 | developmentRegion = en; 305 | hasScannedForEncodings = 0; 306 | knownRegions = ( 307 | en, 308 | Base, 309 | ); 310 | mainGroup = E3E845B625149E82007B66E7; 311 | productRefGroup = E3E845C125149E82007B66E7 /* Products */; 312 | projectDirPath = ""; 313 | projectRoot = ""; 314 | targets = ( 315 | E3E845BF25149E82007B66E7 /* LiquidTabBarController */, 316 | E3E845F02514A059007B66E7 /* Demo */, 317 | ); 318 | }; 319 | /* End PBXProject section */ 320 | 321 | /* Begin PBXResourcesBuildPhase section */ 322 | E3E845BE25149E82007B66E7 /* Resources */ = { 323 | isa = PBXResourcesBuildPhase; 324 | buildActionMask = 2147483647; 325 | files = ( 326 | ); 327 | runOnlyForDeploymentPostprocessing = 0; 328 | }; 329 | E3E845EF2514A059007B66E7 /* Resources */ = { 330 | isa = PBXResourcesBuildPhase; 331 | buildActionMask = 2147483647; 332 | files = ( 333 | E3E846222514A30C007B66E7 /* LaunchScreen.storyboard in Resources */, 334 | E3E846202514A30C007B66E7 /* Assets.xcassets in Resources */, 335 | E3E846232514A30C007B66E7 /* Main.storyboard in Resources */, 336 | ); 337 | runOnlyForDeploymentPostprocessing = 0; 338 | }; 339 | /* End PBXResourcesBuildPhase section */ 340 | 341 | /* Begin PBXSourcesBuildPhase section */ 342 | E3E845BC25149E82007B66E7 /* Sources */ = { 343 | isa = PBXSourcesBuildPhase; 344 | buildActionMask = 2147483647; 345 | files = ( 346 | E3E845E225149EB4007B66E7 /* YAPLayout.swift in Sources */, 347 | E3E845E725149EB4007B66E7 /* LiquidTabBarController.swift in Sources */, 348 | E3E845E625149EB4007B66E7 /* UIStackViewFactory.swift in Sources */, 349 | E3E845EB25149EB4007B66E7 /* JDTabBar.swift in Sources */, 350 | E3E845E025149EB4007B66E7 /* UIViewController+Extesion.swift in Sources */, 351 | E3E845E125149EB4007B66E7 /* CALayer+Extension.swift in Sources */, 352 | E3E845E825149EB4007B66E7 /* LiquiTabBar.swift in Sources */, 353 | E3E845EA25149EB4007B66E7 /* Shape.swift in Sources */, 354 | E3E845E925149EB4007B66E7 /* LiquidTabBarItem.swift in Sources */, 355 | E3E845E425149EB4007B66E7 /* UILabelFactory.swift in Sources */, 356 | E3E845E325149EB4007B66E7 /* YAPLayoutAttributes.swift in Sources */, 357 | E3E845E525149EB4007B66E7 /* UIImageViewFactory.swift in Sources */, 358 | ); 359 | runOnlyForDeploymentPostprocessing = 0; 360 | }; 361 | E3E845ED2514A059007B66E7 /* Sources */ = { 362 | isa = PBXSourcesBuildPhase; 363 | buildActionMask = 2147483647; 364 | files = ( 365 | E3E846282514A30C007B66E7 /* DetailViewController.swift in Sources */, 366 | E3E846252514A30C007B66E7 /* SearchViewController.swift in Sources */, 367 | E3E846242514A30C007B66E7 /* ViewController.swift in Sources */, 368 | E3E8461C2514A30C007B66E7 /* AppDelegate.swift in Sources */, 369 | E3E8462B2514A30C007B66E7 /* AViewController.swift in Sources */, 370 | E3E8461E2514A30C007B66E7 /* JDNavigationController.swift in Sources */, 371 | E3E846292514A30C007B66E7 /* HomeViewController.swift in Sources */, 372 | E3E846272514A30C007B66E7 /* ShimmerView.swift in Sources */, 373 | E3E8462A2514A30C007B66E7 /* BViewController.swift in Sources */, 374 | E3E846262514A30C007B66E7 /* PinkViewController.swift in Sources */, 375 | E3E8461D2514A30C007B66E7 /* SceneDelegate.swift in Sources */, 376 | E3E8461F2514A30C007B66E7 /* JDNavigationBar.swift in Sources */, 377 | ); 378 | runOnlyForDeploymentPostprocessing = 0; 379 | }; 380 | /* End PBXSourcesBuildPhase section */ 381 | 382 | /* Begin PBXVariantGroup section */ 383 | E3E8460F2514A30C007B66E7 /* LaunchScreen.storyboard */ = { 384 | isa = PBXVariantGroup; 385 | children = ( 386 | E3E846102514A30C007B66E7 /* Base */, 387 | ); 388 | name = LaunchScreen.storyboard; 389 | sourceTree = ""; 390 | }; 391 | E3E846112514A30C007B66E7 /* Main.storyboard */ = { 392 | isa = PBXVariantGroup; 393 | children = ( 394 | E3E846122514A30C007B66E7 /* Base */, 395 | ); 396 | name = Main.storyboard; 397 | sourceTree = ""; 398 | }; 399 | /* End PBXVariantGroup section */ 400 | 401 | /* Begin XCBuildConfiguration section */ 402 | E3E845C625149E82007B66E7 /* Debug */ = { 403 | isa = XCBuildConfiguration; 404 | buildSettings = { 405 | ALWAYS_SEARCH_USER_PATHS = NO; 406 | CLANG_ANALYZER_NONNULL = YES; 407 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 408 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 409 | CLANG_CXX_LIBRARY = "libc++"; 410 | CLANG_ENABLE_MODULES = YES; 411 | CLANG_ENABLE_OBJC_ARC = YES; 412 | CLANG_ENABLE_OBJC_WEAK = YES; 413 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 414 | CLANG_WARN_BOOL_CONVERSION = YES; 415 | CLANG_WARN_COMMA = YES; 416 | CLANG_WARN_CONSTANT_CONVERSION = YES; 417 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 418 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 419 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 420 | CLANG_WARN_EMPTY_BODY = YES; 421 | CLANG_WARN_ENUM_CONVERSION = YES; 422 | CLANG_WARN_INFINITE_RECURSION = YES; 423 | CLANG_WARN_INT_CONVERSION = YES; 424 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 425 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 426 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 427 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 428 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 429 | CLANG_WARN_STRICT_PROTOTYPES = YES; 430 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 431 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 432 | CLANG_WARN_UNREACHABLE_CODE = YES; 433 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 434 | COPY_PHASE_STRIP = NO; 435 | CURRENT_PROJECT_VERSION = 1; 436 | DEBUG_INFORMATION_FORMAT = dwarf; 437 | ENABLE_STRICT_OBJC_MSGSEND = YES; 438 | ENABLE_TESTABILITY = YES; 439 | GCC_C_LANGUAGE_STANDARD = gnu11; 440 | GCC_DYNAMIC_NO_PIC = NO; 441 | GCC_NO_COMMON_BLOCKS = YES; 442 | GCC_OPTIMIZATION_LEVEL = 0; 443 | GCC_PREPROCESSOR_DEFINITIONS = ( 444 | "DEBUG=1", 445 | "$(inherited)", 446 | ); 447 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 448 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 449 | GCC_WARN_UNDECLARED_SELECTOR = YES; 450 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 451 | GCC_WARN_UNUSED_FUNCTION = YES; 452 | GCC_WARN_UNUSED_VARIABLE = YES; 453 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 454 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 455 | MTL_FAST_MATH = YES; 456 | ONLY_ACTIVE_ARCH = YES; 457 | SDKROOT = iphoneos; 458 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 459 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 460 | VERSIONING_SYSTEM = "apple-generic"; 461 | VERSION_INFO_PREFIX = ""; 462 | }; 463 | name = Debug; 464 | }; 465 | E3E845C725149E82007B66E7 /* Release */ = { 466 | isa = XCBuildConfiguration; 467 | buildSettings = { 468 | ALWAYS_SEARCH_USER_PATHS = NO; 469 | CLANG_ANALYZER_NONNULL = YES; 470 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 471 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 472 | CLANG_CXX_LIBRARY = "libc++"; 473 | CLANG_ENABLE_MODULES = YES; 474 | CLANG_ENABLE_OBJC_ARC = YES; 475 | CLANG_ENABLE_OBJC_WEAK = YES; 476 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 477 | CLANG_WARN_BOOL_CONVERSION = YES; 478 | CLANG_WARN_COMMA = YES; 479 | CLANG_WARN_CONSTANT_CONVERSION = YES; 480 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 481 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 482 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 483 | CLANG_WARN_EMPTY_BODY = YES; 484 | CLANG_WARN_ENUM_CONVERSION = YES; 485 | CLANG_WARN_INFINITE_RECURSION = YES; 486 | CLANG_WARN_INT_CONVERSION = YES; 487 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 488 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 489 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 490 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 491 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 492 | CLANG_WARN_STRICT_PROTOTYPES = YES; 493 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 494 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 495 | CLANG_WARN_UNREACHABLE_CODE = YES; 496 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 497 | COPY_PHASE_STRIP = NO; 498 | CURRENT_PROJECT_VERSION = 1; 499 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 500 | ENABLE_NS_ASSERTIONS = NO; 501 | ENABLE_STRICT_OBJC_MSGSEND = YES; 502 | GCC_C_LANGUAGE_STANDARD = gnu11; 503 | GCC_NO_COMMON_BLOCKS = YES; 504 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 505 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 506 | GCC_WARN_UNDECLARED_SELECTOR = YES; 507 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 508 | GCC_WARN_UNUSED_FUNCTION = YES; 509 | GCC_WARN_UNUSED_VARIABLE = YES; 510 | IPHONEOS_DEPLOYMENT_TARGET = 13.4; 511 | MTL_ENABLE_DEBUG_INFO = NO; 512 | MTL_FAST_MATH = YES; 513 | SDKROOT = iphoneos; 514 | SWIFT_COMPILATION_MODE = wholemodule; 515 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 516 | VALIDATE_PRODUCT = YES; 517 | VERSIONING_SYSTEM = "apple-generic"; 518 | VERSION_INFO_PREFIX = ""; 519 | }; 520 | name = Release; 521 | }; 522 | E3E845C925149E82007B66E7 /* Debug */ = { 523 | isa = XCBuildConfiguration; 524 | buildSettings = { 525 | CODE_SIGN_STYLE = Automatic; 526 | DEFINES_MODULE = YES; 527 | DEVELOPMENT_TEAM = 7VBQS7JDYT; 528 | DYLIB_COMPATIBILITY_VERSION = 1; 529 | DYLIB_CURRENT_VERSION = 1; 530 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 531 | INFOPLIST_FILE = Sources/LiquidTabBarController/Info.plist; 532 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 533 | LD_RUNPATH_SEARCH_PATHS = ( 534 | "$(inherited)", 535 | "@executable_path/Frameworks", 536 | "@loader_path/Frameworks", 537 | ); 538 | PRODUCT_BUNDLE_IDENTIFIER = XeroT.LiquidTabBarController; 539 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 540 | SKIP_INSTALL = YES; 541 | SWIFT_VERSION = 5.0; 542 | TARGETED_DEVICE_FAMILY = "1,2"; 543 | }; 544 | name = Debug; 545 | }; 546 | E3E845CA25149E82007B66E7 /* Release */ = { 547 | isa = XCBuildConfiguration; 548 | buildSettings = { 549 | CODE_SIGN_STYLE = Automatic; 550 | DEFINES_MODULE = YES; 551 | DEVELOPMENT_TEAM = 7VBQS7JDYT; 552 | DYLIB_COMPATIBILITY_VERSION = 1; 553 | DYLIB_CURRENT_VERSION = 1; 554 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 555 | INFOPLIST_FILE = Sources/LiquidTabBarController/Info.plist; 556 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 557 | LD_RUNPATH_SEARCH_PATHS = ( 558 | "$(inherited)", 559 | "@executable_path/Frameworks", 560 | "@loader_path/Frameworks", 561 | ); 562 | PRODUCT_BUNDLE_IDENTIFIER = XeroT.LiquidTabBarController; 563 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 564 | SKIP_INSTALL = YES; 565 | SWIFT_VERSION = 5.0; 566 | TARGETED_DEVICE_FAMILY = "1,2"; 567 | }; 568 | name = Release; 569 | }; 570 | E3E846032514A05D007B66E7 /* Debug */ = { 571 | isa = XCBuildConfiguration; 572 | buildSettings = { 573 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 574 | CODE_SIGN_STYLE = Automatic; 575 | DEVELOPMENT_TEAM = 7VBQS7JDYT; 576 | INFOPLIST_FILE = Demo/Resources/Info.plist; 577 | LD_RUNPATH_SEARCH_PATHS = ( 578 | "$(inherited)", 579 | "@executable_path/Frameworks", 580 | ); 581 | PRODUCT_BUNDLE_IDENTIFIER = XeroT.Demo; 582 | PRODUCT_NAME = "$(TARGET_NAME)"; 583 | SWIFT_VERSION = 5.0; 584 | TARGETED_DEVICE_FAMILY = "1,2"; 585 | }; 586 | name = Debug; 587 | }; 588 | E3E846042514A05D007B66E7 /* Release */ = { 589 | isa = XCBuildConfiguration; 590 | buildSettings = { 591 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 592 | CODE_SIGN_STYLE = Automatic; 593 | DEVELOPMENT_TEAM = 7VBQS7JDYT; 594 | INFOPLIST_FILE = Demo/Resources/Info.plist; 595 | LD_RUNPATH_SEARCH_PATHS = ( 596 | "$(inherited)", 597 | "@executable_path/Frameworks", 598 | ); 599 | PRODUCT_BUNDLE_IDENTIFIER = XeroT.Demo; 600 | PRODUCT_NAME = "$(TARGET_NAME)"; 601 | SWIFT_VERSION = 5.0; 602 | TARGETED_DEVICE_FAMILY = "1,2"; 603 | }; 604 | name = Release; 605 | }; 606 | /* End XCBuildConfiguration section */ 607 | 608 | /* Begin XCConfigurationList section */ 609 | E3E845BA25149E82007B66E7 /* Build configuration list for PBXProject "LiquidTabBarController" */ = { 610 | isa = XCConfigurationList; 611 | buildConfigurations = ( 612 | E3E845C625149E82007B66E7 /* Debug */, 613 | E3E845C725149E82007B66E7 /* Release */, 614 | ); 615 | defaultConfigurationIsVisible = 0; 616 | defaultConfigurationName = Release; 617 | }; 618 | E3E845C825149E82007B66E7 /* Build configuration list for PBXNativeTarget "LiquidTabBarController" */ = { 619 | isa = XCConfigurationList; 620 | buildConfigurations = ( 621 | E3E845C925149E82007B66E7 /* Debug */, 622 | E3E845CA25149E82007B66E7 /* Release */, 623 | ); 624 | defaultConfigurationIsVisible = 0; 625 | defaultConfigurationName = Release; 626 | }; 627 | E3E846022514A05D007B66E7 /* Build configuration list for PBXNativeTarget "Demo" */ = { 628 | isa = XCConfigurationList; 629 | buildConfigurations = ( 630 | E3E846032514A05D007B66E7 /* Debug */, 631 | E3E846042514A05D007B66E7 /* Release */, 632 | ); 633 | defaultConfigurationIsVisible = 0; 634 | defaultConfigurationName = Release; 635 | }; 636 | /* End XCConfigurationList section */ 637 | }; 638 | rootObject = E3E845B725149E82007B66E7 /* Project object */; 639 | } 640 | -------------------------------------------------------------------------------- /LiquidTabBarController.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /LiquidTabBarController.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /LiquidTabBarController.xcodeproj/xcuserdata/jawadali.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /LiquidTabBarController.xcodeproj/xcuserdata/jawadali.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Demo.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 0 11 | 12 | LiquidTabBarController.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 1 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.2 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | import PackageDescription 5 | 6 | let package = Package( 7 | name: "LiquidTabBarController", 8 | products: [ 9 | // Products define the executables and libraries produced by a package, and make them visible to other packages. 10 | .library( 11 | name: "LiquidTabBarController", 12 | targets: ["LiquidTabBarController"]), 13 | ], 14 | dependencies: [ 15 | // Dependencies declare other packages that this package depends on. 16 | // .package(url: /* package url */, from: "1.0.0"), 17 | ], 18 | targets: [ 19 | // Targets are the basic building blocks of a package. A target can define a module or a test suite. 20 | // Targets can depend on other targets in this package, and on products in packages which this package depends on. 21 | .target( 22 | name: "LiquidTabBarController", 23 | dependencies: []), 24 | .testTarget( 25 | name: "LiquidTabBarControllerTests", 26 | dependencies: ["LiquidTabBarController"]), 27 | ] 28 | ) 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 |

LiquidTabBarController

4 | 5 | [![CI Status](https://travis-ci.org/jwd-ali/RingPieChart.svg)](https://travis-ci.org/jwd-ali/RingPieChart) 6 | [![CocoaPods Version](https://img.shields.io/cocoapods/v/RingPieChart.svg?style=flat)](https://cocoapods.org/pods/RingPieChart) 7 | [![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-0473B3.svg?style=flat)](https://github.com/Carthage/Carthage) 8 | [![License](https://img.shields.io/cocoapods/l/RingPieChart.svg?style=flat)](https://cocoapods.org/pods/RingPieChart) 9 | [![Platform](https://img.shields.io/cocoapods/p/RingPieChart.svg?style=flat)](https://cocoapods.org/pods/RingPieChart) 10 | [![Swift 5.1](https://img.shields.io/badge/swift-5.1-orange)](https://swift.org) 11 | 12 |

LiquidTabBarController is Light way to add Fancy bottom bar which gives you Simple Animated tab Bar with native control.

13 | 14 | ___ 15 | 16 |

17 | 18 | 19 | 20 | 21 |

22 | 23 | 24 | ## Requirements 25 | 26 | - iOS 10.0+ / Mac OS X 10.9+ / watchOS 2.0+ / tvOS 9.0+ 27 | - Xcode 8.0+ 28 | 29 | ## Installation 30 | 31 | ### [CocoaPods](http://cocoapods.org) 32 | 33 | To integrate **LiquidTabBarController** into your Xcode project using CocoaPods, specify it in your `Podfile`: 34 | 35 | ```ruby 36 | use_frameworks! 37 | 38 | pod 'LiquidTabBarController' 39 | ``` 40 | 41 | Then, run the following command: 42 | 43 | ```bash 44 | $ pod install 45 | ``` 46 | 47 | ### [Carthage](http://github.com/Carthage/Carthage) 48 | 49 | To integrate `LiquidTabBarController` into your Xcode project using Carthage, specify it in your `Cartfile`: 50 | 51 | ```ogdl 52 | github "jwd-ali/LiquidTabBarController" 53 | ``` 54 | 55 | ### [Swift Package Manager (SPM)](https://swift.org/package-manager) 56 | 57 | #### Prerequisites 58 | - OSX 59 | 60 | 61 | #### Update `Package.swift` 62 | To integrate `LiquidTabBarController` in your project, add the proper description to your `Package.swift` file: 63 | ```swift 64 | // swift-tools-version:5.0 65 | import PackageDescription 66 | 67 | let package = Package( 68 | name: "YOUR_PROJECT_NAME", 69 | dependencies: [ 70 | .package(url: "https://github.com/jwd-ali/LiquidTabBarController.git") 71 | ], 72 | targets: [ 73 | .target( 74 | name: "YOUR_TARGET_NAME", 75 | dependencies: ["LiquidTabBarController"] 76 | ), 77 | ... 78 | ] 79 | ) 80 | ``` 81 | 82 | ### Manually 83 | 84 | If you prefer not to use a dependency manager, you can integrate LiquidTabBarController into your project manually. 85 | 86 | - Add sources into your project: 87 | - Drag `Sources` 88 | 89 | 90 | 91 | 92 | ## Contributing 93 | 94 | I’d love to have help on this project. For small changes please [open a pull request](https://github.com/jwd-ali/LiquidTabBarController/pulls), for larger changes please [open an issue](https://github.com/jwd-ali/LiquidTabBarController/issues) first to discuss what you’d like to see. 95 | 96 | 97 | License 98 | ------- 99 | 100 | LiquidTabBarController is under [MIT](https://opensource.org/licenses/MIT). See [LICENSE](LICENSE) file for more info. 101 | -------------------------------------------------------------------------------- /Sources/LiquidTabBarController/Extensions/CALayer+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CALayer+Extension.swift 3 | // JDTabBarController 4 | // 5 | // Created by Jawad Ali on 05/09/2020. 6 | // 7 | 8 | import UIKit 9 | public extension CALayer { 10 | func animateShapeSpring(from startX : CGFloat , endX: CGFloat) { 11 | let total = abs(startX - endX) 12 | let caframeAnimation = CASpringAnimation(keyPath: "position.x") 13 | caframeAnimation.fromValue = startX 14 | caframeAnimation.toValue = endX 15 | caframeAnimation.damping = total/50 + 5 16 | caframeAnimation.duration = caframeAnimation.settlingDuration 17 | caframeAnimation.fillMode = .both 18 | caframeAnimation.isRemovedOnCompletion = false 19 | self.add(caframeAnimation, forKey: "circleLayerAnimationKey") 20 | } 21 | 22 | func aimateReverseForward(from startX : CGFloat , endX: CGFloat) { 23 | let total = (startX - endX) 24 | let animation = CAKeyframeAnimation(keyPath: "position.x") 25 | animation.values = [startX, total>0 ? startX + 40 : startX - 40, endX] 26 | animation.keyTimes = [0,0.4,1] 27 | animation.isRemovedOnCompletion = false 28 | animation.fillMode = .forwards 29 | animation.duration = 0.5 30 | self.add(animation, forKey: "Reposition") 31 | 32 | 33 | let boundsOvershootAnimation = CAKeyframeAnimation(keyPath: "transform") 34 | 35 | let startingScale = CATransform3DScale(self.transform, 1, 1, 1) 36 | let overshootScale = CATransform3DScale(self.transform, 0.5, 1, 0.5) 37 | let endingScale = self.transform 38 | 39 | boundsOvershootAnimation.values = [startingScale, overshootScale, endingScale] 40 | boundsOvershootAnimation.keyTimes = [0.0, 0.4, 1.0].map { NSNumber(value: $0) } 41 | boundsOvershootAnimation.duration = 0.5 42 | boundsOvershootAnimation.isRemovedOnCompletion = false 43 | boundsOvershootAnimation.fillMode = .forwards 44 | 45 | self.add(boundsOvershootAnimation, forKey: "scale") 46 | 47 | } 48 | 49 | func aimateJelly(from startX : CGFloat , endX: CGFloat) { 50 | let total = (startX - endX) 51 | let bubblePositionAnim = CAKeyframeAnimation(keyPath: "position.x") 52 | bubblePositionAnim.values = [startX, endX] 53 | bubblePositionAnim.keyTimes = [0,1] 54 | 55 | let bubbleTransformAnim = CAKeyframeAnimation(keyPath: "transform") 56 | bubbleTransformAnim.values = [CATransform3DIdentity, 57 | CATransform3DScale(self.transform, 1.3, 1.4, 1.2), 58 | CATransform3DMakeScale(0.7, 1.1, 0.5), 59 | CATransform3DIdentity] 60 | 61 | bubbleTransformAnim.keyTimes = [0, NSNumber(value: 1.0 / 3.0), NSNumber(value: 2.0 / 3.0), 1] 62 | let bubbleGroupAnim = CAAnimationGroup() 63 | bubbleGroupAnim.animations = [ bubblePositionAnim,bubbleTransformAnim] 64 | bubbleGroupAnim.isRemovedOnCompletion = false 65 | bubbleGroupAnim.fillMode = CAMediaTimingFillMode.forwards 66 | bubbleGroupAnim.duration = 0.5 67 | 68 | 69 | self.add(bubbleGroupAnim, forKey: nil) 70 | 71 | } 72 | 73 | } 74 | -------------------------------------------------------------------------------- /Sources/LiquidTabBarController/Extensions/UIViewController+Extesion.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+Extesion.swift 3 | // JDTabBarController 4 | // 5 | // Created by Jawad Ali on 06/09/2020. 6 | // 7 | 8 | import UIKit 9 | private var associateKey: Void? 10 | public extension UIViewController { 11 | var jDTabBarController : LiquidTabBarController? { get { 12 | if let parent = parent as? UINavigationController { 13 | if let controller = parent.parent as? LiquidTabBarController { 14 | return controller 15 | } 16 | } 17 | 18 | else if let parent = parent as? LiquidTabBarController { 19 | return parent 20 | } 21 | return nil 22 | } 23 | } 24 | 25 | 26 | @IBInspectable var hidesBottomSOBar: Bool { 27 | get { 28 | return (objc_getAssociatedObject(self, &associateKey) as? Bool) ?? false 29 | } 30 | set { 31 | objc_setAssociatedObject(self, &associateKey, newValue, .OBJC_ASSOCIATION_RETAIN) 32 | } 33 | } 34 | 35 | @objc func newViewDidAppear(_ animated: Bool) { 36 | self.newViewDidAppear(animated) 37 | self.jDTabBarController?.tabBar.isHidden = hidesBottomSOBar 38 | } 39 | 40 | static func setUpTabBar() { 41 | 42 | if self != UIViewController.self { 43 | return 44 | } 45 | let _: () = { 46 | let originalSelector = #selector(UIViewController.viewDidAppear(_:)) 47 | let swizzledSelector = #selector(UIViewController.newViewDidAppear(_:)) 48 | let originalMethod = class_getInstanceMethod(self, originalSelector) 49 | let swizzledMethod = class_getInstanceMethod(self, swizzledSelector) 50 | method_exchangeImplementations(originalMethod!, swizzledMethod!); 51 | }() 52 | } 53 | 54 | 55 | 56 | } 57 | 58 | -------------------------------------------------------------------------------- /Sources/LiquidTabBarController/Factories/UIImageViewFactory.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JDTabBarItem.swift 3 | // JDTabBarController 4 | // 5 | // Created by Jawad Ali on 06/09/2020. 6 | // 7 | 8 | import UIKit 9 | 10 | public class UIImageViewFactory { 11 | 12 | public class func createBackgroundImageView(mode: UIImageView.ContentMode = .scaleAspectFill, image: UIImage = UIImage(named: "image_backgound")!) -> UIImageView { 13 | let imageView = UIImageView() 14 | imageView.contentMode = mode 15 | imageView.translatesAutoresizingMaskIntoConstraints = false 16 | imageView.image = image 17 | return imageView 18 | } 19 | 20 | public class func createImageView(mode: UIImageView.ContentMode = .scaleAspectFill, image: UIImage? = nil, tintColor: UIColor? = .clear) -> UIImageView { 21 | let imageView = UIImageView() 22 | imageView.contentMode = mode 23 | imageView.tintColor = tintColor 24 | imageView.translatesAutoresizingMaskIntoConstraints = false 25 | imageView.image = image 26 | return imageView 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Sources/LiquidTabBarController/Factories/UILabelFactory.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JDTabBarItem.swift 3 | // JDTabBarController 4 | // 5 | // Created by Jawad Ali on 06/09/2020. 6 | // 7 | 8 | import UIKit 9 | 10 | 11 | public class UILabelFactory { 12 | 13 | public class func createUILabel(with color: UIColor = .black, font: UIFont = UIFont.systemFont(ofSize: 17), alignment: NSTextAlignment = .left, numberOfLines: Int = 1, lineBreakMode: NSLineBreakMode = .byTruncatingTail, text: String? = nil, alpha: CGFloat = 1.0) -> T { 14 | let label = T() 15 | label.font = font 16 | label.textColor = color 17 | label.textAlignment = alignment 18 | label.numberOfLines = numberOfLines 19 | label.lineBreakMode = lineBreakMode 20 | label.text = text 21 | label.alpha = alpha 22 | label.translatesAutoresizingMaskIntoConstraints = false 23 | return label 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Sources/LiquidTabBarController/Factories/UIStackViewFactory.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JDTabBarItem.swift 3 | // JDTabBarController 4 | // 5 | // Created by Jawad Ali on 06/09/2020. 6 | // 7 | 8 | import UIKit 9 | 10 | public class UIStackViewFactory { 11 | public class func createStackView(with axis: NSLayoutConstraint.Axis, alignment: UIStackView.Alignment = .leading, distribution: UIStackView.Distribution = .fillProportionally, spacing: CGFloat = 0, arrangedSubviews: [UIView]? = nil) -> UIStackView { 12 | let stackView = arrangedSubviews == nil ? UIStackView() : UIStackView(arrangedSubviews: arrangedSubviews!) 13 | stackView.axis = axis 14 | stackView.alignment = alignment 15 | stackView.distribution = distribution 16 | stackView.spacing = spacing 17 | stackView.translatesAutoresizingMaskIntoConstraints = false 18 | return stackView 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Sources/LiquidTabBarController/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/LiquidTabBarController/JDLayout/YAPLayout.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JDTabBarItem.swift 3 | // JDTabBarController 4 | // 5 | // Created by Jawad Ali on 04/09/2020. 6 | // 7 | 8 | import UIKit 9 | 10 | // MARK: All edges constraints 11 | 12 | public extension UIView { 13 | @discardableResult func alignEdges(_ edges: [YAPLayoutEdge], withView view: UIView, _ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 14 | 15 | for edge in edges { 16 | _ = alignEdge(edge, withView: view, constantModifier, constant: constant, priority: priority) 17 | } 18 | 19 | return self 20 | } 21 | 22 | @discardableResult func alignEdges(_ edges: [YAPLayoutEdge], withView view: UIView, _ constantModifier: YAPLayoutConstantModifier = .equalTo, constants: [CGFloat], priority: UILayoutPriority = .required) -> UIView { 23 | 24 | for edge in edges { 25 | _ = alignEdge(edge, withView: view, constantModifier, constant: constants[edges.firstIndex(of: edge) ?? 0], priority: priority) 26 | } 27 | 28 | return self 29 | } 30 | } 31 | 32 | // MARK: Dimension constraints 33 | 34 | public extension UIView { 35 | @discardableResult func width(_ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat, priority: UILayoutPriority = .required) -> UIView { 36 | 37 | let constraint: NSLayoutConstraint 38 | 39 | switch constantModifier { 40 | case .equalTo: 41 | constraint = widthAnchor.constraint(equalToConstant: constant) 42 | case .greaterThanOrEqualTo: 43 | constraint = widthAnchor.constraint(greaterThanOrEqualToConstant: constant) 44 | case .lessThanOrEqualTo: 45 | constraint = widthAnchor.constraint(lessThanOrEqualToConstant: constant) 46 | } 47 | 48 | constraint.priority = priority 49 | constraint.isActive = true 50 | return self 51 | } 52 | 53 | @discardableResult func height(_ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat, priority: UILayoutPriority = .required) -> UIView { 54 | 55 | let constraint: NSLayoutConstraint 56 | 57 | switch constantModifier { 58 | case .equalTo: 59 | constraint = heightAnchor.constraint(equalToConstant: constant) 60 | case .greaterThanOrEqualTo: 61 | constraint = heightAnchor.constraint(greaterThanOrEqualToConstant: constant) 62 | case .lessThanOrEqualTo: 63 | constraint = heightAnchor.constraint(lessThanOrEqualToConstant: constant) 64 | } 65 | 66 | constraint.priority = priority 67 | constraint.isActive = true 68 | return self 69 | } 70 | 71 | @discardableResult func height(with edge: YAPLayoutEdge, _ constantModifier: YAPLayoutConstantModifier = .equalTo, ofView view: UIView, multiplier: CGFloat = 1.0, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 72 | 73 | return pinDimensionEdge(.height, toEdge: edge, ofView: view, constantModifier, mutliplier: multiplier, constant: constant, priority: priority) 74 | } 75 | 76 | @discardableResult func width(with edge: YAPLayoutEdge, _ constantModifier: YAPLayoutConstantModifier = .equalTo, ofView view: UIView, multiplier: CGFloat = 1.0, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 77 | 78 | return pinDimensionEdge(.width, toEdge: edge, ofView: view, constantModifier, mutliplier: multiplier, constant: constant, priority: priority) 79 | } 80 | 81 | @discardableResult func aspectRatio(_ ratio: CGFloat = 1, _ priority:UILayoutPriority = .required) -> UIView { 82 | return height(with: .width, ofView: self, multiplier: ratio,priority: priority) 83 | } 84 | } 85 | 86 | // MARK: Constraints with superview 87 | 88 | public extension UIView { 89 | @discardableResult func centerInSuperView(priority: UILayoutPriority = .required) -> UIView { 90 | guard let superview = superview else { return self } 91 | return alignCenterWith(superview) 92 | } 93 | 94 | @discardableResult func centerHorizontallyInSuperview(priority: UILayoutPriority = .required) -> UIView { 95 | guard let superview = superview else { return self } 96 | return horizontallyCenterWith(superview) 97 | } 98 | 99 | @discardableResult func centerVerticallyInSuperview(priority: UILayoutPriority = .required) -> UIView { 100 | guard let superview = superview else { return self } 101 | return verticallyCenterWith(superview) 102 | } 103 | 104 | @discardableResult func alignEdgeWithSuperview(_ edge: YAPLayoutEdge, _ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 105 | guard let superview = superview else { return self } 106 | return alignEdge(edge, withView: superview, constantModifier, constant: constant, priority: priority) 107 | } 108 | 109 | @discardableResult func alignEdgeWithSuperviewSafeArea(_ edge: YAPLayoutEdge, _ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 110 | guard let superview = superview else { return self } 111 | return pinEdge(edge, toEdge: edge.safeAreaEdge, ofView: superview, constantModifier, constant: constant, priority: priority) 112 | } 113 | 114 | @discardableResult func alignAllEdgesWithSuperview(_ constantModifier: YAPLayoutConstantModifier = .equalTo, edgeInsets: UIEdgeInsets = .zero, priority: UILayoutPriority = .required) -> UIView { 115 | return alignEdgeWithSuperview(.left, constantModifier, constant: edgeInsets.left, priority: priority) 116 | .alignEdgeWithSuperview(.top, constantModifier, constant: edgeInsets.top, priority: priority) 117 | .alignEdgeWithSuperview(.right, constantModifier, constant: edgeInsets.right, priority: priority) 118 | .alignEdgeWithSuperview(.bottom, constantModifier, constant: edgeInsets.bottom, priority: priority) 119 | } 120 | 121 | @discardableResult func alignEdgesWithSuperview(_ edges: [YAPLayoutEdge], _ constantModifier: YAPLayoutConstantModifier = .equalTo, constants: [CGFloat], priority: UILayoutPriority = .required) -> UIView { 122 | guard let superview = superview else { return self } 123 | 124 | return alignEdges(edges, withView: superview, constantModifier, constants: constants, priority: priority) 125 | } 126 | 127 | @discardableResult func alignEdgesWithSuperview(_ edges: [YAPLayoutEdge], _ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 128 | guard let superview = superview else { return self } 129 | 130 | return alignEdges(edges, withView: superview, constantModifier, constant: constant, priority: priority) 131 | } 132 | } 133 | 134 | public extension UIView { 135 | @discardableResult func toLeftOf(_ view: UIView, _ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 136 | return pinEdge(.right, toEdge: .left, ofView: view, constantModifier, constant: constant, priority: priority) 137 | } 138 | 139 | @discardableResult func toRightOf(_ view: UIView, _ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 140 | return pinEdge(.left, toEdge: .right, ofView: view, constant: constant, priority: priority) 141 | } 142 | 143 | @discardableResult func toTopOf(_ view: UIView, _ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 144 | return pinEdge(.bottom, toEdge: .top, ofView: view, constantModifier, constant: constant, priority: priority) 145 | } 146 | 147 | @discardableResult func toBottomOf(_ view: UIView, _ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 148 | return pinEdge(.top, toEdge: .bottom, ofView: view, constantModifier, constant: constant, priority: priority) 149 | } 150 | 151 | @discardableResult func alignCenterWith(_ view: UIView, priority: UILayoutPriority = .required) -> UIView { 152 | return horizontallyCenterWith(view).verticallyCenterWith(view) 153 | } 154 | 155 | @discardableResult func horizontallyCenterWith(_ view: UIView, _ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 156 | return pinEdge(.centerX, toEdge: .centerX, ofView: view, constantModifier, constant: constant, priority: priority) 157 | } 158 | 159 | @discardableResult func verticallyCenterWith(_ view: UIView, _ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 160 | return pinEdge(.centerY, toEdge: .centerY, ofView: view, constantModifier, constant: constant, priority: priority) 161 | } 162 | 163 | @discardableResult func alignEdge(_ edge: YAPLayoutEdge, withView view: UIView, _ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat = 0, priority: UILayoutPriority = .required ) -> UIView { 164 | return pinEdge(edge, toEdge: edge, ofView: view, constantModifier, constant: constant, priority: priority) 165 | } 166 | 167 | @discardableResult func pinEdge(_ edge1: YAPLayoutEdge, toEdge edge2: YAPLayoutEdge, ofView view: UIView, _ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 168 | 169 | if edge1.axis != edge2.axis { 170 | assertionFailure("YAPLayout Error: all edges of same constraint must be of same axis") 171 | } 172 | 173 | switch edge1.axis { 174 | case .horizontal: 175 | return pinHorizontalEdge(edge1, toEdge: edge2, ofView: view, constantModifier, constant: constant, priority: priority) 176 | case .vertical: 177 | return pinVerticalEdge(edge1, toEdge: edge2, ofView: view, constantModifier, constant: constant, priority: priority) 178 | case .dimensions: 179 | return pinDimensionEdge(edge1, toEdge: edge2, ofView: view, constantModifier, constant: constant, priority: priority) 180 | } 181 | } 182 | } 183 | 184 | // MARK: Private @discardableResult functions 185 | 186 | private extension UIView { 187 | @discardableResult func pinHorizontalEdge(_ edge1: YAPLayoutEdge, toEdge edge2: YAPLayoutEdge, ofView view: UIView, _ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 188 | 189 | let constraint: NSLayoutConstraint 190 | 191 | if edge1 != .right && edge1 != .safeAreaRight { 192 | switch constantModifier { 193 | case .equalTo: 194 | constraint = horizontalAnchor(edge1).constraint(equalTo: view.horizontalAnchor(edge2), constant: constant) 195 | case .greaterThanOrEqualTo: 196 | constraint = horizontalAnchor(edge1).constraint(greaterThanOrEqualTo: view.horizontalAnchor(edge2), constant: constant) 197 | case .lessThanOrEqualTo: 198 | constraint = horizontalAnchor(edge1).constraint(lessThanOrEqualTo: view.horizontalAnchor(edge2), constant: constant) 199 | } 200 | } else { 201 | switch constantModifier { 202 | case .equalTo: 203 | constraint = view.horizontalAnchor(edge2).constraint(equalTo: horizontalAnchor(edge1), constant: constant) 204 | case .greaterThanOrEqualTo: 205 | constraint = view.horizontalAnchor(edge2).constraint(greaterThanOrEqualTo: horizontalAnchor(edge1), constant: constant) 206 | case .lessThanOrEqualTo: 207 | constraint = view.horizontalAnchor(edge2).constraint(lessThanOrEqualTo: horizontalAnchor(edge1), constant: constant) 208 | } 209 | } 210 | 211 | constraint.priority = priority 212 | constraint.isActive = true 213 | 214 | return self 215 | } 216 | 217 | @discardableResult func pinVerticalEdge(_ edge1: YAPLayoutEdge, toEdge edge2: YAPLayoutEdge, ofView view: UIView, _ constantModifier: YAPLayoutConstantModifier = .equalTo, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 218 | 219 | let constraint: NSLayoutConstraint 220 | 221 | if edge1 != .bottom && edge1 != .safeAreaBottom && edge1 != .bottomAvoidingKeyboard && edge2 != .safeAreaBottomAvoidingKeyboard { 222 | switch constantModifier { 223 | case .equalTo: 224 | constraint = verticalAnchor(edge1).constraint(equalTo: view.verticalAnchor(edge2), constant: constant) 225 | case .greaterThanOrEqualTo: 226 | constraint = verticalAnchor(edge1).constraint(greaterThanOrEqualTo: view.verticalAnchor(edge2), constant: constant) 227 | case .lessThanOrEqualTo: 228 | constraint = verticalAnchor(edge1).constraint(lessThanOrEqualTo: view.verticalAnchor(edge2), constant: constant) 229 | } 230 | } else { 231 | switch constantModifier { 232 | case .equalTo: 233 | constraint = view.verticalAnchor(edge2).constraint(equalTo: verticalAnchor(edge1), constant: constant) 234 | case .greaterThanOrEqualTo: 235 | constraint = view.verticalAnchor(edge2).constraint(greaterThanOrEqualTo: verticalAnchor(edge1), constant: constant) 236 | case .lessThanOrEqualTo: 237 | constraint = view.verticalAnchor(edge2).constraint(lessThanOrEqualTo: verticalAnchor(edge1), constant: constant) 238 | } 239 | } 240 | 241 | if edge1 == .safeAreaBottomAvoidingKeyboard || edge1 == .bottomAvoidingKeyboard || edge2 == .bottomAvoidingKeyboard || edge2 == .safeAreaBottomAvoidingKeyboard { 242 | constraint.identifier = "keyboardAvoidingConstraint" 243 | } 244 | 245 | constraint.priority = priority 246 | constraint.isActive = true 247 | 248 | return self 249 | } 250 | 251 | @discardableResult func pinDimensionEdge(_ edge1: YAPLayoutEdge, toEdge edge2: YAPLayoutEdge, ofView view: UIView, _ constantModifier: YAPLayoutConstantModifier = .equalTo, mutliplier: CGFloat = 1, constant: CGFloat = 0, priority: UILayoutPriority = .required) -> UIView { 252 | 253 | let constraint: NSLayoutConstraint 254 | 255 | switch constantModifier { 256 | case .equalTo: 257 | constraint = dimensionAnchor(edge1).constraint(equalTo: view.dimensionAnchor(edge2), multiplier: mutliplier, constant: constant) 258 | case .greaterThanOrEqualTo: 259 | constraint = dimensionAnchor(edge1).constraint(greaterThanOrEqualTo: view.dimensionAnchor(edge2), multiplier: mutliplier, constant: constant) 260 | case .lessThanOrEqualTo: 261 | constraint = dimensionAnchor(edge1).constraint(lessThanOrEqualTo: view.dimensionAnchor(edge2), multiplier: mutliplier, constant: constant) 262 | } 263 | 264 | constraint.priority = priority 265 | constraint.isActive = true 266 | 267 | return self 268 | } 269 | 270 | } 271 | -------------------------------------------------------------------------------- /Sources/LiquidTabBarController/JDLayout/YAPLayoutAttributes.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JDTabBarItem.swift 3 | // JDTabBarController 4 | // 5 | // Created by Jawad Ali on 04/09/2020. 6 | // 7 | 8 | import UIKit 9 | 10 | enum YAPLayoutAxis { 11 | case vertical 12 | case horizontal 13 | case dimensions 14 | } 15 | 16 | public enum YAPLayoutEdge { 17 | case left 18 | case right 19 | case top 20 | case bottom 21 | case bottomAvoidingKeyboard 22 | case safeAreaLeft 23 | case safeAreaRight 24 | case safeAreaTop 25 | case safeAreaBottom 26 | case safeAreaBottomAvoidingKeyboard 27 | case centerX 28 | case centerY 29 | case height 30 | case width 31 | } 32 | 33 | extension YAPLayoutEdge { 34 | var axis: YAPLayoutAxis { 35 | switch self { 36 | case .left, .right, .centerX, .safeAreaLeft, .safeAreaRight: 37 | return .horizontal 38 | case .bottom, .top, .centerY, .safeAreaTop, .safeAreaBottom, .bottomAvoidingKeyboard, .safeAreaBottomAvoidingKeyboard: 39 | return .vertical 40 | case .height, .width: 41 | return .dimensions 42 | 43 | } 44 | } 45 | 46 | var safeAreaEdge: YAPLayoutEdge { 47 | switch self { 48 | case .left, .safeAreaLeft: 49 | return .safeAreaLeft 50 | case .top, .safeAreaTop: 51 | return .safeAreaTop 52 | case .right, .safeAreaRight: 53 | return .safeAreaRight 54 | case .bottom, .safeAreaBottom, .bottomAvoidingKeyboard, .safeAreaBottomAvoidingKeyboard: 55 | return .safeAreaBottom 56 | default: 57 | return .safeAreaLeft 58 | } 59 | } 60 | } 61 | 62 | public enum YAPLayoutConstantModifier { 63 | case equalTo 64 | case lessThanOrEqualTo 65 | case greaterThanOrEqualTo 66 | } 67 | 68 | internal extension UIView { 69 | func horizontalAnchor(_ edge: YAPLayoutEdge) -> NSLayoutXAxisAnchor { 70 | switch edge { 71 | case .left: 72 | return leadingAnchor 73 | case .right: 74 | return trailingAnchor 75 | case .centerX: 76 | return centerXAnchor 77 | case .safeAreaLeft: 78 | return safeAreaLayoutGuide.leadingAnchor 79 | case .safeAreaRight: 80 | return safeAreaLayoutGuide.trailingAnchor 81 | default: 82 | return leadingAnchor 83 | } 84 | } 85 | 86 | func verticalAnchor(_ edge: YAPLayoutEdge) -> NSLayoutYAxisAnchor { 87 | switch edge { 88 | case .top: 89 | return topAnchor 90 | case .bottom, .bottomAvoidingKeyboard: 91 | return bottomAnchor 92 | case .centerY: 93 | return centerYAnchor 94 | case .safeAreaTop: 95 | return safeAreaLayoutGuide.topAnchor 96 | case .safeAreaBottom, .safeAreaBottomAvoidingKeyboard: 97 | return safeAreaLayoutGuide.bottomAnchor 98 | default: 99 | return topAnchor 100 | } 101 | } 102 | 103 | func dimensionAnchor(_ edge: YAPLayoutEdge) -> NSLayoutDimension { 104 | switch edge { 105 | case .width: 106 | return widthAnchor 107 | case .height: 108 | return heightAnchor 109 | default: 110 | return widthAnchor 111 | } 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /Sources/LiquidTabBarController/LiquidTabBar/JDTabBar.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JDTabBar.swift 3 | // JDTabBarController 4 | // 5 | // Created by Jawad Ali on 04/09/2020. 6 | // 7 | 8 | import UIKit 9 | 10 | public protocol JDTabBarDelegate: AnyObject { 11 | func tabBar(_ tabBar: JDTabBar, didSelectTabAt index: Int) 12 | } 13 | 14 | public class JDTabBar: UIView { 15 | 16 | //MARK:- Public Properties 17 | open var tabBarTintColor: UIColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1) { 18 | didSet { 19 | self.stackView.arrangedSubviews.enumerated().forEach { 20 | ($1 as? LiquidTabBarItem)?.imageSelectedTintColor = tabBarTintColor 21 | } 22 | setNeedsDisplay() 23 | } 24 | } 25 | 26 | public var circleSize: CGFloat = 65 { 27 | didSet { 28 | setNeedsDisplay() 29 | } 30 | } 31 | 32 | public var circleBorderWidth: CGFloat = 10 { 33 | didSet { 34 | setNeedsDisplay() 35 | } 36 | } 37 | 38 | open var shapeType: Shape = .upperRound { 39 | didSet{ 40 | setNeedsDisplay() 41 | } 42 | } 43 | 44 | 45 | internal var viewControllers = [UIViewController]() { 46 | didSet { 47 | guard !viewControllers.isEmpty else { return } 48 | 49 | DispatchQueue.main.async { 50 | self.drawTabs() 51 | self.didSelectTab(index: 0) 52 | } 53 | } 54 | } 55 | 56 | internal var isOffSetOn: Bool = true { 57 | didSet { 58 | self.cornerBackgroundView.isHidden = !isOffSetOn 59 | self.setNeedsDisplay() 60 | } 61 | } 62 | 63 | //MARK:- Views 64 | private lazy var stackView = UIStackViewFactory.createStackView(with: .horizontal, alignment: .center, distribution: .fillEqually, spacing: 0) 65 | 66 | private lazy var innerCircleView: UIView = { 67 | let view = UIView() 68 | view.backgroundColor = tabBarTintColor 69 | return view 70 | }() 71 | 72 | private lazy var outerCircleView: UIView = { 73 | let view = UIView() 74 | view.translatesAutoresizingMaskIntoConstraints = false 75 | return view 76 | }() 77 | 78 | private lazy var cornerBackgroundView: UIView = { 79 | let view = UIView() 80 | view.translatesAutoresizingMaskIntoConstraints = false 81 | view.layer.maskedCorners = shapeType.maskCorenrs 82 | view.layer.masksToBounds = true 83 | view.clipsToBounds = false 84 | return view 85 | }() 86 | 87 | //MARK:- delegate 88 | 89 | weak var delegate: JDTabBarDelegate? 90 | 91 | //MARK:- Private properties 92 | 93 | private var selectedIndex: Int = 0 94 | private var previousSelectedIndex = 0 95 | 96 | //MARK:- initializers 97 | 98 | override init(frame: CGRect) { 99 | super.init(frame: frame) 100 | commonInit() 101 | } 102 | 103 | required public init?(coder aDecoder: NSCoder) { 104 | super.init(coder: aDecoder) 105 | commonInit() 106 | } 107 | 108 | private func commonInit() { 109 | setUp() 110 | } 111 | 112 | public override func draw(_ rect: CGRect) { 113 | super.draw(rect) 114 | 115 | setupConstraints() 116 | cornerBackgroundView.backgroundColor = self.tabBarTintColor 117 | 118 | cornerBackgroundView.layer.cornerRadius = bounds.midY - shapeType.layoutMargins.last!/2 119 | cornerBackgroundView.layer.maskedCorners = shapeType.maskCorenrs 120 | 121 | innerCircleView.backgroundColor = tabBarTintColor 122 | cornerBackgroundView.layoutIfNeeded() 123 | 124 | cornerBackgroundView.layer.shadowOffset = .zero 125 | cornerBackgroundView.layer.shadowOpacity = 0.18 126 | cornerBackgroundView.layer.shadowRadius = 10 127 | 128 | } 129 | 130 | public override func touchesBegan(_ touches: Set, with event: UIEvent?) { 131 | super.touchesBegan(touches, with: event) 132 | guard let touchArea = touches.first?.location(in: self).x else { 133 | return 134 | } 135 | let index = Int(floor(touchArea / tabWidth)) 136 | didSelectTab(index: index) 137 | } 138 | } 139 | 140 | //MARK:- set upview and constraints 141 | private extension JDTabBar { 142 | func setUp() { 143 | setUpView() 144 | setupConstraints() 145 | } 146 | 147 | func setUpView() { 148 | innerCircleView.addSubview(outerCircleView) 149 | 150 | addSubview(innerCircleView) 151 | addSubview(stackView) 152 | } 153 | func setupConstraints() { 154 | 155 | innerCircleView.frame = CGRect(origin: CGPoint(x: 0, y: -circleSize/2), size: CGSize(width: circleSize, height: circleSize)) 156 | 157 | innerCircleView.layer.cornerRadius = circleSize / 2 158 | outerCircleView.layer.cornerRadius = (innerCircleView.frame.size.height - circleBorderWidth) / 2 159 | 160 | cornerBackgroundView.removeFromSuperview() 161 | insertSubview(cornerBackgroundView, at: 0) 162 | 163 | cornerBackgroundView 164 | .alignEdgesWithSuperview([.left, .right, .top, .bottom], constants:shapeType.layoutMargins) 165 | 166 | outerCircleView 167 | .centerInSuperView() 168 | .width(constant: circleSize - circleBorderWidth) 169 | .height(constant: circleSize - circleBorderWidth) 170 | 171 | stackView 172 | .alignAllEdgesWithSuperview() 173 | } 174 | 175 | } 176 | 177 | //MARK:- Add JDTabBarItem in tabBar 178 | extension JDTabBar { 179 | private func drawTabs() { 180 | for (vc) in viewControllers{ 181 | let barView = LiquidTabBarItem(tabBarItem: vc.tabBarItem) 182 | 183 | barView 184 | .height(constant: stackView.bounds.maxY) 185 | 186 | self.stackView.addArrangedSubview(barView) 187 | } 188 | } 189 | } 190 | 191 | //MARK:- Touch Handling 192 | 193 | extension JDTabBar { 194 | 195 | private var tabWidth: CGFloat { 196 | return (UIScreen.main.bounds.width / CGFloat(viewControllers.count)) 197 | } 198 | 199 | private var circleTransition: (startX:CGFloat, endX: CGFloat) { 200 | let startPoint_X = CGFloat(previousSelectedIndex) * CGFloat(tabWidth) - (tabWidth * 0.5) 201 | let endPoint_X = CGFloat(selectedIndex) * CGFloat(tabWidth) - (tabWidth * 0.5) 202 | return (startPoint_X,endPoint_X) 203 | } 204 | 205 | func didSelectTab(index: Int) { 206 | delegate?.tabBar(self, didSelectTabAt: index) 207 | if index + 1 == selectedIndex {return} 208 | 209 | previousSelectedIndex = selectedIndex 210 | selectedIndex = index + 1 211 | 212 | innerCircleView.layer.animateShapeSpring(from: circleTransition.startX, endX: circleTransition.endX) 213 | animateTabItem(index: index) 214 | } 215 | } 216 | //MARK:- Animation shape 217 | private extension JDTabBar { 218 | 219 | func animateTabItem(index: Int) { 220 | self.stackView.arrangedSubviews.enumerated().forEach { 221 | guard let tabView = $1 as? LiquidTabBarItem else { return } 222 | ($0 == index ? tabView.animateTabSelected : tabView.animateTabDeSelect)() 223 | } 224 | } 225 | } 226 | 227 | -------------------------------------------------------------------------------- /Sources/LiquidTabBarController/LiquidTabBar/LiquiTabBar.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JDTabBar.swift 3 | // Pods-SOTabBar_Example 4 | // 5 | // Created by Jawad Ali on 04/09/2020. 6 | // 7 | 8 | import UIKit 9 | public protocol LTabBarDelegate: AnyObject { 10 | func tabBar(_ tabBar: LTabBar, didSelectTabAt index: Int) 11 | } 12 | 13 | public class LTabBar: UIView { 14 | private var shapeLayer : CAShapeLayer = { 15 | let shape = CAShapeLayer() 16 | shape.fillColor = #colorLiteral(red: 0.9894880652, green: 0.3935522437, blue: 0.3954764307, alpha: 1) 17 | // shape.strokeColor = UIColor.green.cgColor 18 | // shape.lineWidth = 5 19 | return shape 20 | }() 21 | 22 | //MARK:- Public Properties 23 | open var tabBarTintColor: UIColor = #colorLiteral(red: 0.9894880652, green: 0.3935522437, blue: 0.3954764307, alpha: 1) { 24 | didSet { 25 | backgroundColor = tabBarTintColor 26 | setNeedsDisplay() 27 | } 28 | } 29 | 30 | public var circleSize: CGFloat = 60 { 31 | didSet { 32 | setNeedsDisplay() 33 | } 34 | } 35 | 36 | public var circleBorderWidth: CGFloat = 10 { 37 | didSet { 38 | setNeedsDisplay() 39 | } 40 | } 41 | 42 | var viewControllers = [UIViewController]() { 43 | didSet { 44 | guard !viewControllers.isEmpty else { return } 45 | 46 | DispatchQueue.main.async { 47 | self.drawTabs() 48 | self.didSelectTab(index: 0) 49 | } 50 | } 51 | } 52 | 53 | //MARK:- Views 54 | 55 | private lazy var stackView = UIStackViewFactory.createStackView(with: .horizontal, alignment: .center, distribution: .fillEqually, spacing: 0) 56 | 57 | private lazy var innerCircleView: UIView = { 58 | let view = UIView() 59 | view.backgroundColor = .clear 60 | return view 61 | }() 62 | 63 | //MARK:- delegate 64 | 65 | weak var delegate: LTabBarDelegate? 66 | 67 | //MARK:- Private properties 68 | 69 | private var selectedIndex: Int = 0 70 | private var previousSelectedIndex = 0 71 | 72 | //MARK:- initializers 73 | 74 | override init(frame: CGRect) { 75 | super.init(frame: frame) 76 | commonInit() 77 | } 78 | 79 | required public init?(coder aDecoder: NSCoder) { 80 | super.init(coder: aDecoder) 81 | commonInit() 82 | } 83 | 84 | private func commonInit() { 85 | backgroundColor = tabBarTintColor 86 | shapeLayer.fillColor = tabBarTintColor.cgColor 87 | setUp() 88 | 89 | } 90 | 91 | public override func draw(_ rect: CGRect) { 92 | setupConstraints() 93 | drawShapePath(holdingView: innerCircleView) 94 | backgroundColor = tabBarTintColor 95 | shapeLayer.fillColor = tabBarTintColor.cgColor 96 | 97 | 98 | } 99 | 100 | public override func touchesBegan(_ touches: Set, with event: UIEvent?) { 101 | super.touchesBegan(touches, with: event) 102 | guard let touchArea = touches.first?.location(in: self).x else { 103 | return 104 | } 105 | let index = Int(floor(touchArea / tabWidth)) 106 | didSelectTab(index: index) 107 | } 108 | } 109 | 110 | //MARK:- set upview and constraints 111 | private extension LTabBar { 112 | func setUp() { 113 | setUpView() 114 | setupConstraints() 115 | } 116 | 117 | func setUpView() { 118 | innerCircleView.layer.addSublayer(shapeLayer) 119 | 120 | addSubview(innerCircleView) 121 | addSubview(stackView) 122 | } 123 | func setupConstraints() { 124 | innerCircleView.frame = CGRect(origin: CGPoint(x: 0, y: -circleSize), size: CGSize(width: circleSize*2, height: circleSize)) 125 | 126 | stackView 127 | .alignAllEdgesWithSuperview() 128 | } 129 | 130 | } 131 | 132 | //MARK:- Add LTabBarItem in tabBar 133 | extension LTabBar { 134 | private func drawTabs() { 135 | for vc in viewControllers { 136 | let barView = LiquidTabBarItem(tabBarItem: vc.tabBarItem) 137 | 138 | barView 139 | .height(constant: stackView.bounds.maxY) 140 | 141 | self.stackView.addArrangedSubview(barView) 142 | } 143 | } 144 | } 145 | 146 | //MARK:- Touch Handling 147 | extension LTabBar { 148 | 149 | var tabWidth: CGFloat { 150 | return (UIScreen.main.bounds.width / CGFloat(viewControllers.count)) 151 | } 152 | 153 | var circleTransition: (startX:CGFloat, endX: CGFloat) { 154 | let startPoint_X = CGFloat(previousSelectedIndex) * CGFloat(tabWidth) - (tabWidth * 0.5) 155 | let endPoint_X = CGFloat(selectedIndex) * CGFloat(tabWidth) - (tabWidth * 0.5) 156 | return (startPoint_X,endPoint_X) 157 | } 158 | 159 | func didSelectTab(index: Int) { 160 | delegate?.tabBar(self, didSelectTabAt: index) 161 | if index + 1 == selectedIndex {return} 162 | 163 | previousSelectedIndex = selectedIndex 164 | selectedIndex = index + 1 165 | 166 | innerCircleView.layer.aimateJelly(from: circleTransition.startX, endX: circleTransition.endX) 167 | animateTabItem(index: index) 168 | } 169 | } 170 | //MARK:- Animation shape 171 | private extension LTabBar { 172 | 173 | func animateTabItem(index: Int) { 174 | self.stackView.arrangedSubviews.enumerated().forEach { 175 | guard let tabView = $1 as? LiquidTabBarItem else { return } 176 | ($0 == index ? tabView.animateTabSelected : tabView.animateTabDeSelect)() 177 | } 178 | } 179 | } 180 | 181 | private extension LTabBar { 182 | func drawShapePath(holdingView:UIView) { 183 | let bezierPath = UIBezierPath() 184 | 185 | bezierPath.move(to: CGPoint(x: 0, y: holdingView.bounds.maxY)) 186 | bezierPath.addCurve(to: CGPoint(x: holdingView.bounds.midX * 0.4, y: holdingView.bounds.maxY * 0.8), controlPoint1: CGPoint(x: holdingView.bounds.midX * 0.1, y: holdingView.bounds.maxY ), controlPoint2: CGPoint(x: holdingView.bounds.midX * 0.25, y: holdingView.bounds.maxY )) 187 | bezierPath.addQuadCurve(to: CGPoint(x: holdingView.bounds.midX + holdingView.bounds.midX * 0.6, y: holdingView.bounds.maxY * 0.8), controlPoint: CGPoint(x: holdingView.bounds.midX, y: 0)) 188 | bezierPath.addCurve(to: CGPoint(x: holdingView.bounds.maxX, y: holdingView.bounds.maxY), controlPoint1: CGPoint(x:holdingView.bounds.midX + holdingView.bounds.midX * 0.75, y: holdingView.bounds.maxY ), controlPoint2: CGPoint(x:holdingView.bounds.midX + holdingView.bounds.midX * 0.9, y: holdingView.bounds.maxY )) 189 | shapeLayer.path = bezierPath.cgPath 190 | } 191 | } 192 | -------------------------------------------------------------------------------- /Sources/LiquidTabBarController/LiquidTabBar/LiquidTabBarController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JDTabBarController.swift 3 | // JDTabBarController 4 | // 5 | // Created by Jawad Ali on 05/09/2020. 6 | // 7 | 8 | import UIKit 9 | 10 | 11 | public protocol LiquidTabBarControllerDelegate: NSObjectProtocol { 12 | func tabBarController(_ tabBarController: LiquidTabBarController, didSelect viewController: UIViewController) 13 | } 14 | open class LiquidTabBarController: UIViewController { 15 | 16 | //MARK:- Properties 17 | weak open var delegate: LiquidTabBarControllerDelegate? 18 | 19 | public var selectedIndex: Int = 0 { 20 | didSet { 21 | tabBar.didSelectTab(index: selectedIndex) 22 | } 23 | } 24 | 25 | public var isRoundedOffsetOn:Bool = true //{ 26 | // didSet { tabBar.isOffSetOn = isRoundedOffsetOn } 27 | // } 28 | private var selectIndex = 0 29 | private(set) public var previousSelectedIndex = 0 30 | public var viewControllers = [UIViewController]() { 31 | didSet { tabBar.viewControllers = viewControllers } 32 | } 33 | public var tabBarHeight: CGFloat = 80 34 | 35 | //MARK:- Views 36 | public lazy var tabBar: LTabBar = { 37 | let tabBar = LTabBar() 38 | tabBar.delegate = self 39 | tabBar.translatesAutoresizingMaskIntoConstraints = false 40 | return tabBar 41 | }() 42 | 43 | private lazy var stack = UIStackViewFactory.createStackView(with: .vertical, alignment: .fill, distribution: .fill, arrangedSubviews: [containerView,tabBar]) 44 | 45 | private lazy var containerView: UIView = { 46 | let view = UIView() 47 | view.translatesAutoresizingMaskIntoConstraints = false 48 | view.backgroundColor = UIColor.white 49 | return view 50 | }() 51 | 52 | //MARK:- Lifecycle 53 | override open func viewDidLoad() { 54 | super.viewDidLoad() 55 | self.view.addSubview(stack) 56 | } 57 | 58 | open override func viewDidLayoutSubviews() { 59 | self.drawConstraint() 60 | } 61 | 62 | private func drawConstraint() { 63 | tabBar 64 | .height(constant: tabBarHeight) 65 | 66 | stack 67 | .alignAllEdgesWithSuperview() 68 | } 69 | 70 | } 71 | extension LiquidTabBarController: LTabBarDelegate { 72 | public func tabBar(_ tabBar: LTabBar, didSelectTabAt index: Int) { 73 | 74 | let previousVC = viewControllers[index] 75 | previousVC.willMove(toParent: nil) 76 | previousVC.view.removeFromSuperview() 77 | previousVC.removeFromParent() 78 | previousSelectedIndex = selectIndex 79 | 80 | let vc = viewControllers[index] 81 | delegate?.tabBarController(self, didSelect: vc) 82 | addChild(vc) 83 | selectIndex = index + 1 84 | vc.view.frame = containerView.bounds 85 | containerView.addSubview(vc.view) 86 | vc.didMove(toParent: self) 87 | 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /Sources/LiquidTabBarController/LiquidTabBar/LiquidTabBarItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JDTabBarItem.swift 3 | // JDTabBarController 4 | // 5 | // Created by Jawad Ali on 04/09/2020. 6 | // 7 | 8 | import UIKit 9 | 10 | public class LiquidTabBarItem: UIView { 11 | 12 | //MARK:- Properties 13 | private let image: UIImage 14 | 15 | 16 | 17 | private var imageCenterYConstraint : NSLayoutConstraint? 18 | private var imageWidthConstraint : NSLayoutConstraint? 19 | private var imageHeightConstraint : NSLayoutConstraint? 20 | 21 | public var imageSelectedTintColor: UIColor = .white 22 | 23 | open var imageTintColor: UIColor = #colorLiteral(red: 1, green: 0.6804677844, blue: 0.6831721663, alpha: 1) 24 | open var animationDuration: Double = 0.6 25 | open var badgeColor: UIColor? 26 | open var badgeValue: String? 27 | var imageSize: CGFloat = 25 28 | 29 | //MARK:- Views 30 | 31 | 32 | private lazy var imageView = UIImageViewFactory.createImageView(mode: .scaleAspectFit, image: image, tintColor: imageTintColor) 33 | 34 | //MARK:- initialiser 35 | 36 | init(tabBarItem item: UITabBarItem, tintColor:UIColor = #colorLiteral(red: 1, green: 0.6804677844, blue: 0.6831721663, alpha: 1)) { 37 | 38 | 39 | guard let selecteImage = item.image else { 40 | fatalError("You should set image to all view controllers") 41 | } 42 | 43 | self.imageTintColor = tintColor 44 | self.image = selecteImage.withRenderingMode(.alwaysTemplate) 45 | super.init(frame: .zero) 46 | 47 | setup() 48 | } 49 | 50 | required init?(coder: NSCoder) { 51 | fatalError("init(coder:) has not been implemented") 52 | } 53 | } 54 | //MARK:- setup View 55 | private extension LiquidTabBarItem { 56 | func setup() { 57 | setupViews() 58 | setupConstraints() 59 | } 60 | func setupViews() { 61 | addSubview(imageView) 62 | 63 | translatesAutoresizingMaskIntoConstraints = false 64 | isUserInteractionEnabled = false 65 | } 66 | func setupConstraints() { 67 | 68 | imageView 69 | .centerHorizontallyInSuperview() 70 | 71 | imageCenterYConstraint = imageView.centerYAnchor.constraint(equalTo: self.centerYAnchor) 72 | imageCenterYConstraint?.isActive = true 73 | 74 | imageWidthConstraint = imageView.widthAnchor.constraint(equalToConstant: imageSize) 75 | imageWidthConstraint?.isActive = true 76 | 77 | imageHeightConstraint = imageView.heightAnchor.constraint(equalToConstant: imageSize) 78 | imageHeightConstraint?.isActive = true 79 | 80 | 81 | } 82 | } 83 | 84 | //MARK:- Select / DeSelect item 85 | internal extension LiquidTabBarItem { 86 | func animateTabSelected() { 87 | 88 | imageCenterYConstraint?.constant = -30 89 | imageView.tintColor = imageSelectedTintColor 90 | imageHeightConstraint?.constant = imageSize + 10 91 | imageWidthConstraint?.constant = imageSize + 10 92 | UIView.animate(withDuration: animationDuration) { 93 | self.layoutIfNeeded() 94 | } 95 | } 96 | 97 | func animateTabDeSelect() { 98 | imageCenterYConstraint?.constant = -10 99 | imageView.tintColor = imageTintColor 100 | imageHeightConstraint?.constant = imageSize 101 | imageWidthConstraint?.constant = imageSize 102 | UIView.animate(withDuration: animationDuration, animations: { 103 | self.layoutIfNeeded() 104 | }) { _ in 105 | self.layoutIfNeeded() 106 | } 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /Sources/LiquidTabBarController/LiquidTabBar/Shape.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Shape.swift 3 | // JDTabBarController 4 | // 5 | // Created by Jawad Ali on 11/09/2020. 6 | // Copyright © 2020 Jawad Ali. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | public enum Shape: Int { 11 | case full 12 | case upperRound 13 | case lowerRound 14 | case rounded 15 | 16 | 17 | var maskCorenrs: CACornerMask { 18 | get { 19 | switch self { 20 | case .full: 21 | return [] 22 | case .upperRound: 23 | return [ .layerMaxXMinYCorner, .layerMinXMinYCorner ] 24 | case .lowerRound: 25 | return [.layerMaxXMaxYCorner, .layerMinXMaxYCorner] 26 | case .rounded: 27 | return [.layerMaxXMinYCorner, .layerMinXMaxYCorner, .layerMaxXMaxYCorner, .layerMinXMinYCorner] 28 | } 29 | 30 | } 31 | } 32 | 33 | var layoutMargins: [CGFloat] { 34 | get { 35 | switch self { 36 | case .full, .upperRound: 37 | return [0,0,0,0] 38 | default: 39 | return [5,5,0,10] 40 | } 41 | } 42 | } 43 | 44 | 45 | } 46 | -------------------------------------------------------------------------------- /Sources/LiquidTabBarController/LiquidTabBarController.h: -------------------------------------------------------------------------------- 1 | // 2 | // LiquidTabBarController.h 3 | // LiquidTabBarController 4 | // 5 | // Created by Jawad Ali on 18/09/2020. 6 | // Copyright © 2020 Jawad Ali. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for LiquidTabBarController. 12 | FOUNDATION_EXPORT double LiquidTabBarControllerVersionNumber; 13 | 14 | //! Project version string for LiquidTabBarController. 15 | FOUNDATION_EXPORT const unsigned char LiquidTabBarControllerVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /Tests/LinuxMain.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | import LiquidTabBarControllerTests 4 | 5 | var tests = [XCTestCaseEntry]() 6 | tests += LiquidTabBarControllerTests.allTests() 7 | XCTMain(tests) 8 | -------------------------------------------------------------------------------- /Tests/LiquidTabBarControllerTests/LiquidTabBarControllerTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import LiquidTabBarController 3 | 4 | final class LiquidTabBarControllerTests: XCTestCase { 5 | func testExample() { 6 | // This is an example of a functional test case. 7 | // Use XCTAssert and related functions to verify your tests produce the correct 8 | // results. 9 | XCTAssertEqual(LiquidTabBarController().text, "Hello, World!") 10 | } 11 | 12 | static var allTests = [ 13 | ("testExample", testExample), 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /Tests/LiquidTabBarControllerTests/XCTestManifests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | #if !canImport(ObjectiveC) 4 | public func allTests() -> [XCTestCaseEntry] { 5 | return [ 6 | testCase(LiquidTabBarControllerTests.allTests), 7 | ] 8 | } 9 | #endif 10 | --------------------------------------------------------------------------------