mirror of
https://github.com/FBukovina/Atoll.git
synced 2026-10-27 23:24:32 +00:00
82 lines
2.6 KiB
Swift
82 lines
2.6 KiB
Swift
//
|
|
// AnimatedFace.swift
|
|
//
|
|
// Created by Harsh Vardhan Goswami on 04/08/24.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct MinimalFaceFeatures: View {
|
|
@State private var isBlinking = false
|
|
@State var height:CGFloat = 20;
|
|
@State var width:CGFloat = 30;
|
|
|
|
var body: some View {
|
|
VStack(spacing: 4) { // Adjusted spacing to fit within 30x30
|
|
// Eyes
|
|
HStack(spacing: 4) { // Adjusted spacing to fit within 30x30
|
|
Eye(isBlinking: $isBlinking)
|
|
Eye(isBlinking: $isBlinking)
|
|
}
|
|
|
|
// Nose and mouth combined
|
|
VStack(spacing: 2) { // Adjusted spacing to fit within 30x30
|
|
// Nose
|
|
RoundedRectangle(cornerRadius: 2)
|
|
.fill(Color.white)
|
|
.frame(width: 3, height: 4)
|
|
|
|
// Mouth (happy)
|
|
GeometryReader { geometry in
|
|
Path { path in
|
|
let width = geometry.size.width
|
|
let height = geometry.size.height
|
|
path.move(to: CGPoint(x: 0, y: height / 2))
|
|
path.addQuadCurve(to: CGPoint(x: width, y: height / 2), control: CGPoint(x: width / 2, y: height))
|
|
}
|
|
.stroke(Color.white, lineWidth: 2)
|
|
}
|
|
.frame(width: 14, height: 10)
|
|
}
|
|
}
|
|
.frame(width: self.width, height: self.height) // Maximum size of face
|
|
.onAppear {
|
|
startBlinking()
|
|
}
|
|
}
|
|
|
|
func startBlinking() {
|
|
Timer.scheduledTimer(withTimeInterval: 3, repeats: true) { _ in
|
|
withAnimation(.spring(duration: 0.2)) {
|
|
isBlinking = true
|
|
}
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
|
|
withAnimation(.spring(duration: 0.2)) {
|
|
isBlinking = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
struct Eye: View {
|
|
@Binding var isBlinking: Bool
|
|
|
|
var body: some View {
|
|
RoundedRectangle(cornerRadius: 10)
|
|
.fill(Color.white)
|
|
.frame(width: 4, height: isBlinking ? 1 : 4)
|
|
.frame(maxWidth: 15, maxHeight: 15) // Adjusted max size
|
|
.animation(.easeInOut(duration: 0.1), value: isBlinking)
|
|
}
|
|
}
|
|
|
|
struct MinimalFaceFeatures_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
ZStack {
|
|
Color.black
|
|
MinimalFaceFeatures()
|
|
}
|
|
.previewLayout(.fixed(width: 60, height: 60)) // Adjusted preview size for better visibility
|
|
}
|
|
}
|