Video Scene 스토리보드와 VideoViewController클래스 연결
import UIKit
class VideoViewController: UIViewController {
@IBAction func PlayVideo(_ sender: UIButton) {
Bundle.main.path(forResource: "bmi", ofType: "mp4")
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
PlayVideo라는 액션에 모든 소스를 작성해줘
소스
// 앱 번들에서 "bmi.mp4" 파일의 경로를 찾아 videoPath 변수에 할당합니다.
let videoPath : String? = Bundle.main.path(forResource: "bmi", ofType: "mp4")
// videoPath를 사용하여 URL 객체를 생성합니다.
// '!'는 강제 언래핑을 의미하며, videoPath가 nil이 아님을 확신할 때 사용합니다.
let videoURL = URL(filePath: videoPath!)
// videoURL을 사용하여 AVPlayer 객체를 생성합니다.
// 이 player 객체는 비디오를 재생하는 데 사용됩니다.
let player = AVPlayer(url: videoURL)
// AVPlayerViewController 인스턴스를 생성합니다.
// 이 컨트롤러는 비디오 재생을 위한 사용자 인터페이스를 제공합니다.
let playerController = AVPlayerViewController()
// 생성한 player를 playerController에 할당합니다.
playerController.player = player
// 현재 뷰 컨트롤러 위에 playerController를 표시합니다.
// animated: true는 애니메이션과 함께 표시함을 의미합니다.
present(playerController, animated: true)
// 비디오 재생을 시작합니다.
player.play()
// 앱 번들에서 "bmi.mp4" 파일의 경로를 찾아 videoPath 변수에 할당합니다.
guard let videoPath = Bundle.main.path(forResource: "bmi", ofType: "mp4") else {
print("Error: Video file not found in bundle.")
return
}
// videoPath를 사용하여 URL 객체를 생성합니다.
let videoURL = URL(fileURLWithPath: videoPath)
// videoURL을 사용하여 AVPlayer 객체를 생성합니다.
// 이 player 객체는 비디오를 재생하는 데 사용됩니다.
let player = AVPlayer(url: videoURL)
// AVPlayerViewController 인스턴스를 생성합니다.
// 이 컨트롤러는 비디오 재생을 위한 사용자 인터페이스를 제공합니다.
let playerController = AVPlayerViewController()
// 생성한 player를 playerController에 할당합니다.
playerController.player = player
// 현재 뷰 컨트롤러 위에 playerController를 표시합니다.
// animated: true는 애니메이션과 함께 표시함을 의미합니다.
present(playerController, animated: true) { [weak self] in
// 비디오 재생을 시작합니다.
player.play()
}
present 함수
if let을 사용한 방식
@IBAction func PlayVideo(_ sender: UIButton) {
if let videoPath = Bundle.main.path(forResource: "bmi", ofType: "mp4") {
let videoURL = URL(fileURLWithPath: videoPath)
let player = AVPlayer(url: videoURL)
let playerController = AVPlayerViewController()
playerController.player = player
self.present(playerController, animated: true)
player.play()
} else {
print("비디오 파일을 찾을 수 없습니다.")
// 여기에 사용자에게 알림을 주는 코드를 추가할 수 있습니다.
}
}
guard let을 사용한 방식
@IBAction func PlayVideo(_ sender: UIButton) {
guard let videoPath = Bundle.main.path(forResource: "bmi", ofType: "mp4") else {
print("비디오 파일을 찾을 수 없습니다.")
// 여기에 사용자에게 알림을 주는 코드를 추가할 수 있습니다.
return
}
let videoURL = URL(fileURLWithPath: videoPath)
let player = AVPlayer(url: videoURL)
let playerController = AVPlayerViewController()
playerController.player = player
self.present(playerController, animated: true)
player.play()
}
두 소스의 차이점
self.present(playerViewController, animated: true)
player.play()
> player.play()가 present 메서드 호출 직후 즉시 실행됩니다. 화면 전환이 완료되기 전에 비디오 재생이 시작될 수 있습니다.이 경우, player.play()가 present 메서드 호출 직후 즉시 실행됩니다. 화면 전환이 완료되기 전에 비디오 재생이 시작될 수 있습니다.
self.present(playerViewController, animated: true) {
player.play()
}
> player.play()가 present 메서드의 completion handler 내에서 실행됩니다. 화면 전환이 완전히 끝난 후에 비디오 재생이 시작됩니다.
--> 두 번째 방식이 더 안전하고 일관된 사용자 경험을 제공합니다. 화면 전환이 완료된 후 비디오가 재생되므로, 사용자는 전체 화면에서 비디오 시작을 볼 수 있습니다.
소스
@IBAction func GoGoogle(_ sender: UIButton) {
let url = URL(string : "https://www.google.co.kr")
let request = URLRequest(url: url!)
webView.load(request)
}
override func viewDidLoad() {
super.viewDidLoad()
guard let url = URL(string: "https://heeaeeeee.tistory.com/") else { return }
let request = URLRequest(url: url)
webView.load(request)
}
if let을 사용한 방식
@IBAction func GoGoogle(_ sender: UIButton) {
if let url = URL(string: "https://www.google.co.kr") {
let request = URLRequest(url: url)
webView.load(request)
} else {
print("유효하지 않은 URL입니다.")
}
}
guard let을 사용한 방식
@IBAction func GoGoogle(_ sender: UIButton) {
guard let url = URL(string: "https://www.google.co.kr") else {
print("유효하지 않은 URL입니다.")
return
}
let request = URLRequest(url: url)
webView.load(request)
}
@IBAction func GoGoogle(_ sender: UIButton) {
guard let url = URL(string : "https://www.google.co.kr") else { return }
let request = URLRequest(url: url)
webView.load(request)
}
소스 refactoring
@IBAction func goToGoogle(_ sender: UIButton) {
guard let url = URL(string: "https://www.google.co.kr") else {
print("Invalid URL")
return
}
webView.load(URLRequest(url: url))
}
소스 문서화
/// Google 웹사이트로 이동하는 액션 메서드입니다.
/// - Parameter sender: 액션을 트리거한 UIButton 객체입니다.
@IBAction func goToGoogle(_ sender: UIButton) {
// Google 한국 홈페이지 URL을 생성합니다.
guard let url = URL(string: "https://www.google.co.kr") else {
// URL 생성에 실패한 경우 에러 메시지를 출력하고 함수를 종료합니다.
print("Invalid URL")
return
}
// 생성된 URL을 사용하여 웹뷰에 요청을 로드합니다.
webView.load(URLRequest(url: url))
}
IOS 강의 자료 참고했습니다.
'IOS 기초' 카테고리의 다른 글
[IOS 기초] 14주차 (0) | 2024.12.05 |
---|---|
[IOS 기초] 13주차 BMI판정 앱(4) (1) | 2024.11.28 |
[IOS 기초] 11주 BMI판정 앱(2) (0) | 2024.11.20 |
[IOS 기초] 10주 BMI 판정,동영상 재생,웹뷰 앱 (2) | 2024.11.07 |
[IOS 기초] 9주 (2) | 2024.10.31 |
[IOS 기초] 7주 Xcode로 간단한 앱 개발 (0) | 2024.10.17 |
[IOS 기초] 6주 Swift 문법 5(클래스 failable initializer 상속)파일 (4) | 2024.10.10 |
[IOS 기초] 5주 Swift 문법 4(일급시민 클로저 기초)파일 (0) | 2024.10.09 |