diff --git a/Examples/PureGenius/PureGenius.playground/Contents.swift b/Examples/PureGenius/PureGenius.playground/Contents.swift
new file mode 100644
index 0000000..d64a5eb
--- /dev/null
+++ b/Examples/PureGenius/PureGenius.playground/Contents.swift
@@ -0,0 +1,81 @@
+import PlaygroundSupport
+import SwiftUI
+
+struct PureGeniusView: View {
+ var body: some View {
+ ZStack {
+ Rectangle()
+ .fill()
+ .foregroundColor(.init(hue: 0.57, saturation: 0.25, brightness: 1))
+ Circle()
+ .frame(width: 320, height: 320)
+ .foregroundColor(.init(hue: 0.8, saturation: 0.25, brightness: 0.75))
+ VStack {
+ PGWordView(word: ["P", "U", "R", "E"]).offset(x: 0, y: 20)
+ PGWordView(word: ["G", "E", "N", "I", "U", "S"]).offset(x: 0, y: -20)
+ }
+ }
+ }
+}
+
+struct PGWordView: View {
+ var word: [String]
+ var body: some View {
+ HStack {
+ ForEach(word.identified(by: \.self)) { letter in
+ PGLetterView(text: letter)
+ }
+ }
+ }
+}
+
+struct PGLetterView: View {
+ var text: String
+ var body: some View {
+ ZStack {
+ MovingLetterView(text: text, color: .init(hue: 0.14, saturation: 0.56, brightness: 0.98))
+ MovingLetterView(text: text, color: .init(hue: 0.37, saturation: 0.52, brightness: 0.7))
+ }
+ }
+}
+
+struct MovingLetterView: View {
+ var text: String
+ var color: Color
+
+ @State var position: CGPoint = .zero
+ @State var activeTimer: Timer = nil
+
+ private let animationDuration: Double = 2
+ private let maxOffset: CGFloat = 10
+ private var timer: Timer {
+ return Timer.scheduledTimer(withTimeInterval: self.animationDuration * 0.25, repeats: true) {_ in
+ let x = CGFloat(arc4random_uniform(UInt32(self.maxOffset))) - (self.maxOffset / 2)
+ let y = CGFloat(arc4random_uniform(UInt32(self.maxOffset))) - (self.maxOffset / 2)
+ self.position = CGPoint.init(x: x, y: y)
+ }
+ }
+
+ var body: some View {
+ Text(text)
+ .color(self.color)
+ .font(Font.custom("Baskerville-Bold", size: 40))
+ .bold()
+ .offset(by: self.position)
+ .animation(.basic(duration: self.animationDuration, curve: .easeInOut))
+ .onAppear {
+ self.activeTimer = self.timer
+ }
+ .onDisappear {
+ self.activeTimer = nil
+ }
+ }
+}
+
+extension View {
+ public func offset(by offset: CGPoint) -> Self.Modified<_OffsetEffect> {
+ self.offset(x: offset.x, y: offset.y)
+ }
+}
+
+PlaygroundPage.current.liveView = UIHostingController(rootView: PureGeniusView())
diff --git a/Examples/PureGenius/PureGenius.playground/contents.xcplayground b/Examples/PureGenius/PureGenius.playground/contents.xcplayground
new file mode 100644
index 0000000..5da2641
--- /dev/null
+++ b/Examples/PureGenius/PureGenius.playground/contents.xcplayground
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 01b9a05..70bcf45 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,14 @@
## `SwiftUI` Examples Projects
-
+
Examples projects using `SwiftUI` & `Combine`.
Include Layout, UI, Animations, Gestures, Draw and Data. See projects files in `Examples` folder. If you have project, make a pull request or create issue with link to repo.
-Interested in UI and animations in `UIKit`? See project [awesome-ios-ui](https://github.com/ivanvorobei/awesome-ios-ui).
+Interested in UI and animations in `UIKit`?
+See project [awesome-ios-ui](https://github.com/ivanvorobei/awesome-ios-ui) or visit
+
+[](https://xcode-shop.com/ui-elements)
## Navigate
@@ -31,6 +34,7 @@ Interested in UI and animations in `UIKit`? See project [awesome-ios-ui](https:/
- [Jike](#jike)
- [Flux](#flux)
- [SwiftUI Download Progress View](#SwiftUIDownloadView)
+- [PureGenius](#puregenius)
Also include:
- Movie
@@ -45,6 +49,10 @@ Also include:
## Projects
+#### Cards
+
+
+
#### Transition And Blur
@@ -133,6 +141,9 @@ Also include:
### SwiftUIDownloadView
+#### PureGenius
+
+
#### Authors
diff --git a/Resources/Cards.gif b/Resources/Cards.gif
new file mode 100644
index 0000000..0aef115
Binary files /dev/null and b/Resources/Cards.gif differ
diff --git a/Resources/PureGenius.gif b/Resources/PureGenius.gif
new file mode 100644
index 0000000..f538a1d
Binary files /dev/null and b/Resources/PureGenius.gif differ