iOS 기반의 어플리케이션 내에서 웹 기반 컨텐츠를 제공하려면 UIWebView 또는 WKWebView를 사용해야 한다. (iOS 8.0이상의 경우 WKWebView 사용 권장) 두 개의 View는 어떻게 동작하는지, 또 어떤 차이점이 있는지 알아보았다. UIWebView 어플리케이션 내에서 웹 기반 컨텐츠를 보여주기 위해 사용되는 View이며, iOS 2.0 이상부터 사용할 수 있다. - loadHTMLString(_:baseURL:) 메서드를 사용하여 로컬의 HTML 파일을, 혹은 loadRequest(_:) 메서드를 사용하여 웹 컨텐츠 로딩을 시작한다. - stopLoading( ) 메서드를 사용하여 로딩을 중지할 수 있으며, isLoading 프로퍼티를 통해 웹 뷰의 로딩 상태를 확인 할 수 있다..
* Mobile Accessibility (모바일 접근성) 이란? Mobile(모바일) + Accessibility(접근성) 으로 다음과 같이 정의를 내렸다. "모바일 기기 또는 어플리케이션의 설계 및 구현 단계에서 사용자를 보조하는 다양한 기능을 고려하여 제공함으로써, 사용자가 모바일 기기를 보다 편하게 사용 할 수 있게 하는 정도" 모바일 OS인 iOS와 Android는 더 나은 접근성을 보장하기 위하여 갖춰놓은 기능 들이 있는데, 대표적으로 시각장애인 들을 위한 Voice-Over (iOS), Talk-Back (Android) 이 있다. 지금부터 iOS에서 제공하는 Voice-Over의 경우에, Application 단에서 더욱 더 Accessible하게 동작하도록 하기 위한 방법 들을 알아보자...
View Controller를 Presenting 할 때 사용 할 수 있는 Modal presentation style을 알아보자. 1. fullScreen - presented view가 screen을 덮는다. - presenting view controller에 속한 view들은 presentation 완료 후 제거 된다. 2. pageSheet- iPad와 같은 Regular-width, Regular-Height 디바이스에서, presented view의 width는 세로 방향에서의 스크린의 width로, height는 스크린의 height로 설정 된다. - 덮이지 않는 영역은 사용자가 상호작용하지 못하도록 흐리게 표시 된다. - 세로 방향의 경우 이 옵션은 기본적으로 fullScreen과 동일하..
* 이 문서는 Apple Documentation을 번역한 문서입니다. 문제가 있을 경우 의견을 주시면 반영토록 하겠습니다. Overview앱은 responder 객체를 사용하여 이벤트를 받고 처리합니다. responder 객체는 UIResponder 클래스의 모든 인스턴스를 말하며, 공통 서브클래스는 UIView, UIViewController, and UIApplication 등이 포함됩니다. Responder는 원시 이벤트 데이터를 수신하고 이벤트를 처리하거나 다른 Responder로 전달해야합니다. 앱이 이벤트를 받고 있을 때, UIKit는 자동으로 해당 이벤트를 first responder 라고하는 가장 적합한 Responder 객체로 보냅니다. 처리되지 않은 이벤트는 responder에서 응용..
UIView 내의 레이아웃 관련 메소드인 layoutIfNeeded()와 setNeedsLayout(). 두 메서드 모두 layoutSubViews()를 호출하는 메소드이다. 먼저, layoutSubViews()에 대해 알아보자. * layoutSubviews()- 서브 뷰들을 배치한다. - 기본 구현에서는 서브 뷰 들의 크기와 위치를 결정하기 위해 설정한 제약조건을 사용한다. (iOS 5.1보다 상위 버전에서) - 서브 뷰의 정확한 레이아웃을 배치하기 위해 재정의하여 사용 할 수 있다.(서브 뷰의 프레임 사각형을 직접 설정할 수 있다) - 서브 뷰의 오토 리사이징과 제약 조건 기반 동작이 원하는 동작을 제공하지 않는 경우에만 재정의하여 사용해야한다) - 이 메소드를 직접 호출하면 안되고, setNeed..
UIView와 UIViewController를 상속하여 지정이니셜라이저를 작성할 때, 다음과 같은 에러와 마주하게 된다. 'required' 이니셜라이저인 'init(corder:)'를 정의해주어야 한다는 에러인데, 다음과 같이 정의만 해주면 에러 문구는 사라진다. required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } 왜 이런 에러가 발생하며 위와 같은 작업을 해주어야 할까? 바로, 이 NSCoding이라는 녀석 때문이다. public protocol NSCoding { public func encode(with aCoder: NSCoder) public init?(coder aDecod..