오늘 = 어제 + a

a >= 1

Swift 13

[iOS] 스탠포드 CS193P 12강

이번 12강에서는 11강에서 다룬 컬렉션뷰에 대한 데모와 UITextField에 대해서 다뤘다. 이번 포스트에서는 UITextField에 대해서 배운 내용을 정리해봤다. UITextField 사용자가 텍스트를 입력할 수 있는 객체다. UILabel과 비슷하면서 편집이 가능하다. 텍스트 기반 입력을 받을 때 일반 텍스트, 이메일, 숫자 등과 같은 다양한 유형의 입력을 받을 수도 있다. Delegate 객체를 사용해서 텍스트 편집 과정에서 변경된 내용에 대한 메서드들을 오버라이드 해서 사용할 수 있다. 키보드는 UITextField가 "first responder"가 될 때 나타난다. First responder는 responder 체인의 첫 번째 responder다. 그럼 responder는 뭘까? UIR..

CS193P 2021.09.16

[iOS] 스탠포드 CS193P 11강

이번 11강에서는 드래근앤드롭(Drag an Drop) 기능과 UITableView, UICollectionView에 대해서 다룹니다. Drag an Drop 강의에서는 데이터를 이동 시키는 Interoperable한(상호운용적인) 방법이라고 소개합니다. iOS 11 이상의 장치와 iPad의 앱 사이에서 드래그 앤 드롭이 작동합니다. 어떻게 구현하나? 드래그 앤 드롭은 제스처 인식기를 쓰지 않고, interaction을 사용합니다. 사용하려는 뷰에 UIDragInteraction, UIDropInteraction을 추가해주는 것으로 간단한 드래그 앤 드롭을 구현할 수 있습니다. 아래의 코드로는 단순한 뷰의 움직임만 구현할 수 있고, delegate의 메서드들을 오버라이드 해야 뷰에 담긴 데이터들을 드래그..

CS193P 2021.09.15

[iOS] 스탠포드 CS193P 10강

이번 10강에서는 멀티쓰레딩과 오토레이아웃에 대해서 다룹니다. Multithreading 기본적으로 UI관련 코드는 메인쓰레드에서 실행됩니다. iOS에서는 UI의 반응성을 중요하게 생각하고, 입장에서 앱이 멈추지 않고 즉각적으로 반응하기를 바라기 때문입니다. Queues 멀티쓰레딩은 거의 iOS의 "큐"에 관한 내용입니다. 메서드들을 큐에 줄 세운 다음 큐에서 메서드들을 꺼내서 실행시키게됩니다. 큐는 "serial"이거나 "concurrent" 일 수 있습니다. 멀티코어 프로세서를 사용하는 기기라면 병렬적으로 실행 할 수 있습니다. 오랜 시간이 걸리는 네트워크 작업 같은 것들은 Global 큐에서 실행하는 것이 좋다고 합니다. Main 큐 👉 UI 관련 기능만을 수행한다 Global 큐 👉 main 큐에..

CS193P 2021.09.14

[iOS] 스탠포드 CS193P 9강

이번에는 9강에 배운 뷰 컨트롤러 라이프 사이클(생명주기)과 스크롤뷰에 대해 정리해봤습니다. ViewController의 생명주기 생명주기를 배워야 하는 이유는 뷰컨트롤러가 생성되면서 호출되는 메서드들 사이에 사용자가 직접 개입하고 싶은 상황이 생기기 때문입니다. 아래와 같이 주기를 갖기 때문에 "Life cycle(생명주기)"라고 합니다. 아래 이미지 외에 추가로 loadView, viewDidLoad 등 다른 메서드도 존재합니다. loadView는 뷰를 만들고 메모리에 올리는 역할을 하고, viewDidLoad는 UIViewController가 메모리에 로드 된 후 수행할 동작을 작성하게 됩니다. 이처럼 iOS에서 뷰컨트롤러의 생명주기에서 작동하는 메서드들을 오버라이드해서 사용자가 원하는 기능들을 구..

CS193P 2021.09.02

[iOS] 스탠포드 CS193P 8강

이번 강의에서는 애니메이션 기능에 대해 배웁니다. 다음은 이전 강의에서 언급했던 UIView Animation을 통해 바꿀 수 있는 값들입니다. frame/center bounds (center를 변화시키는 것과 다르다.) transform (translation, rotation and scale) alpha backgroundColor 위 값들은 UIViewPropertyAnimator를 사용하면서 변경할 수 있다고 합니다. UIViewPropertyAnimator에 애니메이션을 수행하는 코드 블럭을 넣고 실행하게 됩니다. 그리고 "completion block"을 통해 애니메이션이 종료되었을 때 수행할 코드 블럭도 넣을 수 있습니다. UIViewPropertyAnimator 다음은 UIViewPro..

CS193P 2021.09.02

[iOS] 스탠포드 CS193P 7강

Multiple MVCs 이번 강의에서는 MVC가 다른 MVC를 포함하면서 기능을 크고 강력한 앱을 만드는 것을 다루게 됩니다. 위 슬라이드로 MVC가 다른 MVC를 하위 뷰로 갖고 있는 모습들을 보여줍니다. iOS가 제공하는 다른 MVC의 View에 해당하는 Controller들을 제공하는데 99%의 경우 다음 세 가지 중 하나를 쓴다고 합니다. UITabBarController 👉 하단 탭 바 UISplitViewController 👉 Master - Detail 형태를 갖는다 UINavigationController 👉 MVC 간 이동하는 형태로 쓰인다 UITabBarController 화면 하단에 탭을 여러개 포함하고 있는 뷰입니다. 하단의 버튼들은 다른 MVC가 포함되어 있고, tabBarIte..

CS193P 2021.09.01

[iOS] 스탠포드 CS193P 6강

6강에서는 앞서 진행했던 PlayingCard 데모에서 만들었던 카드에 tap, swipe 제스쳐가 발생할 때 카드의 모습을 바꿔주는 데모를 했습니다. 해당 데모는 UIGestureRecognizer를 다루는 것으로 tap, swipe 제스쳐를 처리했고, 각 기능에 대해 소개하는 것으로 6강은 마무리 됐습니다. 이번 6강 정리에서는 UIGestuerRecognizer에 대한 정리와 함께 데모에서 다뤘던 것들을 기록해봤습니다. UIGestureRecognizer Gesture Recognizer는 일반적인 제스처나 제스처의 변경을 인지했을 때 지정된 타겟 객체에 동작 메시지를 보냅니다. var state: UIGestureRecognizerState { get } UIGestureRecognizer는 상태..

CS193P 2021.08.31

[iOS] 스탠포드 CS193P 5강 - 2

Views 👉 뷰는 사각형의 공간을 나타냅니다. 공간은 좌표 시스템에 의해 정의되고 그려집니다. 그리고 터치 이벤트들을 처리하는 기능을 수행합니다. 👉 뷰는 계층적인 특징을 갖고 있는데 특정 뷰는 항상 하나의 superview를 갖고, subview를 갖고 있지 않거나 1개 이상 가질 수 있습니다. 👉 뷰들이 그려지는 순서는 최근에 subview로 추가된 뷰가 가장 위에 그려지게 됩니다. 👉 뷰는 subview의 겹치지 않은 부분을 자를 수도 있습니다. 자르지 않는 것이 기본입니다. (참고한 문장: A view can clip its subviews to its own bounds or not (the default is not to)). 👉 UIView는 뷰 계층의 가장 위에 있습니다. UIView위에..

CS193P 2021.08.20

[iOS] 스탠포드 CS193P 5강 - 1

Error handling Throw Swift 에서 함수는 throw 키워드를 선언부 뒤에 붙여서 에러를 발생시킬 수 있음을 나타낼 수 있습니다. func foo() throws { } do-catch do-catch 구문을 이용해 에러 처리를 할 수 있습니다. 에러가 날 수 있는 구문을 do 블럭 안에 try와 함께 작성하는 것으로 처리할 수 있습니다. do { try 표현식 print("end") } catch pattern 1 { print("pattern 1 에러") } catch pattern 2 { print("pattern 2 에러") } Any & AnyObject Any 👉 함수타입을 포함해서 모든 타입의 인스턴스를 나타낼 수 있습니다. AnyObject 👉 모든 클래스타입의 인스턴스를..

CS193P 2021.08.20

[iOS] 스탠포드 CS193P 4강

Swift 지난 강의에 이어 Swift 문법에 대해 정리하려고 합니다. 다음 강의에서부터는 iOS와 UIKit과 괕은 것들을 살펴볼 예정입니다. Struct Concentration 클래스를 구조체로 바꿨습니다. 이 때 chooseCard() 함수에서 "self is immutable" 이라는 에러가 나옵니다. 구조체의 변수를 바꾸려고 하면 나오는 에러입니다. 이 에러는 함수 앞에 mutating을 명시하면서 해결할 수 있습니다. 🤔 왜 구조체가 필요한가요? 👉 "value type, not reference type" 구조체는 값이 전달될 때마다 복사됩니다. 굉장히 비효율적이죠. 하지만 스위프트는 영리해서 값이 변경될 때만 복제합니다. 이것은 "copy on write" 이라고 합니다. 클래스는 이것이..

CS193P 2021.08.18