일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- button
- Chart
- ios
- 개발
- charts
- Android
- Storyboard
- graph
- 개발자
- PyQt5
- UIButton
- 그래프
- UIKit
- Apple
- modal
- TableView
- kotlin
- PyQt
- library
- Swift
- Python
- alamofire
- Chrats
- Xcode
- 어플리케이션
- UITableView
- 라이브러리
- cocoapods
- androidstudio
- ui
- Today
- Total
목록iOS Dev (133)
Jiwift
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bM3QpA/btsyDQJFy5e/ZA2RsFHZuGbritep5RBh70/img.png)
import UIKit // MARK: - UINavigationController 생성 static internal func createNavigationController(controller: UIViewController) -> UINavigationController { // 실제 첫 화면이 되는 ViewController 인스턴스 생성 let childViewController: UIViewController = controller // NavigationController을 사용할 경우, ViewController를 rootViewController로 갖는 NavigationController을 생성해야한다. let parentNavigationController: UINavigationCon..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/JFtyV/btsyuIsQHYJ/nMEceA1GE9F5KKvpSgwb6k/img.png)
요약: 앱스토어 개발자 연동된 계정이 아닌 수동으로 프로비저닝 인증을 하는 경우 Custom을 통해서 배포를 진행한다. Xcode 앱스토어 배포 에러 Add a new account in the Accounts preference pane or verify that your accounts have valid credentials. xcode couldn't find any ios app development provisioning profiles matching xcode no profiles for were found 이번에 Xcode 15로 업데이트하면서 Organizer 화면이 변경되었습니다. 저는 개인 프로젝트는 당연하게 메뉴에 적혀있는 대로 TestFlight & App Store로 배포를 진..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bu1SXq/btsyEv6ngZa/YwnJNtFNyWe7IHEfqPOW3k/img.png)
Root View를 변경하기 위해서 사용했던 코드 두가지 방법을 공유합니다. 설명은 따로하지 않고, 제가 기록용으로 남기기 위해서 작성해둡니다. 응용을 통해서 원하는 방식으로 구현하세요...! import UIKit // MARK: - UIWindow의 rootViewController를 변경하여 화면전환 internal func changeRootViewController(newStoryboard: String, nextViewController: String) { DispatchQueue.main.async { let newStoryboard = UIStoryboard(name: newStoryboard, bundle: nil) let newViewController = newStoryboard.in..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/47kje/btsx451gDYA/cTBbGeZtGT12im7Fwij6D1/img.png)
Xcode를 통해 개발을 완료하고 앱을 배포하려면 앱스토어에 등록을 진행해야한다. 그러기 위해서는 앱스토어에 등록하기 위한 앱을 생성해줘야한다. 그 절차를 개발자 센터에서 진행할 수 있다. (기억으로는 이 절차가 없어도 Xcode를 통해 Archive하면 자동 등록되었던 것 같은데... 그게 아니라면 개발 단계에서 Capabilities같은 옵션을 만지다가 어느순간 등록했을 수도 있다.. 내 머리속 지우개) 일단 방법은 간단하다. 개발자 센터에서 로그인하고 앱 메뉴로 이동해준다. Account - Apple Developer 로그인 - Apple idmsa.apple.com 들어가면 내가 볼 수 있는 앱 목록이 나타단다. 당연하게 + 버튼을 눌러서 '신규 앱'을 선택해준다. 그럼 이제 신규 앱의 기본 정..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cLpaqV/btsx1Qqe7rl/yK1pkvb7YJk1SKhHbmq3b0/img.png)
Apple Developer Apple Developer Apple 플랫폼에서 개발할 절호의 기회입니다 developer.apple.com 애플 개발자 센터에서 Identifiers 메뉴로 이동하고 바로 보이는 + 버튼을 눌러서 ID 등록 절차를 진행한다. 상단에 App IDs를 선택하고 'Continue' 버튼을 눌러준다. 유형은 App ID를 등록할 예정이니 App을 누르고 'Continue'를 눌러준다. Description - 앱을 알아볼 수 있게 이름을 작성하든한다. Bundle ID - 프로젝트에서 사용하는 혹은 사용할 예정인 Bundle ID를 입력해준다. Capabilities/App Services - 사용할 옵션과 서비스이다. 나중에 다시 설정 가능하다. Explicit - 단일 앱 번..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/xAXNH/btsw66hNHKp/dIuluEkrfwQdzxHxp58ZH0/img.png)
안녕하세요. 이번에는 Xcode에서 iOS 프로젝트를 생성하도록 하겠습니다. Xcode를 처음 실행하면 버전과 프로젝트 생성 및 불러오기를 진행할 수 있습니다. 맨 위 프로젝트 생성 메뉴를 선택해서 넘어갑니다. 1. 새로운 프로젝트 생성 2. Git에서 프로젝트 Clone 3. 맥에 존재하는 프로젝트 불러오기 프로젝트 템플릿을 고를 수 있습니다. iOS, iPad 앱을 만들기 위해서는 iOS -> App을 선택해주세요. Product Name: 프로젝트 이름을 설정합니다. Team: 소속한 Team을 선택합니다. 애플 아이디가 로그인되어있다면 선택 가능한 팀이 보일 것 입니다. Organization Identifier: 보통 소속된 도메인에서 www를 빼고 역순으로 작성합니다. 없어도 비슷하게 양식 맞..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/F8KGE/btswPZb7cZc/X39dtV5IbP4y27F9YzAg3k/img.png)
해당 문제는 웹뷰에서 나이스 인증 화면을 window.open 방식을 통해서 구현하는 경우 발생하던 문제였다. 개발 환경 구현 방법에 따라서 문제가 해결 될 수 있고 아닐 수 있으니 빠르게 빠르게 시도해보고 아니라면 다른 방법을 시도해보자. 처음에는 App Transport Security Settings - Allow Arbitrary Loads 옵션을 YES로 설정하고 할때는 문제가 생기지 않았다. 후에 NO로 바꿔주니 나이스 화면이 보이지 않는 문제가 있었다. 그래서 예외 처리로 Exception Domains에 현재 프로젝트에서 사용하는 나이스 주소를 넣어주고 NSExceptionRequiresForwardSecrecy 옵션을 NO로 설정해주었다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/1KwkC/btssHf3Mqou/P2pfrWtok9XE7DQXNYCkd0/img.png)
Xcode에서 UIColor 에셋 설정을 완료하고 다크모드와 라이트모드를 적용을 했으나를 사용하는 다크모드 혹은 라이트모드가 반영되지 않는 겨우가 있습니다. 분명 화면 모드를 변경했고 다른 애들은 다 바뀌었는데, 특정 누군가가 바뀌지 않는 경우를 저는 경험했습니다. 첫 번째로 확인해야하는 곳은 UIColor 에셋입니다. 여기도 문제가 없이 제대로 해두었다면, UIColor를 cgColor로 사용했는지 확인을 해야합니다. self.textFieldBoxView.layer.borderColor = UIColor(named: "surface200-Dark1")?.cgColor 위와 같이 UIColor를 cgColor로 적용하고있는 경우 변경이 적용되지 않습니다. 이유로는 cgColor가 다이나믹 컬러를 지원하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bBjsO0/btssMHLZ9qJ/7eF5THclkaF2jTmkuTTLzk/img.jpg)
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { if previousTraitCollection != nil { // 다크모드 라이트모드 변경후 수행 할 코드 if previousTraitCollection?.userInterfaceStyle == .dark { // 다크모드 상태입니다. } else { // 다트모드 상태가 아닙니다. } } } 다크모드를 변경을 감지하고 싶을때 사용하면 되는 코드입니다. UIView와 UIViewController를 상속받으면 사용 가능합니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bNZcke/btspolmEl4f/dhETEH86vVpKP6ttsV0h9k/img.png)
내가 생각하고 내가 경험하고 작성하는 UITableView.. 들어가기 전 UI작업을 하다보면 실제 화면 사이즈보다 컨텐츠 내용이 더 많은 경우를 고려해서 작업을 해야합니다. 이런 경우 Scroll을 사용하게됩니다. iOS에서는 UIScrollView(UIKit), ScrollView(SwiftUI)가 우리를 도와주게 됩니다. 오늘 글은 UIScrollView와 비교를 통해서 UITableView를 알아보려고합니다. 제일 쉽게 접하는 곳은 웹툰이 있습니다. UIScrollView를 사용하면 다양한 해상도를 지원하기에도 좋습니다. UITableView를 왜 쓰는데? 위에서 설명한대로 Scroll 가능한 도구가있는데 왜 UITableView를 쓰는지 궁금할 수 있습니다. 실제로 UIScrollView와 UI..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bCSq6r/btsl5jqsnLN/ShdcjRAznGF7IFvz2N68w0/img.png)
앱에서 특정 사용자에게만 제공되는 정보가 있다거나, 유료 컨텐츠를 제공해야하는 상황에서 화면이 캡처되는 것은 서비스하는 입장에서 매우 큰 걸림돌입니다. 이번 글에서는 화면 캡처와 녹화를 방지하고 다른 화면이 캡처되는 동작까지 수행해보겠습니다. Apple은 iOS에서 화면 녹화, 화면 캡처를 공식적으로 만는 방법을 제공하지 않습니다. 하지만 TextField에 있는 isSecureTextEntry를 통해서 이 기능을 구현할 수 있습니다. extension UIView { func preventCapture() { DispatchQueue.main.async { let textField = UITextField() textField.isSecureTextEntry = true self.addSubview(t..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/B9qz3/btslB0eBOfL/RSQ9NZHPmBFc0Mj9ktiwh0/img.png)
1. Xcode에서 Assets으로 이동 2. "+" 버튼을 누르고 Color Set을 추가 3. 색상을 원하는 이름으로 변경 4. 원하는 색상을 설정. - Appearance는 Any, Light, Dark로 나뉜다. - 위 사진 Any Appearance와 Dark를 설정하면 Light모드에서 Any Appearance 색상이, Dark모드에서 Dark 색상이 표시된다. 코드로 사용하기 위해서는 아래와 같이 적용하면된다. // 사용법 self.myView.backgroundColor = UIColor(named: Assets이름) // 실제 사용 self.myView.backgroundColor = UIColor(named: "myColor")
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bLjWPI/btslCIYNJlQ/3XPuqcZqLz0YOch99DjDq1/img.png)
self.myView.backgroundColor = UIColor.red self.myView.backgroundColor = UIColor(named: "myColor") self.myView.backgroundColor = UIColor(red: 0.0824, green: 0, blue: 0.1765, alpha: 1.0) backgroundColor를 사용하면 UIView 색상을 변경할 수 있습니다. backgroundColor는 UIColor를 값으로 받는데 UIColor가 지원하는 다양한 방법으로 구현이 가능합니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/NUCs4/btskRaJaXzr/9DRoI8I1NcxJKE4FKDQdKk/img.png)
우선 브릿지 삭제 방법은 forName자리에 삭제하고 싶은 userContentController 입력 self.loginWKView.configuration.userContentController.removeScriptMessageHandler(forName: "bridge") 사실 이건 나만이 겪을 것 같은 상황이다. 다른분들은 이런 상황이 당연하게 없겠지만.. 혹시나 해서 기록 웹이 이미 개발이 완료된 상태였다. 그 와중에 나는 하나의 ViewController에서 두개의 Webkit을 사용해야했고, 브릿지 이름 또한 똑같은 두 화면이었다. 해보면 바로 알겠지만 userContentController는 같은 이름을 두개의 브릿지에 등록할 수 없다. self.oneWk.configuration.use..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bxryd6/btskRu1PolQ/XlGAURhyD1pdCDKlkJpF5k/img.png)
세상에 많은 앱들은 네이티브 + 웹으로 구성되어있다. 코어한 부분은 네이티브로.. 수정이 많지만 배포를 줄이고 싶은 경우, 이미 웹으로 만들어서 두번 작업하기 싫은 경우. iOS에서는 WebKit을 사용해서 네이티브 앱 안에서 웹을 보여준다. 단순하게 보여주는 것 뿐만 아니라 서로 소통하게 도와준다. 그게 바로 userContentController다. 적용은 너무 간단하다. self.loginWebKitView.configuration.userContentController.add(self, name: "bridge") 원하는 WebKit에 위 코드를 통해서 등록한다. name 자리에 웹에서 전송하는 브릿지와 동일해야한다. 위를 등록해두면 bridge라는 이름으로 메세지가 들어오게되고 그 안에 데이터를..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bsi9sz/btskTJp38zZ/BOKmHK860AKy9PLKnBXUvK/img.png)
정답이 아닐 수 있습니다. 각자 상황에 맞는 방법을 찾아서 사용하시면 됩니다. 인터넷을 하다보면 새로운 창이 필요할 때가 있습니다. Nice 본인인증과 같은 상황이조. 근데 우리가 사용하는 앱들은 창이 여러개가 보여지지 않습니다. 대부분 사용하는 앱들은 회원가입을 진행하거나 물건을 구매할때 순차적으로 진행되는 화면을 보게됩니다. PC 환경 처럼 새로운 창을 띄우는 경우는 드물다고 봅니다.(기획에 따라 다름) 근데.. 역시 예외 상황은 꼭 생기고 PC 환경 처럼 새로운 탭을 열어서 작업이 필요한 경우가 있습니다. 이유는 모릅니다. 한가지 상황을 생각해봅시다. 어딘가에 회원가입을 웹뷰로 만드는 서비스가 있다고 생각합니다. (회원가입 부분은 프론트엔드 개발자가, 네이티브 WebKit과 브릿지 확인은 iOS 개..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/boGlD1/btseqYnwBKE/nuOIWqUeCc1eoOEMAVcIwk/img.png)
카카오내비, TMAP(티맵)과 같은 볼륨 조절 iOS에서 어플리케이션을 만들다 볼륨을 조절해야하는 상황이 생겼다. 인터넷에서 제일 먼저 나오는 방법을 찾아서 적용하면 위 사진처럼 볼륨 조절 모양이 나오지만 원하는 결과는 이루었다. 하지만 기기 전체 볼륨이 조절되기 때문에 사용성에서는 많이 안좋다고 생각되어서 더 찾아보았다. class TTSManager { static let shared = TTSManager() private let synthesizer = AVSpeechSynthesizer() var volume: Float = 1.0 internal func play(_ string: String) { let utterance = AVSpeechUtterance(string: string) utt..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bpvil5/btrX6h3TbSh/YLGGiK0QMVXKweFB8iKrH0/img.png)
라이브러리를 찾다 보면 위와 같이 깃 주소를 통해서 다운로드하는 방법이 있습니다. SPM을 사용한 방법으로 깃 주소만 알고 있으면 간단하게 설치가 진행됩니다. 처음에 cocoapods을 사용하다 SPM을 사용하니 pod 설치 과정에 생기는 파일들을 따로 신경쓰지 않아도 되는 편리함이 있습니다. File - Add Packages 메뉴를 들어갑니다. Packages 목록이 출력됩니다. 여기서 원하는 라이브러리를 검색하여 설치할 수 있습니다. 깃 허브 링크를 바로 붙여넣기해도 검색이 가능합니다. Rule을 설정하고 Add Package를 누르면 설치 가능한 라이브러리를 불러오기 시작합니다. 설치 가능한 목록이 표시되면 선택하고 추가로 진행하면 됩니다. 위 사진은 하나이지만 RxSwift 같은 라이브러리들은 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bp2eUa/btrVT7JZGsw/YVTxOgsWwyKfCLF2mFcgM1/img.png)
for key in UserDefaults.standard.dictionaryRepresentation().keys { UserDefaults.standard.removeObject(forKey: key.description) } 사용을 원하는 곳에 코드를 작성 SwiftExample/UserDefatults at main · wlxo0401/SwiftExample (github.com) GitHub - wlxo0401/SwiftExample: My study, record and share My study, record and share. Contribute to wlxo0401/SwiftExample development by creating an account on GitHub. github.com
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/tdyZK/btrVAKuH3H0/FBa1B5nG8ug1Ky3sncGhPk/img.png)
안녕하세요. 오늘은 라디오 버튼을 구현해보도록 하겠습니다. 라디오 버튼은 항목을 선택하는 기능을 제공하는데요. 체크 박스와 다른 점이 있다면 중복으로 선택이 안 되는 것입니다. 다수의 선택지에서 한 가지만 선택할 수 있는 버튼이라고 생각하시면 됩니다. UIKit에서는 따로 RadioButton을 제공하지 않아서 UIButton을 사용해서 기능을 만들어야 합니다. 저는 UIButton 3개를 배치했고 간단하게 StackView로 묶었습니다. StackView Distribution을 Fill Equally로 설정합니다. UIButton의 Tag를 지정해줄 예정입니다. Tag를 통해서 해당 버튼이 어떤 버튼인지 비교할 수 있습니다. 저는 위에서부터 0,1,2로 지정해 주었습니다. Button 3개를 IBOu..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/spT17/btrVzAeQdPz/yGUJcHXcvgXMffVaKt3k3K/img.png)
iOS에서는 기본적으로 지원하는 저장소가 몇 가지 있는데 그중에 가장 사용하기 간편한 UserDefaults를 알아보겠습니다. 간단한 방법으로 앱의 아무 곳에서 불러오고 저장할 수 있습니다. 저장 가능한 데이터로는 일반 유형인 floats, doubles, integers, Boolean values, URLs, String 뿐만 아니라 NSData, NSString, NSNumber, NSDate, NSArra, NSDictionary도 가능합니다. 키와 데이터로 구성되어 사용하기 때문에 설정 값, 신호같은 간단한 데이터를 저장하는 데 사용됩니다. 많은 양의 데이터는 DB를 다루는 친구들을 사용하는 게 좋습니다. 자세한 설명은 아래 Apple 공식 문서를 읽어주세요. UserDefaults | Appl..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/oJYRC/btrVwe4C4Vm/LukXqksP3nMxKebKbkVk21/img.png)
코드 vc.modalPresentationStyle = .fullScreen 사용법 Present하는 상황에 'modalPresentationStyle'를 사용해서 전체 화면을 적용한다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/zRNse/btrVzZkLQbK/WK43MvksVvNcCeEBoUtGKk/img.png)
코드 guard let vc = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else { return } self.present(vc, animated: true) [iOS/Swift] Push ViewController Code, Navigation Controller, 화면 이동 코드로 — Jiwift (tistory.com) [iOS/Swift] Push ViewController Code, Navigation Controller, 화면 이동 코드로 코드 guard let VCname = self.storyboard?.instantiateViewCont..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bVY7kt/btrVpZkme7a/p4wT45qcyE1hFTxdTPfSb0/img.png)
코드 guard let VCname = self.storyboard?.instantiateViewController(withIdentifier: "ViewControllerName") as? ViewControllerName else { return } self.navigationController?.pushViewController(VCname, animated: Bool) 사용법 Push를 사용하기 위해서는 ViewController가 Navigation Controller에 있어야 하는 조건이 있어 그 작업을 먼저 해주어야 한다. 코드로도 가능하지만 일단 Storyboard로 정리를 할 예정이다. 원하는 ViewController를 선택하고, [Editor -> Embed in -> Navigati..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ujG7R/btrUKnHrWkd/ZWH8zYAneNkpRl9f1qtwVK/img.png)
Swift UIColor Picker (ralfebert.com) Swift UIColor Picker www.ralfebert.com 위에 보이는 값들을 사용해서 Swift에서 사용 가능한 UIColor로 변환해줍니다. 아래 코드 블록은 변환된 결과 예시입니다. 보시는 것과 같이 다양한 방법으로 제공해줍니다. #colorLiteral(red: 1, green: 0.8, blue: 0, alpha: 1) /* #ffcc00 */ UIColor(hue: 0.1333, saturation: 1, brightness: 1, alpha: 1.0) /* #ffcc00 */ UIColor(hue: 48/360, saturation: 100/100, brightness: 100/100, alpha: 1.0) /* #..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/LZkHA/btrUolosJ6l/QFvHwtIwYDRCFZuJUYHwb0/img.gif)
오늘은 위와 같이 좌우로 움직이는 CollectionView를 만들어보려고 합니다. 평소에 저는 이 방법을 검색할 때 Horizontal Card View 이런 식으로 찾았습니다. 하지만 어느 날 우리 빛과 같은 종권님 블로그에서 Carousel이라는 단어로 글로 올리신 걸 보고 찾아봤습니다. 왼쪽이 Carousel 결과이고 오른쪽이 horizontal card view입니다. 확실히 검색어에 따라서 원하는 정보량이 달라지긴 하네요. 이렇게 용어를 하나 배웠습니다. 하지만 오늘은 종권님 블로그에 작성된 내용을 이용해서 진행해보려고 합니다. [iOS - swift] 1. 스크롤 영역을 암시해주는 Carousel 구현 방법 (UICollectionView, 수평 스크롤 뷰, paging 구현) (tistor..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nuZrt/btrSHJztyZB/EnYINxIKEwxzkseXv0qrvk/img.png)
오늘은 위에 동작하는 모습과 같이 Custom Modal을 만들어 보겠습니다. 개발자마다 만드는 방법이 다양하게 있고 제가 사용하는 방법도 쉽게 만들 수 있는 방법이라 이미 아시겠지만 기록 차원에서 작성합니다. 관련된 검색어로는 custom modal, half modal, modal 등이 있으니 찾아보시면서 원하는 결과를 얻으시면 될 것 같습니다. 처음 이걸 만든 이유는 그때 당시 실력이 없던 저는 남들이 만든 라이브러리를 사용했지만 원하는대로 디자인을 변경하는 부분에서 어려움을 겪었고 half-modal과 같은 방식으로도 구현이 필요해서 연습겸 만들어보자! 라는 생각으로 진행했습니다. 요즘은 UISheetPresentationController | Apple Developer Documentation..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/5xUCZ/btrRAL5VOId/hr5mXKQ2dxHcddY2675Vz1/img.png)
[iOS/Swift] Code로 디바이스 화면 세로 고정 func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { return UIInterfaceOrientationMask.portrait } AppDelegate에 위 코드를 넣어주세요. 그럼 적용 완료입니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/sutY8/btrQOOVDlo4/BEfaPV9ezHNGqLIFA0OuP1/img.png)
오늘은 UIButton에 addTarget을 알아볼 시간입니다. 지난 시간에는 IBAction을 통해서 버튼 동작을 수행했지만 이번에는 IBAction을 사용해서 구현할 생각입니다. Stoyboard에 Button을 가지고 오는 방법은 아래 링크에서 확인할 수 있습니다. IBAction을 IBOutlet으로 가지고 오면 됩니다. [iOS/Swift] UIButton 기본 사용법, @IBAction 버튼 만들기, 클릭 — Jiwift (tistory.com) [iOS/Swift] UIButton 기본 사용법, @IBAction 버튼 만들기, 클릭 안녕하세요. 오늘은 iOS 개발에서 제일 기본 중에 기본! UIButton을 사용해볼 겁니다. 어느 때와 같이 프로젝트를 생성합시다. 상단 '+' 버튼을 눌러도 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bigqta/btrQJOuCIxH/AzU40g9i07mTbTWe0HjX2K/img.png)
안녕하세요. 오늘은 iOS 개발에서 제일 기본 중에 기본! UIButton을 사용해볼 겁니다. 어느 때와 같이 프로젝트를 생성합시다. 상단 '+' 버튼을 눌러도 괜찮고, [Shift + command + L] 단축키를 사용해서 UIKit Objects 창을 열어 줍니다. 해당 단축키를 코드 화면에서 입력하게 되면 스니펫을 선택할 수 있는 화면이 나오니 당황하지 않고 Storyboard로 이동해서 다시 단축키를 수행합니다. 그럼 위와 같은 창이 나오는데 여기서 UIButton을 검색하면 아래 검색 결과가 나옵니다. 그리고 저 Button을 선택과 동시에 드래그하듯이 움직이면 바로 배치가 가능한 상태로 변하고 ViewController 위에 원하는 위치에 올려주면 됩니다. 그럼 이렇게 Button이 배치가 ..