Swift
-
[UIKit] 시간에 따라 넘어가는 이미지 배너Swift/UIKit 2024. 1. 24. 21:45
타이머 돌리고 이미지가 시간에 맞춰서 돌아가고, 페이징 기능(isPagingEnabled)가 있는 UIViewcontroller clipsToBounds 속성은 그대로 유지되어 이미지가 UIImageView의 경계를 넘어가지 않도록 합니다. import UIKit class ViewController: UIViewController { let scrollView = UIScrollView() let numberOfPages = 3 let pageWidth: CGFloat = UIScreen.main.bounds.width let pageHeight: CGFloat = UIScreen.main.bounds.height var currentPage = 0 var timer: Timer? let duratio..
-
[Swift] Firebase - FireStore 등록 addDocumentSwift 2024. 1. 7. 19:17
[준비 사항] 1. app- firebase연결까지는 된 상황. 2. firestore에 collection또한 만들어놓은 상태. firestore database / cloud firestore는 import FirebaseFirestore 해야함. firestore에서 만든 컬렉션에 데이터 등록 let db = Firestore.firestore() var ref: DocumentReference? = nil ref = db.collection("reportBin").addDocument(data: [ "address": binAddress, "reportReason": reason, "time": Timestamp(date: Date()) ]) { err in if let err = err { pr..
-
[SwiftUI] @EnvironmentObjectSwift/SwiftUI 2024. 1. 7. 02:37
EnvironmentObject는 언제 사용하는가? : 여러 뷰(:기준마다 다름)에서 이용될 경우. SwiftUI에서 제공하는 속성 래퍼 중 하나로, 뷰 계층 전체에서 접근 가능한 데이터를 제공하는 데 사용, 나의 경우 3개 이상의 뷰에서 사용되면 EnvironmentObject로 생성해서 넘긴다. EnvironmentObject를 사용하려면, 먼저 ObservableObject 프로토콜을 준수하는 클래스를 정의하고, 이 클래스의 인스턴스를 최상위 뷰에 .environmentObject(_:) 수정자를 사용하여 제공해야함. @main struct MyApp: App { @StateObject private var modelData = ModelData() var body: some Scene { Wind..
-
[Swift] Computed Property - get/setSwift/swift 문법 2024. 1. 3. 09:32
복잡하게 생각할 거 없이, 해당 프로퍼티의 값을 호출하는지. 설정하는지만 보면 된다. get 이 프로퍼티의 값을 호출할 때 실행되는 코드 값을 가져와야 하므로 return이 필수. set 이 프로퍼티의 값을 설정할때(할당) 할 때 실행되는 코드 class Person { var name: String = "ming" var alias: String { get { //alias의 값을 가져오면(print(min.alias)) 실행되는 부분 return name } set(name) { //alias의 값을 설정하면(min.alias = "min") 실행되는 부분 self.name = name print("\(name)은 민2") } } } var min = Person() print(min.alias) /..
-
애플 ABM(Apple Business Manager) 등록 기록, 애플 회사 기기 등록Swift 2023. 12. 22. 17:09
ABM이란? Apple Business Manager는 조직에서 iPhone, iPad 또는 Mac을 사용하든 IT 책임자가 콘텐츠를 손쉽게 대량으로 구매 가능. 타사 MDM(모바일 기기 관리) 솔루션과 호환되는 간편한 웹 기반 포털 애플 ABM 등록 매뉴얼 가. ABM 계정 만들기 나. APPLE의 확인 전화 진행 다. 기기등록 1. 쿠팡에서 구매한경우 2. 공식 리셀러에게서 구매한 경우 다-2의 경우는 등록 절차 필요 없음. Apple 고객 번호만 ABM에 등록하면 됨. 다-1(공식 리셀러 이외에서 구매한 경우)의 케이스를 기준으로 서술. 1. 등록할 기기가 아닌 다른 애플 기기에 apple configuration2앱 설치해놓기. (등록할 기기는 화면 켜서 로그인을 하지 않은 상태여야 함 – 이미 ..
-
lazy 코드 : 지연 초기화, 해당 프로퍼티 사용될 때 까지 초기화 되지 않음.Swift 2023. 12. 21. 23:46
private lazy var vStackView: UIStackView = { let view = UIStackView(arrangedSubviews: [ topLabel, bottomLabel ]) view.axis = .vertical view.spacing = -4 return view }() 위의 코드에서 lazy 키워드를 사용하여 vStackView를 선언하는 이유는 지연 초기화를 수행하기 위해서입니다. lazy 키워드를 사용하면 해당 프로퍼티에 대한 초기화가 처음 접근될 때까지 지연됩니다. 즉, 해당 프로퍼티가 처음으로 사용될 때까지 초기화되지 않습니다. 지연 초기화를 사용하는 이유는 다음과 같습니다: 성능 개선: vStackView 프로퍼티가 사용되지 않는 경우에는 초기화를 진행하지 않기 ..
-
[SwiftUI]연속되는 뷰 넘기는 상황에서 이미지, 텍스트의 길이가 달라져서 위치가 고정되지 않는 문제Swift/SwiftUI 2023. 12. 5. 21:36
버튼 위의 text부분이 한줄이다가 2줄이니까 버튼의 위치가 변경되는 상황 Vstack에 쌓아서 샌겨난 현상. -> 위의 text부분의 frame을 고정해줘서 해결 Text("\(guideDataSet.imagesAndTexts[index - 1].text)") .frame(height: CGFloat.screenHeight*0.075) 참고로 screenHeight이 부분은 extension으로 선언해준 부분. extension CGFloat { static let screenWidth = UIScreen.main.bounds.width static let screenHeight = UIScreen.main.bounds.height } screenHeight를 미리 선언해놓고 쓰면 편하다. UIScre..