일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 앱 비교 프로젝트
- 애플 디벨로퍼 아카데미 21주차 회고
- SWIFT
- react
- 제앱소
- iOS 개발 오류
- 네이버 치지직
- swift문법
- 애플 디벨로퍼 아카데미
- 동시성 프로그래밍
- 데이터베이스 공부
- Apple Developer Academy @ POSTECH
- useReducer
- Swift 디자인패턴
- 데이터베이스
- 소프트웨어분석및설계
- StateObject
- 운영체제
- Swift 문법
- ObservableObject
- 치지직
- Swift 기능
- OS
- 숭실대
- 애플 디벨로퍼 아카데미 후기
- thread safe
- memoization
- 네이버 부스트캠프
- global soop
- ObservedObject
- Today
- Total
목록분류 전체보기 (285)
사과하는 제라스
iOS의 시작을 스토리보드를 써버릇을 했다. 하지만 React Native에 익숙한 나는 이런 IB(Interface Builder, 스토리보드의 도구들을 이용해서 UI를 구현하는 방식) 구현보다는 차라리 코드로 하는 것이 익숙하다. 한번 코드로 Auto-Layout을 잡는 방법을 정리해보자. 일단 다음과 같이 잡을 수 있다. func setUpAutoLayout() { view.addSubview(stackView) view.addSubview(passwordResetButton) //코드로 짜면 이 뷰가 자동으로 Frame 기준으로 오토 레이아웃을 잡아줌. 그래서 이걸 꺼줘야 함. emailInfoLabel.translatesAutoresizingMaskIntoConstraints = false em..
어!? 이상하다! 왜 그러지? 코드로 View를 그렸고 그걸 실행도 잘 해주었는데도 View가 안보일 때가 있다. 무엇이 문제인 걸까? 아마 그 중 하나는 다음과 같은 코드를 작성해주지 않아서일 것이다. //코드로 짜면 이 뷰가 자동으로 Frame 기준으로 오토 레이아웃을 잡아줌. 그래서 이걸 꺼줘야(false) 함. abcView.translatesAutoresizingMaskIntoConstraints = false 이렇게 해주면 오토레이아웃이 자동으로 설정되는 걸 막고 수동으로(코드로) 작성해준 UI가 보여질 수 있다.
View를 직접 코드로 그리다보니 해당 View의 모서리를 둥글게 만들고 싶을 때가 있다. 이때는 다음 코드를 쓰자. // tempView의 모서리를 8px로 깎는다. tempView.layer.cornerRadius = 8 // tempView 내부의 text나 그림 같은 요소들이 밖으로 삐져나와도 잘려져서 나온다. tempView.layer.masksToBounds = true 이렇게 주면 충분히 좋은 모습의 뷰를 얻을 수 있다.
delegate... delegate는 위임자라는 뜻이다. 어떤 것에 대한 대리자, 즉, 수행할 사람이란 거다. 밑에 코드를 한번 보자. import UIKit // 대리자에 대한 프로토콜 protocol RemoteControlDelegate { func channelUp() func channelDown() } // 리모콘 클래스(유저와 직접 대면함) class RemoteControl { var delegate: RemoteControlDelegate? //사실상 여기에는 내가 이 리모콘으로 무엇을 작동할지 적는 것임. func doSomething() { print("리모콘의 조작이 일어나고 있음") } func channelUp() { // 어떤 기기가 리모콘에 의해 작동되는지 몰라도 됨 del..
React Native에서는 TouchableWithoutFeedback란게 있다. TextInput을 감싸주면 TextInput 외부를 클릭 시의 동작에 대한 설정이 가능했다. 이곳에 Keyboard.dismiss 함수를 적어두면 키보드가 내려가도록 할 수 있다. 그렇다면 Swift에서는 이것을 어떻게 구현할까? override func touchesBegan(_ touches: Set, with event: UIEvent?) { self.view.endEditing(true) } 이렇게 구현하면 된다. 이러면 endEditing으로 self(ViewController)의 view 내에서의 편집이 끝나도록(endEditing(true)) 하기 때문에 가능한 거다. 공식문서를 통해 확인하면 touches..
TextField를 구현하려고 하다보면 delegate 패턴을 많이 쓰게 된다. 이때, UITextFieldDelegate 프로토콜을 채택해서 사용하게 되고, 이 프로토콜은 여러 함수들을 구현할 수 있게 되어 있다. 이 여러 함수들의 기능을 살펴보자. //TextField의 편집을 시작할 수 있게 할지 말지 결정하는 함수 func textFieldShouldBeginEditing(UITextField) -> Bool //TextField의 편집이 시작되고 나서 실행되는 함수(즉, 커서가 깜빡이는 순간 실행됨) func textFieldDidBeginEditing(UITextField) //TextField의 편집을 중지할 수 있게 할지 말지 결정하는 함수 func textFieldShouldEndEdit..
벌써 2주차가 흘렀다. 지난 4주차 챌린지 회고 이후 네이버 부스트캠프 관련해서는 글을 올리지 않았는데 다시 일정한 흐름을 유지하고 조금씩 발전하기 위해 멤버십 합격부터 1,2주차 회고까지 글을 써본다. 멤버십 합격 지난 8월, 챌린지가 끝난 후 멤버십을 기다리면서 따로 Swift 강의를 듣고 있었다. 부스트캠프를 떨어진다고 실패자인 것도 아니고, 모든 것이 끝나는 것이 아니기에 계속 공부를 하고 있어야 마음도 추스릴 수 있을 것 같았다. 그래서 한편으론 '아유~떨어지면 어때~'이러면서도 사실 붙고 싶은 마음이 한 사발이기는 했다...ㅜㅜ 챌린지 합격 발표가 하루 일찍 났던지라 멤버십도 하루 일찍 날 것이란 생각에 17일 생일날 긴장의 끈을 놓지 못했다. 발표 순간까지도 아침부터 카페에서 공부를 하며 감..
Timer를 써보면 schedule을 할당해주는 방법이 여러가지가 존재한다. 그 중 2가지를 소개하고자 한다. 구현을 하다보면 정해진 간격의 시간마다, 정해진 시간동안 어떤 일을 수행하는 동작을 구현해야 할 때가 생긴다. 이러한 것을 돕는 것이 바로 timer다. 이전에 부스트캠프를 하면서도 사용했던 것인데 이번 공부를 하면서 가볍게라도 정리를 해보자! 1. 클로져 함수 @IBAction func startButtonDidTapped(_ sender: UIButton) { self.timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { [self] _ in if number > 0 { number -= 1 self.slider.setValu..