개발일기

    [Swift] - UIGestureRecognizer

    [Swift] - UIGestureRecognizer

    제스처 인식기Gesture Recognizer는 일련의 터치를 인식하고, 인식에 따라 동작하는 로직을 분리시킨다.즉, 제스처를 인식하거나 제스처의 변경을 인식하면 연결된 target에 actoin메세지를 보낸다.UIGestureRecognizer 클래스는 이런 Gesture Recognizer가 구성되어야하는 공통의 동작세트를 정의하고 있다.View에 UIGestureRecognizer가 있다면 Window는 터치이벤트를 View에 전달하기 전에 UIGestureRecognizer객체에 먼저 전달하게 된다.UIGestureRecognizer가 전달받은 터치 이벤트에서 특청 제스처로 인식한다면 UIGestureRecognizer가 이벤트를 처리하고 View로 전달된 터치이벤트를 취소하고, 나머지 터치이벤트..

    [Swift] - View의 Cycle

    [Swift] - View의 Cycle

    loadView : LoadView is only called once: when the view needs to be loaded.viewDidLoad : Memory에 올림viewWillAppearviewWillLayoutSubviewsviewDidLayoutSubviewsviewDidAppear뷰가 화면에 그려지는 원리Layout(size와 Position)을 토대로 Drawing 정의뷰는 모두 사각형으로 그려지므로, 메서드 시그니처도 draw(rect:)로 정의된것.뷰는 Constraints 값을 이용하여 Layout(size와 Position)을 결정let constraints1 = [ self.myView.heightAnchor.constraint(equalToConstant: 300), ..

    [Swift] - Animation 정리 2

    [Swift] - Animation 정리 2

    💡 TableView, CollectionView는 ScrollView를 상속받고 있다.contentOffsetvar contentOffset: CGPoint { get set }scroll view의 origin에서 content view의 origin까지 얼마나 떨어졌는지를 나타내는 좌측상단의 포인트. scrollView Bounds의 origin point값콘텐트 뷰의 원점이 스크롤뷰의 원점과 상쇄되는 지점으로 스크롤할 때마다 contentoffset이 변한다.contentOffset이 변하면 스크롤된다.기본값은 CGPointZero(0,0)이다. 💡 CGPointCGPoint는 2차원 좌표계를 표현하는 점으로 x,y값(double형식)을 갖고 있음CGSize너비 및 높이값을 포함하는 구조체wi..

    [Swift] - Animation 정리 1

    [Swift] - Animation 정리 1

    Animation은 우선 Closure기반으로 작성한다.Animate가 실행되는 동안에는 user Information(터치 등)이 일시적으로 disabled되었다가, 끝나면 다시 enable된다.UIView.animate를 사용한 애니메이팅은 자동으로 MainQueue(UI Queue)에서 동작한다.따라서 DispatchQueue.main.async를 사용하지 않아도 된다.origin 값을 변경하는게 아니라 Transform을 변경하는 것이다.Transform.identify를 이용하여 원래값을 얻을 수 있다.애니메이팅이 끝난 후, 동작하는 completionHandler가 존재한다.Animation이 중간에 cancel되는 경우가 있어서 파라미터로 Bool변수를 받는다.애니메이션이 가능한 속성이 정해..

    [Swift] - CollectionView 정리

    [Swift] - CollectionView 정리

    collectionView의 레이아웃FlowLayoutGird형태의 레이아웃을 쉽게 구성할 수 있도록 도와주는 클래스, UICollectionViewDelegateFlowLayout 대리자를 통해서도 지정가능let layout = UICollectionViewFlowLayout() layout.scrollDirection = .vertical // 스크롤의 방향(기본값 vertical)layout.minimumLineSpacing = 20 // 그리드 줄 간격(기본값 10)layout.minimumInteritemSpacing = 20 // 그리드 행 간격(기본값 10)layout.itemSize = CGSize(width:100, height:100) // 각 cell의 크기 설정, 기본 크기..

    [Swift] - ViewController 화면전환

    presentedViewController, presentingViewController의 차이에 대해 보도록 하자.핵심만 먼저 말하면 presentedViewController는 지금 ViewController가 띄우는ViewController,presentingViewController는 지금 ViewController를 띄우는 ViewController다.즉 ViewController A, B, C가 있다고 하고 A가 present로 B를 띄우고, B에서 present로 C를 띄운다고 하면B의 presentedViewController는 C, presentingViewController는 A가 된다.이제 가장 큰 차이를 알았으니 개념에 대해 좀 더 자세히 보도록 하겠다. presentedViewCo..

    [Swift] - ViewController 생명주기

    [Swift] - ViewController 생명주기

    loadView()View를 로드한다 =⇒ View를 메모리에 올리는 함수뷰 컨트롤러는 메모리에 올라온 후, 인스턴스 메서드인 loadView()를 통해 View(화면)을 메모리에 올린다.뷰 컨트롤러의 IUO 저장 프로퍼티로 선언되어 있는 View의 요청으로 이 메서드가 호출되면 View를 로드하거나 생성하여 해당 저장 프로퍼티에 할당한다.뷰 컨트롤러와 연결된 스토리보드(nib)가 있다면 해당 스토리보드에서 View를 로드하며, 스토리보드를 통해 View를 생성 및 초기화하는 경우 loadView() 메서드를 재정의해서는 안된다.만약 View를 코드로 생성했다면 loadView()를 재정의해서 Viewcontroller의 View에 직접 생성한 View를 할당하면 된다.(super.loadView() 불..

    [Swift] - IOS 앱 생명주기

    [Swift] - IOS 앱 생명주기

    생명주기: 앱이 실행되는 동안 다양한 상태를 거치며 변화하는 것을 의미한다. 앱의 현재 상태에 따라 언제든지 앱이 수행할 수 있는 작업과 수행할 수 없는 작업을 결정하기에 이는 중요하다.예를 들면 foreground app은 유저의 주목을 받기에 실행되는 기능들이 우선적으로 수행될 것이고, 반대로 background app은 최소한의 작업만을 수행할 것이다.(유저에게 보이지 않기때문에)그렇기에 앱의 상태 변화에 따라서 적절한 동작을 수행할 수 있도록 조정하는 것이 사용자에게 더 나은 앱 환경을 제공할 것 같다.IOS 13이전 app-based life cycle eventsIOS 13이전에는 앱 기반 생명주기로 구성되어 있었다. UIKit에서는 UIApplicationDelegate가 모든 생명주기 ev..

    [Swift] - View와 Layer 관계

    [Swift] - View와 Layer 관계

    IOS 개발에서 보여지는 부분의 기본을 구성하는 UIView는 사실 그려지는 것이 UIView자체가 아니라 내부 Layer에 그려지는 것이다. 기본적으로는 CALayer로 구성되어 있는 Layer는 그려지는 Content에 대한 Cache를 사용하며 이는 bitmap backing store라고도 불리며 최대한 효율적으로 관리한다. 즉, UIView에서 그려질 때 한번 그려지고 나면 최대한 이 Cache를 사용하고 여러차례 비효율적으로 그려지지 않는다.뷰(view)뷰는 사용자 인터페이스의 기본 구성 요소이다. 화면에 표시되는 버튼, 레이블, 이미지, 입력 필드 등의 모든 요소는 뷰다. 뷰는 사용자와의 상호작용을 처리할 수 있는 기능을 갖고 있다. 터치 이벤트나 제스처와 같은 사용자 입력을 감지하고, 이벤..

    [Swift] - Xcoordinator 정리해보자

    Presentablepublic protocol Presentablevar viewController : UIViewController! { get }뷰 컨트롤러 객체func router(for route: R) → StrongRouter?Route타입 인자(어디화면으로 갈건지 정보)를 받아서 StrongRouter를 returnfunc presented(from presentable: Presentable?)Presentable객체를 인자로 받음, 띄워주는 것 같다.func registerParent(_ presentable: Presentable & AnyObject)Prsentable프로토콜을 따르는 객체이면서 동시에 클래스 타입인 객체를 인자로 받는다부모를 등록하는 것 같다func childTra..