├── .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 | [](https://travis-ci.org/jwd-ali/RingPieChart)
6 | [](https://cocoapods.org/pods/RingPieChart)
7 | [](https://github.com/Carthage/Carthage)
8 | [](https://cocoapods.org/pods/RingPieChart)
9 | [](https://cocoapods.org/pods/RingPieChart)
10 | [](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 |
--------------------------------------------------------------------------------