์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- realm
- Swfit
- arkit
- CollectionView
- SnapKit
- MVVM
- node.js
- tableView
- ios
- swift
- ๋ฐฑ์ค
- reactorkit
- UIKit
- combine
- BFS
- Flutter
- RxSwift
- XCTest
- designpattern
- ํจ์คํธ์บ ํผ์ค
- TCA
- Xcode
- visionOS
- ํ๋ก๊ทธ๋๋จธ์ค
- SwiftUI
- rxcocoa
- BOJ
- raywenderlich
- Kuring
- Lv2
- Today
- Total
lgvv98
[iOS14] โ๏ธ SplashView๋ฅผ ํ์ฉํด Alert ๋ฐ์ํ๊ธฐ ๋ณธ๋ฌธ
[iOS14] โ๏ธ SplashView๋ฅผ ํ์ฉํด Alert ๋ฐ์ํ๊ธฐ
๐ฅ ์บ๋ฟ๋งจ 2021. 8. 2. 11:50โ ์ด๋ฒ ์๊ฐ์๋ SplashView๋ฅผ ์ด์ฉํ์ฌ Alert๋ฅผ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๋๋ก ํ์.
์ฐ์ ๋๋ ์ฌ์ฉ์๊ฐ ์ฑ์ ์์ํ ๋, ์ค๋ฅ๊ฐ ์์ผ๋ฉด error ์๋ฆผ๊ณผ ๋์์ Alert๋ฅผ ๋ฐ์ํ์ฌ ์ฑ์ ์์์ ์ค๋จ์ํค๋ ค ํ๋ค.
์ฒ์์ ๋ด๊ฐ ์๊ฐํ๊ธฐ๋ก LaunchScreen.storyboard์ชฝ์ ์ปค์คํ ํด๋์ค๋ฅผ ์ฐ๊ฒฐํด์ ์ฌ์ฉํ๋ ค๊ณ ํ์์ผ๋...
์.. ์ด๋ฐ ์๋ฌ๊ฐ ๋ํ๋๋ค. ์ฆ, ์ปค์คํ ํด๋์ค๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ค๋ ๋ง์ด๋ค.. ใ ใ
๊ทธ๋ฐ๋ฐ, ๋ค๋ฅธ ์ฑ๋ค์ ๋ณด๋ฉด ๋คํธ์ํฌ ์๋ฌ๋ ๋ฌธ์ ๊ฐ ์์ ์, Alert๋ฅผ ํ์ํด ์ฃผ๋๋ฐ ๊ทธ๊ฑด ์ด๋ป๊ฒ ํ๋๊ฑด์ง ๊ถ๊ธ์ฆ์ด ์๊ฒผ๋ค.
๊ทธ๋์ ์ฐพ์๋ณด๋ ์ค, SplashScreen์ ๋ํด์ ์๊ฒ ๋์๊ณ , ์ด ๋ฐฉ์์ ์ ์ฉํ์ฌ ๊ฐ๋ฐํ์ฌ ๋ณด๊ธฐ๋ก ํ์๋ค.
(๋ชฉ์ฐจ)
1. SplashScreen๋ ์ด๋ค ๋ก์ง์ผ๋ก ์ค๊ณ๋์์๊น?
2. SplashScreen์ ์ฝ๋๋?
3.
โ 1. SplashScreen๋ ์ด๋ค ๋ก์ง์ผ๋ก ์ค๊ณ๋์์๊น?
์ฐ๋ฆฌ๊ฐ ์๊ณ ๋์ด๊ฐ์ผ ํ๋๊ฑด, Launch Storyboard ์์๋ ๋ทฐ์ ๊ด๋ จํ ์ปจํธ๋กค์ ํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ฆ, ์ด ๊ตฌ๊ฐ์ ์ง๋ Launch ๋ทฐ์ปจํธ๋กค๋ฌ๋ก ๋์ด๊ฐ์ ๋๋ถํฐ ์๋ฆผ์ ๋ณด์ฌ์ฃผ๋๊ฐ, ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋๊ฐ ํ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ด๋ป๊ฒ ์ค๊ณํด์ผํ๋ ๊ฒ์ผ๊น?
(๊ธฐ์กด) : LaunchScreen -> MainScreen ์ด๋ผ๊ณ ํ์.
(Splash) : LaunchScreen -> SplashView -> MainScreen ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค.
๋ฌด์จ ๋ง์ด๋๋ฉด, ๋ฐ์น ์คํฌ๋ฆฐ์์ SplashView๋ก ๋จผ์ ์ด๋ํ์ฌ, ์ฌ๊ธฐ์ ๋คํธ์ํฌ ์ํ๋ฅผ ํ์ธํ๊ฑฐ๋, ์ ๋๋ฉ์ด์ ์ ํตํด ์ฑ์ ์์ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ๋ฑ UI์ ๊ด๋ จํ ์์ ์ ์งํํ ์ ์๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ๊ฒ์ฌํ๋ ์กฐ๊ฑด์ด ์ ์์ ์ผ๋ก ์๋ง๋๋ค๋ฉด, MainScreen์ผ๋ก ์ด๋ํ์ฌ ๊ทธ์ ์์ผ ์ฐ๋ฆฌ๊ฐ ๋ณด๋ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด๋ค...!
์ด๋ฐ ์์ด๋์ด๊ฐ ์์๋ค๋... ๊ฐ๋ฐ์ ๋ค๋ฅธ ์ฌ๋์ ์๊ฐ์ ์ ๋ฃ๋๊ฒ๋ ์ค์ํ๋ค๊ณ ์์ผ ๋๋ ์๊ฐ.
โ 2. SplashScreen์ ์ฝ๋๋?
(์ฌ์ ์ค์ )
๊ฐ์ฅ ์ผ์ชฝ์ด SplashScreen์ผ๋ก ํ์ฉํ ๋ทฐ! - SplashViewController.swift๋ฅผ ๋ง๋ค์ด์ ์ฐ๊ฒฐํด์ค๋ค.
//
// DeviceConfig.swift
// Covid19AlarmApp
//
// Created by Hamlit Jason on 2021/08/01.
//
import Foundation
import SystemConfiguration
class DeviceManager {
static let shared : DeviceManager = DeviceManager()
var networkStatue : Bool {
get {
return checkDeviceNetworkStatus()
}
}
private init() {
}
private func checkDeviceNetworkStatus() -> Bool {
print("Check to Device Natwork Status....")
var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
zeroAddress.sin_family = sa_family_t(AF_INET)
let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
}
}
var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false {
return false
}
// Working for Cellular and WIFI
let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
let ret = (isReachable && !needsConnection)
return ret
}
}
์์ ์ฝ๋๋ ์ ํ ์์ดํ์ด ์ฐ๊ฒฐ ์ํ๋ฅผ ํ์ธํ๋ ์ฝ๋์ธ๋ฐ, ์ ํ ๊ณต์๋ฌธ์์ ๊ฐ๋ฉด ๋์์์ผ๋ ๋ณต๋ถํด์ DeviceConfig.swift๋ฅผ ๋ง๋ ๋ค.
SplashViewController.swiftํ์ผ์ ์ฝ๋
//
// LaunchViewController.swift
// Covid19AlarmApp
//
// Created by Hamlit Jason on 2021/08/01.
//
import UIKit
class SplashViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
checkDeviceNetworkStatus()
}
func checkDeviceNetworkStatus() {
if !(DeviceManager.shared.networkStatue) {
let alert: UIAlertController = UIAlertController(title: "๋คํธ์ํฌ ์ํ ํ์ธ", message: "๋คํธ์ํฌ๊ฐ ๋ถ์์ ํฉ๋๋ค.", preferredStyle: .alert)
let action: UIAlertAction = UIAlertAction(title: "๋ค์ ์๋", style: .default, handler: { (action) in
self.checkDeviceNetworkStatus()
})
alert.addAction(action)
present(alert, animated: true, completion: nil)
} else {
guard let vc = self.storyboard?.instantiateViewController(identifier: "firstVC") else {
print("ERROR")
return
}
vc.modalTransitionStyle = .crossDissolve
vc.modalPresentationStyle = .fullScreen
present(vc, animated: true, completion: nil)
}
}
}
โ๏ธ์ฌ๊ธฐ์ ์ค์ํ ์ ์, ๋ด ํฌ์คํ ์ ์์ ์ฌ์ง์ ๋ณด๋ฉด, SplashScreen - NavigationController - ViewController ์ด๋ฐ ์์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋๋ฐ NavigationController๋ ViewController์์ Embed In ๋๊ฑฐ๋ผ๊ณ ๊ฐ์ ํ๋ฉด, ์ฌ๊ธฐ์ identifier๋ฅผ ์ฃผ๊ณ ์ ํํด์ผ ์ดํ์ ๋ค๋ฅธ ๋ทฐ๋ค๋ Navigationํํ๋ก ํ๋ฉด์ด ์ ํ๋๋ค.
๐ ViewDidAppear์์ ํจ์๋ฅผ ํธ์ถํ๋ ์ด์ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ๋, ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ๋ ๋ค๋ฅธ ์์ ์ ๋ง์น ํ์ ์ ์ฉ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
'โ ๏ธ deprecated โ ๏ธ > ๐ท ์ฝ๋ก๋19์๋ฆผ์ฑ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS15] Device์ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ฌ๋ถ ํ์ธ ๐ก (0) | 2021.11.05 |
---|---|
[iOS14] Swift5 alertDialog ํจ์๋ก ๋ง๋ค์ด ์ฌ์ฉํ๊ธฐ (0) | 2021.08.04 |
[iOS14] ๋ฐฑ๊ทธ๋ผ์ด๋์์ ํน์ ์๊ฐ ๋ก์ปฌ ์๋ฆผ๋ณด๋ด๊ธฐโฐ (0) | 2021.07.29 |
String HTMLTag ์ง์ฐ๊ธฐ (์ ๊ทํํ์) (1) | 2021.07.29 |
Swift5 ๋ค์ด๋ฒ ๊ฒ์ API ์ฌ์ฉํ๊ธฐ(๋ด์ค) (0) | 2021.07.26 |