ContentView.swift
//
// ContentView.swift
// swiftuidev15ios
//
// Created by Cairocoders
//
import SwiftUI
struct ContentView: View {
@State var selected = "Home"
var body: some View {
NavigationView{
VStack{
if self.selected == "Home"{
Home()
}
else if self.selected == "Wishlist"{
GeometryReader{_ in
Text("Wishlist")
}
}
else{
GeometryReader{_ in
Text("Cart")
}
}
CustomTabView(selected: $selected)
}
.navigationBarTitle("")
.navigationBarHidden(true)
.navigationBarBackButtonHidden(true)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct CustomTabView : View {
@Binding var selected : String
var body : some View{
HStack{
ForEach(tabs,id: \.self){i in
VStack(spacing: 10){
Capsule()
.fill(Color.clear)
.frame(height: 5)
.overlay(
Capsule().fill(self.selected == i ? Color("Color") : Color.clear).frame(width: 55, height: 5)
)
Button(action: {
self.selected = i
}) {
VStack{
Image(i).renderingMode(.original)
Text(i).foregroundColor(.black)
}
}
}
}
}.padding(.horizontal)
}
}
Home.swift
//
// Home.swift
// swiftuidev15ios
//
// Created by Cairocoders
//
import SwiftUI
struct Home : View {
@State var txt = ""
var body : some View{
VStack(spacing: 15){
HStack(spacing: 12){
Image("photo1").renderingMode(.original).resizable().frame(width: 30, height: 30)
Text("Cairocoders").font(.body)
Spacer()
Button(action: {
}) {
Image(systemName: "cart").renderingMode(.original)
}
}
ScrollView(.vertical, showsIndicators: false) {
VStack(spacing: 15){
HStack(spacing: 15){
HStack{
Image(systemName: "magnifyingglass").font(.body)
TextField("Search Groceries", text: $txt)
}.padding(10)
.background(Color("Color1"))
.cornerRadius(20)
Button(action: {
}) {
Image(systemName: "mic").renderingMode(.original)
}
}
Image("banner")
.resizable()
.frame(height: 170)
.cornerRadius(10)
.overlay(
VStack{
Spacer()
HStack{
Text("GET 30% OFF").font(.title).foregroundColor(.white)
Spacer()
}.padding()
}
)
HStack{
Text("Categories").font(.title)
Spacer()
Button(action: {
}) {
Text("More")
}.foregroundColor(Color("Color"))
}.padding(.vertical, 15)
ScrollView(.horizontal, showsIndicators: false) {
HStack(spacing: 15){
ForEach(categories,id: \.self){i in
VStack{
Image(i).renderingMode(.original)
Text(i)
}
}
}
}
HomeBottomView()
}
}
}//end VStack
.padding(.horizontal)
.background(Color.white)
}
}
struct Home_Previews: PreviewProvider {
static var previews: some View {
Home()
}
}
struct HomeBottomView : View {
var body : some View{
VStack(spacing: 15){
HStack{
Text("Deal of the Day").font(.title)
Spacer()
Button(action: {
}) {
Text("More")
}.foregroundColor(Color("Color"))
}.padding(.vertical, 15)
ScrollView(.horizontal, showsIndicators: false) {
HStack(spacing: 15){
ForEach(dealoftheday){i in
DealCellView(data: i)
}
}
}
HStack{
Text("Popular").font(.title)
Spacer()
}.padding(.vertical, 15)
ScrollView(.horizontal, showsIndicators: false) {
HStack(spacing: 15){
ForEach(recipeitems){i in
PopularCellView(data: i)
}
}
}
} //End VStack
}
}
struct DealCellView : View {
var data : deal
@State var show = false
var body : some View{
ZStack{
NavigationLink(destination: Detail(show: self.$show, viewdata: data), isActive: self.$show) {
Text("")
}
VStack(spacing: 10){
Image(data.image).resizable().scaledToFill().frame(width: 150, height: 150).cornerRadius(10)
Text(data.name).fontWeight(.semibold)
Text(data.price).foregroundColor(.green).fontWeight(.semibold)
}.onTapGesture {
self.show.toggle()
}
}
}
}
struct PopularCellView : View {
var data : popular
var body : some View{
ZStack{
VStack(spacing: 10){
Image(data.image).resizable().scaledToFill().frame(width: 150, height: 150).cornerRadius(10)
Text(data.name).fontWeight(.semibold)
Text(data.price).foregroundColor(.green).fontWeight(.semibold)
}
}
}
}
Detail.swift
//
// Detail.swift
// swiftuidev15ios
//
// Created by Cairocoders
//
import SwiftUI
struct Detail : View {
@Binding var show : Bool
@State var count = 0
let viewdata : deal
var body : some View{
VStack(spacing: 0){
Image(viewdata.image)
.resizable()
.frame(height: UIScreen.main.bounds.height / 2.5)
.edgesIgnoringSafeArea(.top)
.overlay(
VStack{
HStack(spacing: 12){
Button(action: {
self.show.toggle()
}) {
Image(systemName: "arrow.left").renderingMode(.original)
}
Spacer()
Button(action: {
}) {
Image(systemName: "tray.and.arrow.down.fill").renderingMode(.original)
}
Button(action: {
}) {
Image(systemName: "heart").renderingMode(.original)
}
}.padding()
Spacer()
}
)// End Overlay
ScrollView(.vertical, showsIndicators: false) {
VStack(alignment: .leading,spacing: 15){
Text(viewdata.name).font(.title)
Text(viewdata.price).foregroundColor(.green)
Divider().padding(.vertical, 15)
HStack{
Text(viewdata.name)
Spacer()
Button(action: {
}) {
Image(systemName: "message.and.waveform").renderingMode(.original)
}
}
Text("Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit. Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit.Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit.").foregroundColor(.gray)
HStack(spacing: 20){
Spacer(minLength: 12)
Button(action: {
self.count += 1
}) {
Image(systemName: "plus.circle").font(.largeTitle)
}.foregroundColor(.green)
Text("\(self.count)")
Button(action: {
if self.count != 0{
self.count -= 1
}
}) {
Image(systemName: "minus.circle").font(.largeTitle)
}.foregroundColor(.green)
Button(action: {
}) {
Text("Add to Cart").padding()
}.foregroundColor(.white)
.background(Color("Color"))
.cornerRadius(12)
Spacer(minLength: 12)
}
}
}.padding()
.background(RoundedCorner().fill(Color.white))
.padding(.top, -80)
.navigationBarTitle("")
.navigationBarHidden(true)
.navigationBarBackButtonHidden(true)
}
}
}
struct Detail_Previews: PreviewProvider {
@State static var show = false
static var previews: some View {
Detail(show: $show, viewdata: deal(id: 1, name: "Banana", price: "5 / kg", image: "1"))
}
}
struct RoundedCorner : Shape {
func path(in rect: CGRect) -> Path {
let path = UIBezierPath(roundedRect: rect, byRoundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: 35, height: 35))
return Path(path.cgPath)
}
}
Model.swift
//
// Model.swift
// swiftuidev15ios
//
// Created by Cairocoders
//
import SwiftUI
var tabs = ["Home","Wishlist","Cart"]
var categories = ["Fruits","Vegetables","Beverages","Meat","Breads"]
struct deal : Identifiable {
var id : Int
var name : String
var price : String
var image : String
}
struct popular : Identifiable {
var id : Int
var name : String
var price : String
var image : String
}
var dealoftheday = [
deal(id: 0, name: "Strawberry", price: "5.00 / kg",image: "1"),
deal(id: 1, name: "Pineapples", price: "3.00 / kg",image: "2"),
deal(id: 2, name: "Banana", price: "3.00 / pack",image: "4")
]
var recipeitems = [
popular(id: 0, name: "Apple", price: "2.99 / kg",image: "3"),
popular(id: 1, name: "Salad", price: "4.99 / pack",image: "5"),
popular(id: 2, name: "Broccoli", price: "5.69",image: "6")
]