ContentView.swift
//
// ContentView.swift
// SwiftUIProject
//
// Created by Cairocoders
//
import SwiftUI
struct ContentView: View {
@State var show = false
var body: some View {
HStack(spacing: 20){
VStack(alignment: .leading,spacing: 12){
Button(action: {
self.show.toggle()
}) {
Image("feedback")
.resizable().frame(width: 300, height: 150)
}
}
}.sheet(isPresented: $show) {
feedback()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
feedback.swift
//
// feedback.swift
// SwiftUIProject
//
// Created by Cairocoders
//
import SwiftUI
struct feedback: View {
let reactions = ["😣" , "☹️" , "😐" , "🙂" , "😍"]
@State var selectedEmoji: String = ""
@State private var text = "Your Feedback"
var body: some View {
ZStack {
Color("Color1")
.ignoresSafeArea()
VStack {
HStack {
Text("Cairocoders")
Spacer()
Text("Your feedback")
.font(.title)
}.padding(.bottom, 10)
Divider()
VStack {
Text("We would like your feedback to imporve our service")
.font(.system(size: 19))
.foregroundColor(Color.blue)
.multilineTextAlignment(.center)
Text("it will help us to serve you better")
.font(.system(size: 16))
.foregroundColor(Color.blue)
.padding(.top,5)
HStack(alignment: .center, spacing: 10){
ForEach(reactions , id: \.self) { reaction in
ZStack {
emojiView(selectedEmoji: $selectedEmoji, emojiText: reaction)
.frame(width: 50 , height: 50)
.background(Color.white)
.overlay(
Circle()
.stroke(Color.init(red: 236/255, green: 61/255, blue: 107/255), lineWidth: selectedEmoji == reaction ? 6 : 0)
)
.cornerRadius(25)
.shadow(color: Color.init(red: 0, green: 0, blue: 0, opacity: 0.1) , radius: 10 , x: 0 , y: 15)
.opacity(selectedEmoji == "" || selectedEmoji == reaction ? 1 : 0.5)
if selectedEmoji == reaction {
Image("check")
.resizable()
.frame(width: 20, height: 20)
.offset(x: 18, y: -18)
}
}
}
} //: HSTACK
.padding(.top , 20)
.padding(.bottom, 20)
if selectedEmoji != "" {
Text(getResponseWithEmoji(selectedEmoji))
.font(.system(size: 17))
.foregroundColor(Color.pink)
}
} //end VStack
Text("Please leave your feedback below:")
Divider()
VStack {
TextEditor(text: $text)
.frame(width: 300, height: 120)
.lineSpacing(10)
.autocapitalization(.words)
.disableAutocorrection(true)
.padding()
}.overlay(
RoundedRectangle(cornerRadius: 25)
.stroke(Color.yellow, lineWidth: 5)
)
.padding()
Button {
} label: {
ZStack {
Capsule()
.fill(Color.pink)
.frame(width: 160, height: 45)
Text("Send feedBack")
.font(.system(size: 20))
.foregroundColor(Color.white)
}
.opacity(selectedEmoji == "" ? 0.7 : 1)
}
}
.padding(30)
.frame(width: 370)
.background(Color.white)
.cornerRadius(20)
.shadow(color: Color.init(red: 0, green: 0, blue: 0, opacity: 0.1) , radius: 20 , x: 10 , y: 20)
}
}
func getResponseWithEmoji(_ emoji: String) -> String {
switch selectedEmoji {
case "😣":
return "Not satisfied"
case "☹️":
return "Somewhat satisfied"
case "😐":
return "Satisfied"
case "🙂":
return "Very satisfied"
case "😍":
return "Satisfied enought to tell others"
default:
return ""
}
}
}
struct feedback_Previews: PreviewProvider {
static var previews: some View {
feedback()
}
}
emojiView.swift
//
// emojiView.swift
// SwiftUIProject
//
// Created by Cairocoders
//
import SwiftUI
struct emojiView: View {
@Binding var selectedEmoji: String
var emojiText: String
var body: some View {
Button {
withAnimation(.spring(response:0.3, dampingFraction: 0.5)){
selectedEmoji = emojiText
}
} label:{
Text(emojiText)
.font(Font.custom("Avenir", size: 23))
}
}
}