iOS 11주차 (11.21)
View Controller추가시 Item Scene이라는 이름으로 추가됩니다. 이 이름을 먼저 변경해야됩니다.
이것을 안할시 Item Scene이라는 이름으로 다른 Scene이 추가가 되기에 작업하는데 어려운이 있습니다.
BMI Scene는 ViewContoller.swift와 연결이 되어있지만
이번에 추가한 Video Scene는 아무것도 연결되어 있지 않습니다 때문에 Identity inspector에서 연결을 해야됩니다.
이렇게 Identity inspector에서 연결을 해야지만 VideoViewController와 연결이 된겁니다.
비디오가 나오게끔 소스 작성중 알아둬야 할 것들을 캡처해서 올렸습니다.
present 함수는 iOS의 UIViewController 클래스에서 제공되는 메서드로, 현재의 뷰 컨트롤러 위에 다른 뷰 컨트롤러를 모달 방식으로 표시하는 데 사용됩니다. 이 메서드는 사용자 인터페이스의 흐름을 관리하는 데 중요한 역할을 하며, 여러 가지 상황에서 유용하게 사용됩니다.
기본 사용법
present 메서드는 다음과 같은 형식으로 사용됩니다:
swift
present(viewControllerToPresent, animated: Bool, completion: (() -> Void)?)
viewControllerToPresent: 표시할 뷰 컨트롤러의 인스턴스입니다. 이 뷰 컨트롤러는 모달로 표시됩니다.
animated: Bool 값으로, true로 설정하면 모달 전환이 애니메이션과 함께 이루어집니다. false로 설정하면 애니메이션 없이 즉시 표시됩니다.
completion: 모달 전환이 완료된 후 실행할 클로저입니다. 이 클로저는 선택 사항이며, 필요에 따라 추가적인 작업을 수행할 수 있습니다.
예제
아래는 present 메서드를 사용하는 간단한 예제입니다:
swift
let alertController = UIAlertController(title: "알림", message: "비디오가 재생됩니다.", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "확인", style: .default, handler: nil))
self.present(alertController, animated: true, completion: nil)
위의 예제에서는 UIAlertController를 생성하고, 이를 현재 뷰 컨트롤러에서 모달로 표시합니다. 애니메이션 효과가 적용되며, 전환이 완료된 후 추가 작업이 필요하지 않으므로 completion은 nil로 설정했습니다.
모달 전환 스타일
모달 전환은 여러 스타일로 설정할 수 있습니다. modalPresentationStyle 속성을 사용하여 다음과 같은 스타일을 지정할 수 있습니다:
.fullScreen: 전체 화면으로 표시됩니다. (기본값)
.pageSheet: 페이지 시트 스타일로 표시됩니다. (iPad에서 주로 사용)
.formSheet: 폼 시트 스타일로 표시됩니다. (iPad에서 주로 사용)
.overFullScreen: 전체 화면 위에 표시되며, 배경이 반투명하게 보입니다.
.popover: 팝오버 스타일로 표시됩니다. (iPad에서 주로 사용)
예를 들어, 모달 전환 스타일을 설정하는 방법은 다음과 같습니다:
swift
let modalViewController = UIViewController()
modalViewController.modalPresentationStyle = .overFullScreen
self.present(modalViewController, animated: true, completion: nil)
모달 해제
모달로 표시된 뷰 컨트롤러는 dismiss 메서드를 사용하여 해제할 수 있습니다. 이 메서드는 다음과 같은 형식으로 사용됩니다:
swift
dismiss(animated: Bool, completion: (() -> Void)?)
animated: Bool 값으로, true로 설정하면 해제 시 애니메이션이 적용됩니다.
completion: 해제가 완료된 후 실행할 클로저입니다.
요약
present 메서드는 현재 뷰 컨트롤러 위에 다른 뷰 컨트롤러를 모달로 표시하는 데 사용됩니다.
애니메이션과 완료 클로저를 설정할 수 있습니다.
다양한 모달 전환 스타일을 지원하며, 필요에 따라 설정할 수 있습니다.
모달로 표시된 뷰 컨트롤러는 dismiss 메서드를 사용하여 해제할 수 있습니다.
이러한 기능들은 iOS 앱에서 사용자 인터페이스를 구성하고 사용자 경험을 향상시키는 데 매우 유용합니다.
파란부분에서 Enter키 입력시
이와 같이 코드을 입력할 수 있게끔 변합니다.
self.present(playerViewController, animated: true)
player.play()
이 코드는 playerViewController를 모달로 표시한 후, 즉시 player.play()를 호출합니다.
이 경우, playerViewController가 화면에 나타나기 전에 비디오 재생이 시작될 수 있습니다. 즉, 비디오가 재생되기 전에
사용자에게 비디오 플레이어가 나타나지 않을 수 있습니다.
self.present(playerViewController, animated: true) {
player.play()
}
이 코드는 playerViewController가 모달로 표시된 후, 애니메이션이 완료된 시점에 player.play()를 호출합니다.
이 방식은 비디오 플레이어가 화면에 완전히 나타난 후에 비디오 재생이 시작되므로, 사용자에게 더 매끄럽고
자연스러운 경험을 제공합니다. 사용자는 비디오가 시작되기 전에 플레이어가 화면에 나타나는 것을 볼 수 있습니다.
소스 입력중 옵셔널 형을 Xcode에서 풀어주는 것을 사용해보겠습니다.
웹 사이트가 나와야되기 때문에 return값은 따로 지정하지 않았습니다.
소스을 리팩토링 해달라고 ai에게 하였고 추가적으로 문서화 작업도 해달라고 했습니다.
import UIKit
import WebKit
/// WebViewController는 웹 페이지를 로드하고 표시하는 뷰 컨트롤러입니다.
class WebViewController: UIViewController {
/// WKWebView 인스턴스를 IBOutlet으로 연결합니다.
@IBOutlet weak var webView: WKWebView!
/// 뷰가 로드될 때 호출되는 메서드입니다.
/// 초기 웹 페이지를 로드합니다.
override func viewDidLoad() {
super.viewDidLoad()
loadWebPage(urlString: "https://kinsunho.tistory.com/") // 초기 페이지 로드
}
/// Naver 웹 페이지로 이동하는 버튼의 액션 메서드입니다.
/// 버튼이 눌리면 Naver 페이지를 로드합니다.
/// - Parameter sender: 버튼을 나타내는 UIControl 객체
@IBAction func goNaver(_ sender: UIButton) {
loadWebPage(urlString: "http://m.naver.com") // Naver 페이지 로드
}
/// 주어진 URL 문자열을 사용하여 웹 페이지를 로드하는 메서드입니다.
/// - Parameter urlString: 로드할 웹 페이지의 URL 문자열
private func loadWebPage(urlString: String) {
// URL 문자열이 유효한지 확인합니다.
guard let url = URL(string: urlString) else {
print("Invalid URL: \(urlString)") // 유효하지 않은 URL일 경우 경고 메시지 출력
return
}
let request = URLRequest(url: url) // URLRequest 객체 생성
webView.load(request) // 웹 뷰에 요청을 로드
}
}