I can't upload the image assets I use here in gist so I'll just upload it on imgur.com
Last active
November 18, 2022 04:00
-
-
Save plskz/e6b1ccccd6aadbe43c1e7eb14048e772 to your computer and use it in GitHub Desktop.
Tindog SwiftUI
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import SwiftUI | |
import PlaygroundSupport | |
struct User { | |
var name: String | |
var desc: String | |
var img: UIImage | |
} | |
struct ContentView: View { | |
@State private var count: Int = 0 | |
var body: some View { | |
VStack { | |
Navbar() | |
Spacer() | |
DisplayImage(count: $count) | |
Spacer() | |
Selections(count: $count) | |
Spacer() | |
} | |
.padding(20) | |
.border(.pink) | |
} | |
} | |
struct Navbar: View { | |
var body: some View { | |
HStack { | |
Image(systemName: "star") | |
Spacer() | |
Image(systemName: "pawprint.fill") | |
.foregroundColor(.pink) | |
Spacer() | |
Image(systemName: "paperplane") | |
} | |
.font(.system(size: 32)) | |
} | |
} | |
struct DisplayImage: View { | |
@Binding var count: Int | |
let dogs: [User] = [ | |
User(name: "Rudy", desc: "How you doin", img: #imageLiteral(resourceName: "Rudy2.jpg")), | |
User(name: "Diego", desc: "Can you be my dora", img: #imageLiteral(resourceName: "Diego.jpg")), | |
User(name: "Mona", desc: "Shy", img: #imageLiteral(resourceName: "Moana.jpg")) | |
] | |
var body: some View { | |
ZStack (alignment: .bottomLeading) { | |
Image(uiImage: dogs[count].img) | |
.resizable() | |
.aspectRatio(contentMode: .fill) | |
.frame(width: 800, height: 800) | |
.clipped() | |
VStack (alignment: .leading){ | |
Text(dogs[count].name) | |
.font(.system(size: 64, weight: .heavy)) | |
Text(dogs[count].desc) | |
.font(.system(size: 32, weight: .heavy)) | |
} | |
.padding() | |
.foregroundColor(.white) | |
} | |
} | |
} | |
struct Selections: View { | |
@Binding var count: Int | |
var body: some View { | |
HStack { | |
Button { | |
swipeUser() | |
} label: { | |
Image(systemName: "xmark.circle") | |
} | |
Button { | |
swipeUser() | |
} label: { | |
Image(systemName: "checkmark.circle") | |
} | |
} | |
.font(.system(size: 64)) | |
} | |
func swipeUser() { | |
count += 1 | |
if count > 2 { | |
count = 0 | |
} | |
} | |
} | |
PlaygroundPage.current.setLiveView(ContentView()) | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import SwiftUI | |
import PlaygroundSupport | |
struct User: Hashable { | |
var name: String | |
var desc: String | |
var img: UIImage | |
} | |
struct ContentView: View { | |
private var dogs: [User] = [ | |
User(name: "Rudy", desc: "How you doin", img: #imageLiteral(resourceName: "Rudy2.jpg")), | |
User(name: "Diego", desc: "Can you be my dora", img: #imageLiteral(resourceName: "Diego.jpg")), | |
User(name: "Mona", desc: "Shy", img: #imageLiteral(resourceName: "Moana.jpg")) | |
].reversed() | |
var body: some View { | |
VStack { | |
Navbar() | |
.padding() | |
Spacer() | |
ZStack { | |
ForEach(dogs, id: \.self) { dog in | |
CardView(name: dog.name, desc: dog.desc, img: dog.img) | |
} | |
} | |
Spacer() | |
} | |
} | |
} | |
struct Navbar: View { | |
var body: some View { | |
HStack { | |
Image(systemName: "star") | |
Spacer() | |
Image(systemName: "pawprint.fill") | |
.foregroundColor(.pink) | |
Spacer() | |
Image(systemName: "paperplane") | |
} | |
.font(.system(size: 32)) | |
} | |
} | |
struct CardView: View { | |
@State private var offset = CGSize.zero | |
@State private var color: Color = .black | |
var name: String | |
var desc: String | |
var img: UIImage | |
var body: some View { | |
ZStack (alignment: .bottomLeading) { | |
Image(uiImage: img) | |
.resizable() | |
.aspectRatio(contentMode: .fill) | |
.frame(width: 510, height: 710) | |
.clipped() | |
.cornerRadius(4) | |
.shadow(radius: 4) | |
VStack (alignment: .leading){ | |
Text(name) | |
.font(.system(size: 64, weight: .heavy)) | |
Text(desc) | |
.font(.system(size: 32, weight: .heavy)) | |
} | |
.padding() | |
.foregroundColor(.white) | |
} | |
.offset(x: offset.width * 1, y: offset.height * 0.4) | |
.rotationEffect(.degrees(Double(offset.width / 40))) | |
.gesture( | |
DragGesture() | |
.onChanged { gesture in | |
offset = gesture.translation | |
} | |
.onEnded { gesture in | |
withAnimation { | |
swipeCard(width: offset.width) | |
} | |
} | |
) | |
} | |
func swipeCard(width: CGFloat) { | |
switch width { | |
case -500...(-150): | |
print("\(name) removed") | |
offset = CGSize(width: -810, height: 0) | |
case 150...500: | |
print("\(name) added") | |
offset = CGSize(width: 810, height: 0) | |
default: | |
offset = .zero | |
} | |
} | |
} | |
PlaygroundPage.current.setLiveView(ContentView()) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment