Clover
article thumbnail
[iOS/Swift] Safe Area를 색칠하는 방법
iOS(macOS)/Swift 2022. 9. 30. 17:40

노치 디자인의 Safe Area를 색칠하는 여러 가지 방법 위의 이미지처럼 상단과 하단 Safe Area의 색을 다르게 설정해야 하는 상황이 생겼다. 우선 내가 먼저 알고 있었던 Safe Area에 색깔을 설정하는 방법은, 최상단 View의 Background Color를 설정해주는 방법 밖에는 없었다. 그런데 이 방식으로는 상/하단의 영역을 분리해서 칠하는 건 할 수 없는 것으로 확인했다. 그래서 Safe Area coloring, only bottom 등의 키워드로 구글링을 해보았다. 그 결과 예제나 라이브러리를 알게 되긴 했지만, 내가 정확히 원하는 예제를 얻어내는 데에는 실패했다. 사실 아주 단순한 방법이 있었는데, 그 방법을 바로 떠올리지를 못해서 며칠 동안 삽질을 했다. (돌고 돌아 원하는 기..

article thumbnail
[Delphi/델파이] ADOConnection 사용 시 exe(실행파일) 실행안되는 경우.
Delphi 2022. 9. 17. 16:22

업무상 메인으로 유지보수중인 시스템이 있는데, 특정 폼을 수정하고나면 프로그램 exe가 실행 자체가 안되는 경우가 종종 있었다. 특이한건 개발PC 에서는 아무 탈 없이 실행이 되는데, 클라이언트 PC에서만 실행이 안된다는것.. 원인을 찾으려고 약 이틀간 삽질한 결과.. 그 '특정' 폼에 사용된 ADOConnection 의 속성값이 문제였다. 프로그램에 ADOConnection과 ADOQuery가 떡칠(...)이 되어있는데, 사용된 ADOConnection 들 중 하나에만 Connected 속성값이 True로 되어 있었다. 위 이미지의 Connected 속성이 True 로 되어있었다. 이게 어디에 써먹는건지도 여태 몰랐는데, 이번 기회에 특징을 조금 알게 되었다. 우선 저게 체크되어있으면, 델파이로 소스를..

article thumbnail
[iOS/Swift] Safe Area 크기 가져오기 (iOS15~)
iOS(macOS)/Swift 2022. 9. 14. 23:13

🧐 iPhone Safe Area 크기 가져오기 Safe area의 배경색을 지정하고 싶다면, 메인 View의 BackgroundColor를 지정해주면 된다. 하지만 아래 화면처럼 상/하단이 동시에 적용이 되어버린다. 나는 아래쪽만 적용하고 싶어서, UIView를 코드로 각각 생성해서 addSubview()로 추가해주는 방식으로 해결을 했다. (더 좋은 방법이 있는지는 찾아보는 중...) 그런데 노치가 없는 디자인의 아이폰은 하단 Safe Area가 없으므로, 현재 화면상의 Safe Area의 크기를 받아와서 처리해줘야 할 필요가 있다. 그래서 아이폰의 상/하단 Safe Area의 크기를 가져와 활용할 수 있는 코드를 찾아보았다. if #available(iOS 13.0, *) { let window =..

article thumbnail
[iOS/Xcode 13] Rename - Outlet 변수 이름 수정 방법
iOS(macOS)/Swift 2022. 8. 15. 01:00

🧐 Xcode - Rename 기능 사용법 Storyboard 또는 Xib에서 Outlet으로 변수를 가져오고 난 뒤에 변수명을 변경하고 싶다면 Rename 기능을 사용하는 것이 좋다. 📎 사용법 나의 경우, 위처럼 [Lab'el']을 [Lab'le']로 잘못 쓰는 경우가 종종 있다. 이때, swift 파일의 코드만 고친다면 해당 UI가 열릴 때 "this class is not key value coding-compliant for the key" 에러가 발생한다. 대략 변수명을 바꾼 것이 다른 메뉴에는 적용이 되지 않았다는 의미로, 기존 변수명을 찾을 수 없어서 발생하는 것이다. 이는 Connections Inspector에서 먼저 확인해볼 수 있다. swift 파일에서 변수명을 아무리 바꿔주어도, ..

article thumbnail
[iOS/Xcode 13] 시뮬레이터 키보드 보이게 하는 법
iOS(macOS)/Swift 2022. 8. 15. 00:08

🧐 (Xcode 13) 시뮬레이터상 키보드(아이폰/패드 키보드)가 안 보일 때 Storyboard에서 화면 위에 Text field를 올려놓고, 시뮬레이터로 테스트를 해보는데 아이폰 키보드가 시뮬레이터 위로 올라오지 않았다. 이는 맥북과 연결되어 있는 Hardware 키보드를 인식하도록 설정이 되어 있어서 그런 것이므로, 아래의 방법으로 해결할 수 있다. [해결방법 1] 시뮬레이터에서 단축키 [⌘+K] 를 입력하면 바로 작동한다. [해결방법 2] 1. 시뮬레이터의 상단 메뉴 -> I/O 메뉴 클릭 2. Keyboard -> "Connect Hardware Keyboard" 항목 체크 해제. 해결방법 출처: https://stackoverflow.com/questions/24420873/xcode-6-ke..

[Swift/문법] 고차함수 (Higher-order function)
iOS(macOS)/Swift 2022. 8. 11. 14:37

간략한 스위프트 문법/사용법 정리 🧐 고차함수 (Higher-order function) 매개변수로 다른 함수를 받거나, 실행된 결과를 다시 함수로 반환하는 함수를 고차함수라고 한다. 스위프트 표준 라이브러리에서는 여러 유용한 고차함수를 제공한다. 📎 map 원소 전체를 순회하는 로직을 간결하게 처리할 수 있음. let names = ["kim", "lee", "min", "john"] // 기본형 let names1 = names.map { (name) in return name + "님" } // 축약형 let names2 = names.map { $0 + "님" } // 문자열의 길이 let names3 = names.map { $0.count } print(names1) print(names2) ..

[Swift/문법] 프로토콜 (Protocol)
iOS(macOS)/Swift 2022. 8. 10. 16:59

간략한 스위프트 문법/사용법 정리 🧐 프로토콜(Protocol) 프로토콜(Protocol)은 특정 기능 수행에 필수적인 요소를 정의해놓은 규격을 말한다. 반드시 구현해야 하는 요구사항을 정의해놓는 청사진이라고 할 수 있다. (Java의 추상 클래스나 interface와 비슷한 역할을 한다고 이해할 수 있을 것 같다.) 📎 생성 방법 protocol Talkable { // property var topic: String { get set } var language: String { get } // 상수(let)는 사용할 수 없다. // let sound: Int { get set } // Error // Method func talk() // Initializer init(topic: String, la..

[Swift/문법] 익스텐션(Extension)
iOS(macOS)/Swift 2022. 8. 10. 14:11

간략한 스위프트 문법/사용법 정리 🧐 익스텐션(Extension) 클래스, 구조체, 열거형, 프로토콜 타입에 기능을 추가(확장)할 수 있다. 클래스를 상속받지 않아도 되고, 원본 코드를 몰라도 기능을 확장시켜서 사용할 수 있도록 하는 문법이다. (새 기능을 추가할 수는 있지만, Override는 할 수 없음.) 📎 사용법 // 숫자(int) 짝수, 홀수 extension Int { var oddOrEven: String { if self % 2 == 0 { return "짝수" } else { return "홀수" } } } print(3.oddOrEven) // 출력: "홀수" print(4.oddOrEven) // 출력: "짝수" 기본 자료형(Int, Float, String 등)은 구조체(struc..

[Swift/문법] 클래스(Class), 구조체(Structure)
iOS(macOS)/Swift 2022. 8. 10. 00:39

간략한 스위프트 문법/사용법 정리 🧐 클래스(Class) 클래스는 참조 타입(Reference Types)이다. 따라서 원본의 값이 변경될 수 있음을 유의해야 한다. 그리고 클래스 내부에 선언된 프로퍼티(멤버 변수)는 반드시 초기화가 되어야만 한다. 따라서 클래스는 반드시 하나 이상의 생성자를 가져야 하고, 생성자를 통해 프로퍼티를 초기화 해주어야 한다. 만약 변수 선언과 동시에 초기화를 한다면 생성자에서 초기화를 하지 않아도 에러가 발생하지는 않고, 초기화를 하기 어려운 변수라면 옵셔널로 선언해야 한다. 📎 init(생성자) - Designated Initializer(지정 생성자) class UserInfo { var name: String var id: String // 지정 생성자 init(nam..

[Swift/문법] Enumerations (enum, 열거형)
iOS(macOS)/Swift 2022. 8. 9. 01:57

간략한 스위프트 문법/사용법 정리 🧐 enum(열거형) 기본 사용법 📎 기본 생성 enum Weekday { case mon case tue case wed, thu, fri, sat, sun } // 할당 let day: Weekday = Weekday.mon - 열거형 타입의 이름은 대문자로 시작하는 것을 권장한다. 📎 switch - case switch day { case .mon, .tue, .wed, .thu, .fri: // 타입 생략 가능 print("평일") case Weekday.sat: print("토요일") case .sun: print("일요일") } 📎 if - else if day == Weekday.fri { print("불금!") } else { print("불금이 아님 ㅜ..