iOS 프로그래밍 13주차
파일을 지울 때에는 Move to Trash를 누른다.
Video Scene 스토리보드와 VideoViewController 클래스 연결: identity inspector(시험)
무언갈 보여줄 때 쓰는 함수: present
가장 기본적인 소스
import UIKit
import AVKit
class VideoViewController: UIViewController {
@IBAction func playVideo(_ sender: UIButton) {
let videoPath = Bundle.main.path(forResource: "APT", ofType: "mp4")
let videoURL = URL(filePath: videoPath!)
let player = AVPlayer(url: videoURL)
let playerController = AVPlayerViewController()
playerController.player = player
present(playerController, animated: true)
player.play()
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
present(_:animated:completion:)
iOS에서 현재의 뷰 컨트롤러가 다른 뷰 컨트롤러를 화면에 표시하도록 하는 중요한 메서드이다. 이 메서드를 사용하면 모달 방식으로 새로운 화면(뷰 컨트롤러)을 사용자에게 보여줄 수 있다.
func present(_ viewControllerToPresent: UIViewController, animated: Bool, completion: (() -> Void)? = nil)
매개변수
- viewControllerToPresent:
- 표시할 뷰 컨트롤러 객체입니다.
- UIViewController 타입이며, 표시하려는 새 화면의 인스턴스를 전달합니다.
- 예: AVPlayerViewController, UIAlertController 등.
- animated:
- 화면 전환 시 애니메이션 효과를 적용할지 여부를 결정합니다.
- true:
- iOS 기본 애니메이션(슬라이드 위로, 페이드 등)을 사용하여 화면 전환.
- false:
- 애니메이션 없이 즉시 화면 전환.
- completion:
- 화면 전환이 완료된 후 실행할 클로저입니다.
- 선택 사항으로, 전환 후 실행할 작업이 필요 없으면 생략 가능합니다.
- 기본값은 nil이며, 비워두면 아무 작업도 실행되지 않습니다.
optional 풀기 위해 guard let 사용
guard let videoPath = Bundle.main.path(forResource: "APT", ofType: "mp4") else {
return
}
let videoURL = URL(filePath: videoPath)
let player = AVPlayer(url: videoURL)
let playerController = AVPlayerViewController()
playerController.player = player
present(playerController, animated: true)
player.play()
, completion을 치면 나오는 자동완성
enter키를 누르면 나오는 자동완성
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621380-present
// APT.mp4 파일 경로를 안전하게 가져옵니다.
// guard let을 사용하여 파일 경로를 옵셔널 바인딩하고, 파일이 존재하지 않으면 return으로 메서드를 종료합니다.
guard let videoPath = Bundle.main.path(forResource: "APT", ofType: "mp4") else {
return // 파일 경로를 찾을 수 없는 경우 아무 작업도 하지 않고 종료
}
// 파일 경로 문자열을 URL 객체로 변환합니다.
// iOS 16 이상에서 사용할 수 있는 URL(filePath:) 메서드를 사용하여 파일 경로 URL을 생성합니다.
let videoURL = URL(filePath: videoPath)
// AVPlayer 객체를 생성하여 비디오를 재생할 준비를 합니다.
// AVPlayer는 비디오 또는 오디오 파일 재생을 담당합니다.
let player = AVPlayer(url: videoURL)
// AVPlayerViewController를 생성하여 재생 UI를 제공합니다.
// AVPlayerViewController는 Apple이 제공하는 기본 비디오 재생 화면 컨트롤러입니다.
let playerController = AVPlayerViewController()
// AVPlayerViewController에 생성한 AVPlayer를 연결합니다.
// 이를 통해 AVPlayerViewController에서 비디오가 재생됩니다.
playerController.player = player
// 현재 뷰 컨트롤러에서 AVPlayerViewController를 화면에 표시합니다.
// animated: true로 설정하면 화면 전환 시 기본 애니메이션이 적용됩니다.
// 후행 클로저를 사용하여 화면 전환이 완료된 후 AVPlayer를 재생합니다.
present(playerController, animated: true) {
player.play() // 화면이 표시된 후 비디오 재생을 시작합니다.
}
내장 웹 브라우저
timeoutInterval은 default값이 있다
xcode 자동완성
//
// WebViewController.swift
// BMI_psa
//
// Created by redmist on 11/27/24.
//
import UIKit
import WebKit
class WebViewController: UIViewController {
@IBOutlet weak var webView: WKWebView!
@IBAction func goNaver(_ sender: UIButton) {
guard let url = URL(string: "https://logichome.org/g5/") else { return }
let request = URLRequest(url: url)
webView.load(request)
}
override func viewDidLoad() {
super.viewDidLoad()
guard let url = URL(string: "https://sungah1030.tistory.com/") else { return }
let request = URLRequest(url: url)
webView.load(request)
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
}
이소스를 리팩토링해줘
리팩토링
//
// WebViewController.swift
// BMI_psa
//
// Created by redmist on 11/27/24.
//
import UIKit
import WebKit
class WebViewController: UIViewController {
@IBOutlet weak var webView: WKWebView!
// MARK: - View Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
loadURL("https://sungah1030.tistory.com/")
}
// MARK: - Actions
@IBAction func goNaver(_ sender: UIButton) {
loadURL("https://logichome.org/g5/")
}
// MARK: - Helper Methods
/// 주어진 URL 문자열을 WebView에서 로드합니다.
/// - Parameter urlString: 로드할 URL 문자열
private func loadURL(_ urlString: String) {
guard let url = URL(string: urlString) else {
print("Invalid URL: \(urlString)")
return
}
let request = URLRequest(url: url)
webView.load(request)
}
}
문서화
//
// WebViewController.swift
// BMI_psa
//
// Created by redmist on 11/27/24.
//
import UIKit
import WebKit
/// WebViewController는 웹 페이지를 표시하는 뷰 컨트롤러입니다.
class WebViewController: UIViewController {
@IBOutlet weak var webView: WKWebView! // WKWebView 인스턴스 연결
// MARK: - View Lifecycle
/// 뷰가 로드된 후 호출됩니다.
override func viewDidLoad() {
super.viewDidLoad()
loadURL("https://sungah1030.tistory.com/") // 초기 웹 페이지 로드
}
// MARK: - Actions
/// Naver 웹 페이지로 이동하는 버튼 액션입니다.
/// - Parameter sender: 버튼
@IBAction func goNaver(_ sender: UIButton) {
loadURL("https://logichome.org/g5/") // Naver URL 로드
}
// MARK: - Helper Methods
/// 주어진 URL 문자열을 WebView에서 로드합니다.
/// - Parameter urlString: 로드할 URL 문자열
private func loadURL(_ urlString: String) {
// URL 문자열을 URL 객체로 변환합니다.
guard let url = URL(string: urlString) else {
print("Invalid URL: \(urlString)") // 유효하지 않은 URL의 경우 에러 메시지 출력
return
}
let request = URLRequest(url: url) // URLRequest 객체 생성
webView.load(request) // 웹 뷰에서 요청을 로드합니다.
}
}
클래스 설명: WebViewController는 웹 페이지를 표시하는 기능을 가진 뷰 컨트롤러입니다.
프로퍼티 설명: webView는 웹 콘텐츠를 표시하는 WKWebView 인스턴스입니다.
메소드 설명:
viewDidLoad: 뷰가 로드된 후 초기 웹 페이지를 로드합니다.
goNaver: Naver 웹 페이지로 이동하는 버튼 액션입니다.
loadURL: 주어진 URL 문자열을 웹 뷰에서 로드하는 헬퍼 메소드입니다. 유효하지 않은 URL의 경우 에러 메시지를 출력합니다.
//
// VideoViewController.swift
// BMI_psa
//
// Created by redmist on 11/27/24.
//
import UIKit
import AVKit
/// VideoViewController는 비디오 재생을 관리하는 뷰 컨트롤러입니다.
class VideoViewController: UIViewController {
/// 비디오 재생 버튼을 눌렀을 때 호출되는 액션 메소드입니다.
/// - Parameter sender: 비디오 재생 버튼
@IBAction func playVideo(_ sender: UIButton) {
// 비디오 파일의 경로를 가져옵니다.
guard let videoPath = Bundle.main.path(forResource: "APT", ofType: "mp4") else {
return // 비디오 파일을 찾을 수 없는 경우 메소드 종료
}
// 비디오 URL을 생성합니다.
let videoURL = URL(fileURLWithPath: videoPath)
let player = AVPlayer(url: videoURL) // AVPlayer 객체를 생성하여 비디오 URL을 전달합니다.
let playerController = AVPlayerViewController() // AVPlayerViewController 객체를 생성합니다.
playerController.player = player // playerController에 player를 설정합니다.
// 비디오 플레이어를 화면에 표시하고 재생합니다.
present(playerController, animated: true) {
player.play() // 애니메이션이 완료된 후 비디오 재생 시작
}
/*
// 주석 처리된 코드: 비디오 파일 경로를 가져오고 플레이어를 설정하는 또 다른 방법
guard let filePath = Bundle.main.path(forResource: "APT", ofType: "mp4") else {
print("Error: APT.mp4 파일을 찾을 수 없습니다.")
return
}
let videoURL = URL(fileURLWithPath: filePath)
let player = AVPlayer(url: videoURL)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController, animated: true) {
playerViewController.player?.play()
}
*/
}
/// 뷰가 로드된 후 호출됩니다.
override func viewDidLoad() {
super.viewDidLoad()
// 추가적인 뷰 설정을 수행할 수 있습니다.
}
/*
// MARK: - Navigation
// 스토리보드 기반 애플리케이션에서 네비게이션을 준비할 때 사용됩니다.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// 새 뷰 컨트롤러를 가져오고 필요한 객체를 전달합니다.
}
*/
}
클래스 설명: VideoViewController는 비디오 재생을 담당하는 뷰 컨트롤러입니다.
메소드 설명: playVideo 메소드는 비디오 재생 버튼 클릭 시 호출되며, 비디오 파일을 찾아 재생합니다.
주석 처리된 부분: 코드 중복을 피하기 위해 주석 처리된 코드가 있습니다.
viewDidLoad: 뷰가 로드된 후 추가적인 초기 설정을 할 수 있는 공간입니다.