article

Wednesday, January 5, 2022

SwiftUI Netflix UI Simple Design

SwiftUI Netflix UI Simple Design

ContentView.swift
 
//
//  ContentView.swift
//  Test
//
//  Created by Cairocoders
//

import SwiftUI

struct ContentView: View {
    var body: some View {

        NavigationView{
                
            Home().navigationBarTitle("")
            .navigationBarHidden(true)
            .navigationBarBackButtonHidden(true)
            
        }.preferredColorScheme(.dark)

    }
}



struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}



struct Home : View {
    
    @State var txt = ""
    @State var show = false
    
    var body : some View{
        
        VStack(alignment: .leading, spacing: 20){
            
            HStack(spacing: 10){
                
                Button(action: {
                    
                    
                }) {
                    
                    Image("menu").renderingMode(.original)
                }
                
                Image("logo")
                
                Spacer()
                
                Button(action: {
                    
                    
                }) {
                    
                    Image("Notifications").renderingMode(.original)
                }
                
            }
            
            HStack(spacing: 15){
                
                Image(systemName: "magnifyingglass").font(.body)
                
                TextField("Search For Movies,Shows", text: $txt)
                
            }.padding()
                .background(Color.gray)
            
            ScrollView(.vertical, showsIndicators: false) {
                
                VStack(alignment: .leading, spacing: 15) {
                    
                    Text("Movies").font(.title)
                     
                     ZStack{
                         
                        NavigationLink(destination: Detail(show: $show), isActive: $show) {
                            
                            Text("")
                        }
                        
                        Image("top").resizable().onTapGesture {
                            
                            self.show.toggle()
                        }
                         
                         VStack{
                             
                             Spacer()
                             
                             HStack{
                             
                                 VStack(alignment: .leading, spacing: 10){
                                     
                                     Text("Journey 2: The Mysterious Island").font(.body)
                                     Text("Action Movie").font(.caption)
                                 }
                                 
                                 Spacer()
                                 
                                 Button(action: {
                                     
                                 }) {
                                     
                                     Image("play").renderingMode(.original)
                                 }
                                 
                             }
                             
                         }.padding()
                         
                     }.frame(height: 190)
                     
                     HStack{
                         
                         Spacer()
                         
                         Button(action: {
                             
                         }) {
                             
                             Text("View All")
                             
                         }.foregroundColor(Color.white)
                     }
                    
                    Text("Continue Watching")
                    
                    middleView()
                    BottomView()
                    
                }
 
            }.padding(.bottom, 25)
                

            
        }.padding(.horizontal)
        .edgesIgnoringSafeArea(.bottom)
        .preferredColorScheme(.dark)
    }
}

struct middleView : View {
    
    var body : some View{
        
        VStack(spacing: 15){
            
            ScrollView(.horizontal, showsIndicators: false) {
                
                HStack(spacing: 15){
                    
                    ForEach(datas){i in
                        
                        VStack(alignment: .leading,spacing: 0){
                            
                            Image(i.image)
                            
                            HStack{
                                
                                Spacer()
                                
                                Button(action: {
                                    
                                }) {
                                    
                                    Image("play").renderingMode(.original).resizable().frame(width: 25, height: 25)
                                    
                                }.padding(.top, -12)
                            }
                            
                            VStack(alignment: .leading){
                                
                                Text(i.name)
                                
                                ZStack{
                                    
                                    Capsule().fill(Color.gray)
                                    
                                    HStack{
                                    
                                        Capsule().fill(Color.green).frame(width: i.percentage)
                                        
                                        Spacer()
                                        
                                    }
                                    
                                }.frame(height: 5)
                                
                            }.padding(.horizontal,10)
                            .padding(.bottom, 10)


                        }.background(Color.gray)
                        .padding(.bottom)
                    }
                }
            }
        }
    }
}


struct BottomView : View {
    
    var body : some View{
        
        VStack(alignment: .leading,spacing: 15){
            
            Text("Explore By Genres")
            
            HStack{
                
                Button(action: {
                    
                }) {
                    
                    Text("Action").padding()
                    
                }.foregroundColor(.white)
                .background(Color.red)
                .cornerRadius(10)
                
                Spacer(minLength: 10)
                
                Button(action: {
                    
                }) {
                    
                    Text("Adventure").padding()
                    
                }.foregroundColor(.white)
                .background(Color.red)
                .cornerRadius(10)
                
                Spacer(minLength: 10)
                
                Button(action: {
                    
                }) {
                    
                    Text("Comedy").padding()
                    
                }.foregroundColor(.white)
                .background(Color.red)
                .cornerRadius(10)
                
            }
            
            Text("Trending")
            
            ScrollView(.horizontal, showsIndicators: false) {
                
                HStack(spacing: 15){
                    
                    ForEach(bottom,id: \.self){i in
                        
                        Image(i)
                    }
                }
            }
        }
    }
}
Detail.swift
 
//
//  Detail.swift
//  Test
//
//  Created by Cairocoders
//

import SwiftUI

struct Detail : View {
    
    @Binding var show : Bool
    
    var body : some View{
        
        VStack(spacing: 15){
            HStack(spacing: 15){
                
                Button(action: {
                    self.show.toggle()
                }) {
                    Image(systemName: "arrow.left").foregroundColor(Color.white)
                }
                
                Spacer()
                
                Button(action: {
                    actionSheet()
                }) {
                    Image("share").renderingMode(.original)
                }
                
                Button(action: {
                }) {
                    Image(systemName: "info.circle").foregroundColor(Color.white)
                }
                
            }.padding()
            
            ZStack{
                Image("detail").resizable()
                VStack(alignment: .leading,spacing: 12){
                    
                    Spacer()
                    
                    Text("ACTION")
                    Text("Journey 2: The Mysterious Island").font(.title)
                    
                    HStack(spacing: 10){
                        Text("98% Match")
                        Text("2012")
                        Image("hd")
                        
                        Spacer()
                    }
                    
                }.padding()
                
            }.frame(height: UIScreen.main.bounds.height / 2)
            .navigationBarTitle("")
            .navigationBarHidden(true)
            .navigationBarBackButtonHidden(true)
            
            ScrollView(.vertical, showsIndicators: false) {
                VStack(alignment: .leading, spacing: 15){
                    HStack{
                        Button(action: {
                            
                        }) {
                            HStack(spacing: 10){
                                Image(systemName: "play.fill")
                                Text("Play")
                            }.padding()
                        }.foregroundColor(.white)
                        .background(Color.red)
                        .cornerRadius(10)
                        
                        Button(action: {
                        }) {
                            HStack(spacing: 10){
                                Image(systemName: "plus")
                                Text("ADD TO LIST")
                            }.padding()
                            
                        }.foregroundColor(.white)
                        .background(Color.gray)
                        .cornerRadius(10)
                        
                        Spacer()
                    }
                    
                    HStack{
                        VStack(alignment: .leading, spacing: 10){
                            Text("Journey 2: The Mysterious Island")
                            Text("Sean Anderson partners with his mom's husband on a mission to find his grandfather, who is thought to be missing on a mythical island.").foregroundColor(.gray)
                        }
                    }.padding(.top, 15)
                    
                    Divider().padding(.vertical, 12)
                    
                    ForEach(popular){i in
                        VStack(alignment: .leading,spacing: 15){
                            HStack{
                                Image(i.image)
                                    .resizable().aspectRatio(contentMode: .fill)
                                VStack(alignment: .leading, spacing: 10){
                                    Text(i.name)
                                    Text(i.time)
                                }
                                
                                Spacer()
                                
                                Button(action: {
                                }) {
                                    Image(systemName: "arrow.down")
                                }
                            }
                            Text(i.desc)
                        }
                        
                    }.padding(.bottom, 15)
                }
            }.padding(.top, 15)
            .padding(.horizontal, 15)
            
        }.edgesIgnoringSafeArea(.bottom)
    }
    
    func actionSheet() {
        guard let urlShare = URL(string: "https://developer.apple.com/xcode/swiftui/") else { return }
           let activityVC = UIActivityViewController(activityItems: [urlShare], applicationActivities: nil)
           UIApplication.shared.windows.first?.rootViewController?.present(activityVC, animated: true, completion: nil)
    }
}

struct Detail_Previews: PreviewProvider {
    @State static var show = false
    static var previews: some View {
        Detail(show: $show)
    }
}
Model.swift
 
//
//  Model.swift
//  Test
//
//  Created by Cairocoders
//

import SwiftUI

struct type : Identifiable {
    
    var id : Int
    var name : String
    var image : String
    var percentage : CGFloat
}

var datas = [
    type(id: 0, name: "The Amazing Spider-Man", image: "1",percentage : 45),
    type(id: 1, name: "Fast and Furious Presents", image: "2",percentage: 90),
    type(id: 2, name: "Green Snake", image: "3",percentage: 53)
]

var bottom = ["b1","b2"]

struct polularlist : Identifiable {
    
    var id : Int
    var name : String
    var time : String
    var image : String
    var desc : String
}

var popular = [polularlist(id: 0, name: "Green Snake", time: "51 min", image: "3", desc: "While trying to free her sister from Fahai's clutches, Xio Qing winds up in a dystopian city and meets a mysterious man who can't recall his past life."),
               polularlist(id: 1, name: "How to Train Your Dragon 2", time: "44 min", image: "4", desc: "Five years have passed since Hiccup and Toothless united the dragons and Vikings of Berk. Now, they spend their time charting the island's unmapped territories. During one of their adventures, the pair discover a secret cave that houses hundreds of wild dragons"),
               polularlist(id: 2, name: "Aquaman", time: "63 min", image: "5", desc: "Once home to the most advanced civilization on Earth, the city of Atlantis is now an underwater kingdom ruled by the power-hungry King Orm. With a vast army at his disposal, Orm plans to conquer the remaining oceanic people -- and then the surface world.")]

Related Post