Skip to content

Commit 102d207

Browse files
blob menu basic implementation
1 parent 40355b3 commit 102d207

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+1992
-66
lines changed

.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata

-7
This file was deleted.

BlobMenu.xcodeproj/project.pbxproj

+136-4
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,60 @@
88

99
/* Begin PBXBuildFile section */
1010
3908002824474A3800E7727C /* BlobMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = 3908002624474A3800E7727C /* BlobMenu.h */; settings = {ATTRIBUTES = (Public, ); }; };
11-
3908005E2447D27F00E7727C /* BlobMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3908005D2447D27F00E7727C /* BlobMenuView.swift */; };
11+
393AAE9E246053B60059752A /* Transitions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE82246053B50059752A /* Transitions.swift */; };
12+
393AAE9F246053B60059752A /* BlobMenuEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE84246053B50059752A /* BlobMenuEnvironment.swift */; };
13+
393AAEA0246053B60059752A /* MenuItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE85246053B50059752A /* MenuItem.swift */; };
14+
393AAEA1246053B60059752A /* StickyEffectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE87246053B50059752A /* StickyEffectView.swift */; };
15+
393AAEA2246053B60059752A /* HamburgerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE88246053B50059752A /* HamburgerView.swift */; };
16+
393AAEA3246053B60059752A /* MenuItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE89246053B50059752A /* MenuItemView.swift */; };
17+
393AAEA4246053B60059752A /* BlobMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE8A246053B50059752A /* BlobMenuView.swift */; };
18+
393AAEA5246053B60059752A /* BackgroundView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE8B246053B50059752A /* BackgroundView.swift */; };
19+
393AAEA6246053B60059752A /* StickyPathGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE8C246053B50059752A /* StickyPathGenerator.swift */; };
20+
393AAEA7246053B60059752A /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE8D246053B50059752A /* Theme.swift */; };
21+
393AAEA8246053B60059752A /* CGSize+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE8F246053B50059752A /* CGSize+Extensions.swift */; };
22+
393AAEA9246053B60059752A /* UIGestureRecognizer+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE90246053B50059752A /* UIGestureRecognizer+Extensions.swift */; };
23+
393AAEAA246053B60059752A /* UIWindow+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE91246053B50059752A /* UIWindow+Extensions.swift */; };
24+
393AAEAB246053B60059752A /* CGPoint+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE92246053B50059752A /* CGPoint+Extensions.swift */; };
25+
393AAEAC246053B60059752A /* Collection+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE93246053B50059752A /* Collection+Extensions.swift */; };
26+
393AAEAD246053B60059752A /* Comparable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE94246053B50059752A /* Comparable+Extensions.swift */; };
27+
393AAEAE246053B60059752A /* ScaleKeyframesAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE96246053B50059752A /* ScaleKeyframesAnimation.swift */; };
28+
393AAEAF246053B60059752A /* ViewSwapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE97246053B50059752A /* ViewSwapper.swift */; };
29+
393AAEB0246053B60059752A /* SizeKeyframesAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE98246053B50059752A /* SizeKeyframesAnimation.swift */; };
30+
393AAEB1246053B60059752A /* KayframesAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE99246053B50059752A /* KayframesAnimation.swift */; };
31+
393AAEB2246053B60059752A /* Then.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE9A246053B50059752A /* Then.swift */; };
32+
393AAEB3246053B60059752A /* AnimationCompletion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE9B246053B50059752A /* AnimationCompletion.swift */; };
33+
393AAEB4246053B60059752A /* BezierUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE9C246053B50059752A /* BezierUtilities.swift */; };
34+
393AAEB5246053B60059752A /* CommonUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393AAE9D246053B50059752A /* CommonUtilities.swift */; };
1235
/* End PBXBuildFile section */
1336

1437
/* Begin PBXFileReference section */
1538
3908002324474A3800E7727C /* BlobMenu.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BlobMenu.framework; sourceTree = BUILT_PRODUCTS_DIR; };
1639
3908002624474A3800E7727C /* BlobMenu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BlobMenu.h; sourceTree = "<group>"; };
1740
3908002724474A3800E7727C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
18-
3908005D2447D27F00E7727C /* BlobMenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlobMenuView.swift; sourceTree = "<group>"; };
41+
393AAE82246053B50059752A /* Transitions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Transitions.swift; sourceTree = "<group>"; };
42+
393AAE84246053B50059752A /* BlobMenuEnvironment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlobMenuEnvironment.swift; sourceTree = "<group>"; };
43+
393AAE85246053B50059752A /* MenuItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuItem.swift; sourceTree = "<group>"; };
44+
393AAE87246053B50059752A /* StickyEffectView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickyEffectView.swift; sourceTree = "<group>"; };
45+
393AAE88246053B50059752A /* HamburgerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HamburgerView.swift; sourceTree = "<group>"; };
46+
393AAE89246053B50059752A /* MenuItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuItemView.swift; sourceTree = "<group>"; };
47+
393AAE8A246053B50059752A /* BlobMenuView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlobMenuView.swift; sourceTree = "<group>"; };
48+
393AAE8B246053B50059752A /* BackgroundView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BackgroundView.swift; sourceTree = "<group>"; };
49+
393AAE8C246053B50059752A /* StickyPathGenerator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickyPathGenerator.swift; sourceTree = "<group>"; };
50+
393AAE8D246053B50059752A /* Theme.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = "<group>"; };
51+
393AAE8F246053B50059752A /* CGSize+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGSize+Extensions.swift"; sourceTree = "<group>"; };
52+
393AAE90246053B50059752A /* UIGestureRecognizer+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIGestureRecognizer+Extensions.swift"; sourceTree = "<group>"; };
53+
393AAE91246053B50059752A /* UIWindow+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIWindow+Extensions.swift"; sourceTree = "<group>"; };
54+
393AAE92246053B50059752A /* CGPoint+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGPoint+Extensions.swift"; sourceTree = "<group>"; };
55+
393AAE93246053B50059752A /* Collection+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Collection+Extensions.swift"; sourceTree = "<group>"; };
56+
393AAE94246053B50059752A /* Comparable+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Comparable+Extensions.swift"; sourceTree = "<group>"; };
57+
393AAE96246053B50059752A /* ScaleKeyframesAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScaleKeyframesAnimation.swift; sourceTree = "<group>"; };
58+
393AAE97246053B50059752A /* ViewSwapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewSwapper.swift; sourceTree = "<group>"; };
59+
393AAE98246053B50059752A /* SizeKeyframesAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SizeKeyframesAnimation.swift; sourceTree = "<group>"; };
60+
393AAE99246053B50059752A /* KayframesAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KayframesAnimation.swift; sourceTree = "<group>"; };
61+
393AAE9A246053B50059752A /* Then.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Then.swift; sourceTree = "<group>"; };
62+
393AAE9B246053B50059752A /* AnimationCompletion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimationCompletion.swift; sourceTree = "<group>"; };
63+
393AAE9C246053B50059752A /* BezierUtilities.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BezierUtilities.swift; sourceTree = "<group>"; };
64+
393AAE9D246053B50059752A /* CommonUtilities.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommonUtilities.swift; sourceTree = "<group>"; };
1965
/* End PBXFileReference section */
2066

2167
/* Begin PBXFrameworksBuildPhase section */
@@ -48,13 +94,76 @@
4894
3908002524474A3800E7727C /* Sources */ = {
4995
isa = PBXGroup;
5096
children = (
51-
3908005D2447D27F00E7727C /* BlobMenuView.swift */,
97+
393AAE86246053B50059752A /* Views */,
98+
393AAE81246053B50059752A /* Effects */,
99+
393AAE8E246053B50059752A /* Extensions */,
100+
393AAE83246053B50059752A /* Models */,
101+
393AAE95246053B50059752A /* Utilities */,
52102
3908002624474A3800E7727C /* BlobMenu.h */,
53103
3908002724474A3800E7727C /* Info.plist */,
54104
);
55105
path = Sources;
56106
sourceTree = "<group>";
57107
};
108+
393AAE81246053B50059752A /* Effects */ = {
109+
isa = PBXGroup;
110+
children = (
111+
393AAE82246053B50059752A /* Transitions.swift */,
112+
);
113+
path = Effects;
114+
sourceTree = "<group>";
115+
};
116+
393AAE83246053B50059752A /* Models */ = {
117+
isa = PBXGroup;
118+
children = (
119+
393AAE84246053B50059752A /* BlobMenuEnvironment.swift */,
120+
393AAE85246053B50059752A /* MenuItem.swift */,
121+
);
122+
path = Models;
123+
sourceTree = "<group>";
124+
};
125+
393AAE86246053B50059752A /* Views */ = {
126+
isa = PBXGroup;
127+
children = (
128+
393AAE87246053B50059752A /* StickyEffectView.swift */,
129+
393AAE88246053B50059752A /* HamburgerView.swift */,
130+
393AAE89246053B50059752A /* MenuItemView.swift */,
131+
393AAE8A246053B50059752A /* BlobMenuView.swift */,
132+
393AAE8B246053B50059752A /* BackgroundView.swift */,
133+
393AAE8C246053B50059752A /* StickyPathGenerator.swift */,
134+
393AAE8D246053B50059752A /* Theme.swift */,
135+
);
136+
path = Views;
137+
sourceTree = "<group>";
138+
};
139+
393AAE8E246053B50059752A /* Extensions */ = {
140+
isa = PBXGroup;
141+
children = (
142+
393AAE8F246053B50059752A /* CGSize+Extensions.swift */,
143+
393AAE90246053B50059752A /* UIGestureRecognizer+Extensions.swift */,
144+
393AAE91246053B50059752A /* UIWindow+Extensions.swift */,
145+
393AAE92246053B50059752A /* CGPoint+Extensions.swift */,
146+
393AAE93246053B50059752A /* Collection+Extensions.swift */,
147+
393AAE94246053B50059752A /* Comparable+Extensions.swift */,
148+
);
149+
path = Extensions;
150+
sourceTree = "<group>";
151+
};
152+
393AAE95246053B50059752A /* Utilities */ = {
153+
isa = PBXGroup;
154+
children = (
155+
393AAE96246053B50059752A /* ScaleKeyframesAnimation.swift */,
156+
393AAE97246053B50059752A /* ViewSwapper.swift */,
157+
393AAE98246053B50059752A /* SizeKeyframesAnimation.swift */,
158+
393AAE99246053B50059752A /* KayframesAnimation.swift */,
159+
393AAE9A246053B50059752A /* Then.swift */,
160+
393AAE9B246053B50059752A /* AnimationCompletion.swift */,
161+
393AAE9C246053B50059752A /* BezierUtilities.swift */,
162+
393AAE9D246053B50059752A /* CommonUtilities.swift */,
163+
);
164+
path = Utilities;
165+
sourceTree = "<group>";
166+
};
58167
/* End PBXGroup section */
59168

60169
/* Begin PBXHeadersBuildPhase section */
@@ -135,7 +244,30 @@
135244
isa = PBXSourcesBuildPhase;
136245
buildActionMask = 2147483647;
137246
files = (
138-
3908005E2447D27F00E7727C /* BlobMenuView.swift in Sources */,
247+
393AAEA5246053B60059752A /* BackgroundView.swift in Sources */,
248+
393AAEB3246053B60059752A /* AnimationCompletion.swift in Sources */,
249+
393AAEAB246053B60059752A /* CGPoint+Extensions.swift in Sources */,
250+
393AAEA6246053B60059752A /* StickyPathGenerator.swift in Sources */,
251+
393AAEAF246053B60059752A /* ViewSwapper.swift in Sources */,
252+
393AAEA9246053B60059752A /* UIGestureRecognizer+Extensions.swift in Sources */,
253+
393AAE9E246053B60059752A /* Transitions.swift in Sources */,
254+
393AAEAE246053B60059752A /* ScaleKeyframesAnimation.swift in Sources */,
255+
393AAEB1246053B60059752A /* KayframesAnimation.swift in Sources */,
256+
393AAEA0246053B60059752A /* MenuItem.swift in Sources */,
257+
393AAEAA246053B60059752A /* UIWindow+Extensions.swift in Sources */,
258+
393AAEB2246053B60059752A /* Then.swift in Sources */,
259+
393AAEA7246053B60059752A /* Theme.swift in Sources */,
260+
393AAEB4246053B60059752A /* BezierUtilities.swift in Sources */,
261+
393AAEA2246053B60059752A /* HamburgerView.swift in Sources */,
262+
393AAEA1246053B60059752A /* StickyEffectView.swift in Sources */,
263+
393AAEA4246053B60059752A /* BlobMenuView.swift in Sources */,
264+
393AAEA3246053B60059752A /* MenuItemView.swift in Sources */,
265+
393AAE9F246053B60059752A /* BlobMenuEnvironment.swift in Sources */,
266+
393AAEAD246053B60059752A /* Comparable+Extensions.swift in Sources */,
267+
393AAEAC246053B60059752A /* Collection+Extensions.swift in Sources */,
268+
393AAEB0246053B60059752A /* SizeKeyframesAnimation.swift in Sources */,
269+
393AAEA8246053B60059752A /* CGSize+Extensions.swift in Sources */,
270+
393AAEB5246053B60059752A /* CommonUtilities.swift in Sources */,
139271
);
140272
runOnlyForDeploymentPostprocessing = 0;
141273
};
Original file line numberDiff line numberDiff line change
@@ -1,98 +1,119 @@
11
{
22
"images" : [
33
{
4+
"size" : "20x20",
45
"idiom" : "iphone",
5-
"scale" : "2x",
6-
"size" : "20x20"
6+
"filename" : "icon-40.png",
7+
"scale" : "2x"
78
},
89
{
10+
"size" : "20x20",
911
"idiom" : "iphone",
10-
"scale" : "3x",
11-
"size" : "20x20"
12+
"filename" : "icon-60.png",
13+
"scale" : "3x"
1214
},
1315
{
16+
"size" : "29x29",
1417
"idiom" : "iphone",
15-
"scale" : "2x",
16-
"size" : "29x29"
18+
"filename" : "icon-58.png",
19+
"scale" : "2x"
1720
},
1821
{
22+
"size" : "29x29",
1923
"idiom" : "iphone",
20-
"scale" : "3x",
21-
"size" : "29x29"
24+
"filename" : "icon-87.png",
25+
"scale" : "3x"
2226
},
2327
{
28+
"size" : "40x40",
2429
"idiom" : "iphone",
25-
"scale" : "2x",
26-
"size" : "40x40"
30+
"filename" : "icon-80.png",
31+
"scale" : "2x"
2732
},
2833
{
34+
"size" : "40x40",
2935
"idiom" : "iphone",
30-
"scale" : "3x",
31-
"size" : "40x40"
36+
"filename" : "icon-120.png",
37+
"scale" : "3x"
3238
},
3339
{
40+
"size" : "60x60",
3441
"idiom" : "iphone",
35-
"scale" : "2x",
36-
"size" : "60x60"
42+
"filename" : "icon-120.png",
43+
"scale" : "2x"
3744
},
3845
{
46+
"size" : "60x60",
3947
"idiom" : "iphone",
40-
"scale" : "3x",
41-
"size" : "60x60"
48+
"filename" : "icon-180.png",
49+
"scale" : "3x"
4250
},
4351
{
52+
"size" : "20x20",
4453
"idiom" : "ipad",
45-
"scale" : "1x",
46-
"size" : "20x20"
54+
"filename" : "icon-20.png",
55+
"scale" : "1x"
4756
},
4857
{
58+
"size" : "20x20",
4959
"idiom" : "ipad",
50-
"scale" : "2x",
51-
"size" : "20x20"
60+
"filename" : "icon-40.png",
61+
"scale" : "2x"
5262
},
5363
{
64+
"size" : "29x29",
5465
"idiom" : "ipad",
55-
"scale" : "1x",
56-
"size" : "29x29"
66+
"filename" : "icon-29.png",
67+
"scale" : "1x"
5768
},
5869
{
70+
"size" : "29x29",
5971
"idiom" : "ipad",
60-
"scale" : "2x",
61-
"size" : "29x29"
72+
"filename" : "icon-58.png",
73+
"scale" : "2x"
6274
},
6375
{
76+
"size" : "40x40",
6477
"idiom" : "ipad",
65-
"scale" : "1x",
66-
"size" : "40x40"
78+
"filename" : "icon-40.png",
79+
"scale" : "1x"
6780
},
6881
{
82+
"size" : "40x40",
6983
"idiom" : "ipad",
70-
"scale" : "2x",
71-
"size" : "40x40"
84+
"filename" : "icon-80.png",
85+
"scale" : "2x"
7286
},
7387
{
88+
"size" : "76x76",
7489
"idiom" : "ipad",
75-
"scale" : "1x",
76-
"size" : "76x76"
90+
"filename" : "icon-76.png",
91+
"scale" : "1x"
7792
},
7893
{
94+
"size" : "76x76",
7995
"idiom" : "ipad",
80-
"scale" : "2x",
81-
"size" : "76x76"
96+
"filename" : "icon-152.png",
97+
"scale" : "2x"
8298
},
8399
{
100+
"size" : "83.5x83.5",
84101
"idiom" : "ipad",
85-
"scale" : "2x",
86-
"size" : "83.5x83.5"
102+
"filename" : "icon-167.png",
103+
"scale" : "2x"
87104
},
88105
{
106+
"size" : "1024x1024",
89107
"idiom" : "ios-marketing",
90-
"scale" : "1x",
91-
"size" : "1024x1024"
108+
"filename" : "Ramotion.png",
109+
"scale" : "1x"
92110
}
93111
],
94112
"info" : {
95-
"author" : "xcode",
96-
"version" : 1
113+
"version" : 1,
114+
"author" : "xcode"
115+
},
116+
"properties" : {
117+
"pre-rendered" : true
97118
}
98-
}
119+
}
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "Icon_Bitcoin_black.pdf",
5+
"idiom" : "universal"
6+
}
7+
],
8+
"info" : {
9+
"author" : "xcode",
10+
"version" : 1
11+
},
12+
"properties" : {
13+
"preserves-vector-representation" : true
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "Icon_Bitcoin_gray.pdf",
5+
"idiom" : "universal"
6+
}
7+
],
8+
"info" : {
9+
"author" : "xcode",
10+
"version" : 1
11+
},
12+
"properties" : {
13+
"preserves-vector-representation" : true
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"images" : [
3+
{
4+
"filename" : "Icon_Exchange_black.pdf",
5+
"idiom" : "universal"
6+
}
7+
],
8+
"info" : {
9+
"author" : "xcode",
10+
"version" : 1
11+
},
12+
"properties" : {
13+
"preserves-vector-representation" : true
14+
}
15+
}

0 commit comments

Comments
 (0)