일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 독서후기
- Mock
- mvvm
- xcode
- SWIFT
- viewcontroller
- Info.plist
- contentInset
- @available
- 야곰아카데미
- SWIFTUI
- NotificationCenter
- roundingMode
- 스타트업주니어로살아남기
- Codegen
- delegation
- UIResponder
- human interface guidelines
- NumberFormatter
- 아이폰
- Modality
- IOS
- Structures and Classes
- 스위프트
- 책후기
- View Life Cycle
- 독후감
- Navigation
- 부트캠프
- Failed to register bundle identifier
- Today
- Total
목록분류 전체보기 (144)
호댕의 iOS 개발

프로젝트를 진행하다보면 종종 키보드를 활성화했을 때 키보드 때문에 뒤에 있는 컨텐츠의 일부가 아예 보이지 않는 문제가 발생하곤 한다. 화면 위에 키보드가 활성화되어 아무리 뒤에 있는 View를 스크롤 하더라도 보이지 않는다... 😱 이는 사용자가 자신이 작성한 내용을 확인할 수 없기 때문에 사용자 경험을 매우 안 좋게 하는 요인이라고 생각한다. 그렇다면 이럴 땐 어떻게 해야할까? 일단 이 때는 키보드의 높이만큼 컨텐츠가 위로 올라가야 하지 않을까? 라고 생각하고 방법을 찾아보았다. 그 전에 키보드가 활성화되었고, 키보드가 비활성화되는지 알 수 있는 방법이 필요했다. 이는 이미 만들어져 있는 Notification Center를 사용하면 해결됐다. 내가 사용한 것은 UIResponder에 있는 타입 프로퍼..

어제에 이어 미처 포스팅하지 못했던 TWL을 업로드한다. 이 주는 주로 프로젝트를 진행하며 새롭게 알게 된 내용들이 많았다. 그럼 어떤 내용들이 있었는지 살펴보자. UIRefreshController Apple Developer Documentation developer.apple.com 대부분의 앱들을 보면 화면 가장 상단에서 화면 아래로 드래그를 했다가 손을 떼면 다시 데이터가 리로드되면서 리로드가 되는 표시가 나온다. @objc private func handleRefrashControl() { reloadData() let scrollView = view as? UIScrollView DispatchQueue.main.async { scrollView?.refreshControl?.endRefre..

TWL을 블로그에 포스팅 하는 것이 늦어져서 지금에서야 미리 작성해놓았던 TWL을 포스팅한다... 늦지 않게 꼬박꼬박 포스팅해야겠다. 항상 꾸준하게!!! 그럼 이때는 뭘 배웠는지 정리해보자!! 슬기로운 Reuse Identifier 사용 방법 TableView나 CollectionView에서 Cell을 Register할 때나 dequeueReusableCell을 할 때 항상 reusable Identifier를 사용하게 된다. 이는 물론 String으로 작성해줄 수 있지만 이렇게 할 경우 기억하기도 쉽지 않고 하드코딩을 하게 된다. 따라서 이를 방지하기 위해 이렇게 작성해줄 수 있다. protocol ReusableView: NSObject { static var reuseIdentifier: Strin..

TextField는 기본적으로 만들게 되면 테두리가 존재한다. 이런 식으로 말이다. (참고로 상품 설명의 경우 TextView를 통해 구현했다) 하지만 만약 해당 텍스트 필드에 작성한 내용이 특정 조건을 충족하지 못할 경우 빨간 선으로 테두리를 그리고 싶으면 어떻게 해야할까? 코드는 아주 간단하지만 헤멨던 것이 있어 작성해본다. 일단 코드 먼저 살펴보면 다음과 같다. textField.layer.borderColor = UIColor.systemRed.cgColor textField.layer.cornerRadius = 5 textField.layer.borderWidth = 0.5 코드는 아주 간단하다. 하지만 여기서 textField.layer.borderWidth = 0.5 이 코드가 없다면? 당연..

야곰 아카데미 불타는 토요 스터디에서 진행한 Keychain 관련 공부입니다. 🔐 Keychain은 뭘까? 참고문서: https://developer.apple.com/documentation/security/keychain_services 일단 Keychain은 사용자 대신 작은 단위의 데이터를 안전하게 저장하는 공간을 의미한다. 여기서 작은 단위의 데이터는 인증서, 비밀번호, 인적사항 등의 데이터를 말한다. 이때 keychain service API는 키체인이라는 암호화된 데이터베이스에 사용자의 데이터를 저장하는 매커니즘을 가지고 있다. 단 iOS에서는 하나의 디바이스에 하나의 keychain만 존재하며 번들 단위(앱 단위)로 keychain을 관리하게 되며, MacOS에선 임의로 키체인을 생성할 수..

알고리즘 문제를 풀다가 for 문을 거꾸로 돌아야 하는 상황이 있었다. 물론 배열에서 for 문을 돈다면 배열에 .reversed()를 하여 for 문을 돌리면 됐지만 문제는 단순히 특정 범위를 돌아야 할 때였다. 나는 1부터 for문을 돌리고 싶은 것이 아니라.. 마지막 숫자부터 1까지를 돌리고 싶었다... 내가 마주한 문제는 다음과 같다. 초등학교 때(?) 배웠던 최대공약수와 최소공배수를 구하는 문제였는데 구하는 것은 간단했지만 막상 코드로 분기를 하려니... 마냥 쉽지만은 않았다. 이때 만약 m이 n으로 나뉘지 않는다면 n부터 1까지 내려가면서 나눠지는 값이 있는지 찾아야 했다. 이때 1부터 올라가면서 하게 된다면 공약수를 찾을 순 있지만 최대 공약수는 찾을 수 없는 문제가 있었다. 그렇다면 이때 ..

캡쳐를 할 수 있는 도구나 gif 편집 도구를 보면 다음과 같은 것들을 볼 수 있다. 위 사진처럼 이미지를 자르지 않고 비율 그대로 이미지의 크기만 줄이고 싶다면 어떻게 해야할까? 일단 코드를 먼저 살펴보자. extension UIImage { func resize(multiplier: CGFloat) -> UIImage { let newWidth = self.size.width * multiplier let newheight = self.size.height * multiplier let size = CGSize(width: newWidth, height: newheight) let render = UIGraphicsImageRenderer(size: size) let renderImage = rend..

앱을 사용하다 보면 앱에 필요한 이미지를 업로드를 올릴 일이 발생한다. 흔히 사용하는 카카오톡에서도 그렇고 당근마켓에 팔 물건을 올리기 위해서도 앱에 사진을 올려야 한다. 그렇다면 이럴 때는 뭘 사용해서 사용자가 이미지를 올릴 수 있도록 해야 할까? 일단 이미지를 올릴 수 있도록 하는 것부터 알아보자. UIImagePickerController 일단 사진첩이나 직접 찍은 사진의 이미지를 불러올 수 있도록 하는 것은 UIImagePickerController를 활용할 수 있다. A view controller that manages the system interfaces for taking pictures, recording movies, and choosing items from the user's me..