SwiftUI - ASKMO 앱 만들기 (SplashScreen)

2022. 6. 30. 16:58·Swift/개발
728x90

방학동안 과후배나동기끼리 프로젝트 어플, 웹사이트를 만들기로 하였습니다.

네이버지식in과 같은 어플이라고 생각하시면 됩니다. 

지식in보다 조금 더 코딩질문에 가까운 사이트라고 생각하시면 편합니다.

일단 저는 프로젝트리더긴 하지만 저도 처음이고 후배들도 처음 공부하면서 프로젝트하는거라 완성이 될 지는 모르겠습니다.

하지만 완성보다는 공부를 하는 위주로 생각하고 있고 저는 백엔드와 SwiftUI를 같이 공부하며 풀스택 개발자가 되도록 노력할 것 입니다.

일단 앱을 시작하면 유명한 앱들은 자기의 아이콘을 잠깐 보여주고 실행이 됩니다. SplashScreen인데 저번에 공부했던것을 이용하여 만들어봤습니다.

    @State var isFinished = false

State :

  • 변화가 생기면 해당 변수의 값을 읽거나 새로 쓸 수 있음을 의미하는 property wrapper
  • SwiftUI 는 state 로 선언된 property 들의 저장소를 관리
  • State value 값이 변경되면 뷰는 해당 value 의 appearance 를 무효화 하고 다시 body 값을 계산
  • state 변수값이 변경되면 view 를 다시 랜더링 하기 때문에 항상 최신 값을 가짐
  • State 인스턴스는 그 자체로 값이 아닌, 값을 읽고 쓰는 것을 의미함
  • 현재 뷰 UI의 특정 상태를 저장하기 귀해 만들어진 것이기 때문에 보통 private 
  • @State 속성으로 어떤 프로퍼티의 초기값을 지정했다면, 다른 값으로 재할당 불가, @Binding 변수를 통해서만 가능

변수명을 isFinished라고 정해주었습니다. SpalshScreen이 끝나야하기때문에

var body: some View {        
            
            if !isFinished{                 
                ZStack{                     
                    Color("white") 
                        .ignoresSafeArea() 
                        
                    GeometryReader{proxy in 
                        
                        // For Screen Size
                        let size = proxy.size
                        
                        ZStack{
                                
                                Image("Askmo") 
                                    .resizable() 
                                    .aspectRatio(contentMode: .fit) 
                                    .frame(width: size.width / 1.9,
                                           height: size.width / 1.9) 
                                    
                            }                        
                        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)                                                
                    }
                }

!isFinished 는 변수가 False일때 실행이 됩니다.

Zstack으로 공간을 잡아주고

Asset에 저장되어있는 White color을 불러와서  .ignoreSafeArea로 아랫부분과 윗부분 모두 색을 지정해줍니다.

GeometryReader{proxy in 는 자동으로 크기를 설정해준다고 생각하면 된다. 부모뷰와 자식뷰의 위치를 최적으로 지정을 해준다.

screensize을 proxy로 지정해주고

zstack을 다시 이용하여 배경색 윗부분에 이미지을 불러와서 .resizable()을 이용하여 적당한 크기로 설정해주고

.aspectRation(contentMode: .fit)으로 크기 설정후 프레임으로 넓이와 높이를 지정해준다.

zstack의 frame을 넓이와 높이를 max로 주어 정가운데에 위치시킨다.

.onAppear {                                         

                                DispatchQueue.main.asyncAfter(deadline: .now() + 0.6) {
                                    
                                    withAnimation {
                                        isFished.toggle()
                           }
						}
                    
                }
            }
        }
    }
}

.onAppear은 뷰가 나타날때 실행될 행동을 시킴

DispatchQueue.main.asyncAfter(deadline: .now() + 0.6)초후에 꺼지게 만들었습니다.

 

import SwiftUI

struct SplashScreen: View {
    
    @State var startAnimation = false 
    @State var bowAnimation = false 
    @State var isFished = false 
    
    var body: some View {
        
        HStack{
            
            if !isFished{ 
                
                ZStack{ 
                    
                    Color("white") 
                        .ignoresSafeArea() 
                    

                    GeometryReader{proxy in 
                        
                        // For Screen Size
                        let size = proxy.size
                        
                        ZStack{
                            
                            HStack(spacing: -20 ){//Hstack 
                                
                                Image("Askmo") // 
                                    
                                    .resizable() //
                                    .aspectRatio(contentMode: .fit) 
                                    .frame(width: size.width / 1.9,
                                           height: size.width / 1.9) 
                                    
                            }
                            
                        }
                        
                        .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)
                        
                        
                    }
                }
                .onAppear { 

                                DispatchQueue.main.asyncAfter(deadline: .now() + 0.6) {
                                    
                                    withAnimation {
                                        isFished.toggle()
                         }
                    }
                }
            }
        }
    }
}

struct SplashScreen_Previews: PreviewProvider {
    static var previews: some View {
        SplashScreen()
    }
}

 

 

728x90

'Swift > 개발' 카테고리의 다른 글

배달의 민족 - 로그인 페이지  (0) 2023.01.03
BlogApp  (0) 2023.01.03
[SwiftUi] 360도 회전 애니메이션  (1) 2023.01.03
SplashScreen-DisneyApp 공부 [SwiftUI]  (0) 2022.03.28
SwiftUI - Animation (Add to Bag)  (0) 2021.03.16
'Swift/개발' 카테고리의 다른 글
  • BlogApp
  • [SwiftUi] 360도 회전 애니메이션
  • SplashScreen-DisneyApp 공부 [SwiftUI]
  • SwiftUI - Animation (Add to Bag)
bulmang
bulmang
모바일 개발자 도전
  • bulmang
    bulmang
    bulmang
  • 전체
    오늘
    어제
    • 분류 전체보기 (208)
      • 알고리즘 (68)
        • List (3)
        • Two Pointer (6)
        • Binary Search (4)
        • Prefix Sum (3)
        • Sort (4)
        • Brute Force (5)
        • Array (2)
        • String (4)
        • 프로그래머스 (12)
        • 백준 (9)
        • Queue (2)
        • Stack (2)
        • Recursion (12)
      • Computer Science (16)
        • Computer Architecture (6)
        • Operating System (5)
        • Network (2)
        • 기타 (2)
        • System Programming (1)
      • Swift (70)
        • 개발 (24)
        • 정리 (25)
        • 문법 (20)
      • Flutter (24)
      • 기타 (12)
        • 후기 (12)
      • Git (6)
      • Ios 오픈소스 (5)
      • UI 디자인 (5)
      • AppleScript (2)
  • 링크

    • Notion
    • Github
  • 태그

    SwiftUI
    Xcode
    백준
    피플
    IOS
    문법
    컴퓨터구조
    코딩테스트
    Swift
    til
    자료구조
    FLUTTER
    알고리즘
    재귀
    Apple Developer Academy
    개발
    협업
    Java
    today i learned
    riverpod
  • 최근 댓글

  • 최근 글

  • 인기 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.2
bulmang
SwiftUI - ASKMO 앱 만들기 (SplashScreen)
상단으로

티스토리툴바