mirror of
https://github.com/ivanvorobei/SwiftUI.git
synced 2026-04-17 14:29:54 +02:00
Merge branch 'master' into master
This commit is contained in:
81
Examples/PureGenius/PureGenius.playground/Contents.swift
Normal file
81
Examples/PureGenius/PureGenius.playground/Contents.swift
Normal file
@@ -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())
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<playground version='5.0' target-platform='ios'>
|
||||||
|
<timeline fileName='timeline.xctimeline'/>
|
||||||
|
</playground>
|
||||||
15
README.md
15
README.md
@@ -1,11 +1,14 @@
|
|||||||
## `SwiftUI` Examples Projects
|
## `SwiftUI` Examples Projects
|
||||||
|
|
||||||
<a href="https://itunes.apple.com/app/id1446635818" target="_blank"><img align="left" src="https://github.com/ivanvorobei/SwiftUI/blob/master/Resources/icon.png" width="92"/></a>
|
<a href="https://itunes.apple.com/app/id1446635818" target="_blank"><img align="left" src="https://github.com/ivanvorobei/SwiftUI/blob/master/Resources/icon.png" width="190"/></a>
|
||||||
|
|
||||||
Examples projects using `SwiftUI` & `Combine`.
|
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.
|
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
|
## Navigate
|
||||||
|
|
||||||
@@ -31,6 +34,7 @@ Interested in UI and animations in `UIKit`? See project [awesome-ios-ui](https:/
|
|||||||
- [Jike](#jike)
|
- [Jike](#jike)
|
||||||
- [Flux](#flux)
|
- [Flux](#flux)
|
||||||
- [SwiftUI Download Progress View](#SwiftUIDownloadView)
|
- [SwiftUI Download Progress View](#SwiftUIDownloadView)
|
||||||
|
- [PureGenius](#puregenius)
|
||||||
|
|
||||||
Also include:
|
Also include:
|
||||||
- Movie
|
- Movie
|
||||||
@@ -45,6 +49,10 @@ Also include:
|
|||||||
|
|
||||||
## Projects
|
## Projects
|
||||||
|
|
||||||
|
#### Cards
|
||||||
|
|
||||||
|
<img src="https://hsto.org/webt/xh/3t/eq/xh3teq68fx1bujdlsgpon4jtijo.gif" width="280">
|
||||||
|
|
||||||
#### Transition And Blur
|
#### Transition And Blur
|
||||||
|
|
||||||
<img src="Resources/TransitionBlur.png" width="700">
|
<img src="Resources/TransitionBlur.png" width="700">
|
||||||
@@ -133,6 +141,9 @@ Also include:
|
|||||||
### SwiftUIDownloadView
|
### SwiftUIDownloadView
|
||||||
|
|
||||||
<img src="Resources/SwiftUIDownloadView.gif" width="294">
|
<img src="Resources/SwiftUIDownloadView.gif" width="294">
|
||||||
|
#### PureGenius
|
||||||
|
|
||||||
|
<img src="Resources/PureGenius.gif" width="260">
|
||||||
|
|
||||||
#### Authors
|
#### Authors
|
||||||
|
|
||||||
|
|||||||
BIN
Resources/Cards.gif
Normal file
BIN
Resources/Cards.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 MiB |
BIN
Resources/PureGenius.gif
Normal file
BIN
Resources/PureGenius.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 686 KiB |
Reference in New Issue
Block a user