iOS앱개발 11주차

2024. 11. 21. 16:49카테고리 없음

클래스와 화면이 연결된것을 볼 수 있는 inspector

화면이 어떤 클래스와 연결되어있는지 확인하기

새로 만든 뷰 컨트롤러와 클래스 연결하고 엔터 치기!
오탈자가 날 수 있으니 자동 완성으로 완성

 

비디오를 가져오기 위한 코드

Bundle.main.path(forResource: "bmi", ofType: "mp4")는 iOSmacOS 애플리케이션에서 앱에 포함된 리소스 파일의 경로를 찾기 위한 코드입니다. 이 코드의 동작을 자세히 설명하면 다음과 같습니다:

  1. Bundle.main: 앱의 메인 번들을 나타냅니다. 번들은 앱의 실행 파일과 함께 배포되는 리소스(이미지, 비디오, 텍스트 파일 등)를 포함하는 구조입니다.
  2. path(forResource: "bmi", ofType: "mp4"): 이 메서드는 지정된 이름과 파일 유형을 가진 리소스를 찾기 위해 번들에서 경로를 반환합니다.
    • "bmi": 찾고자 하는 리소스의 이름(이 경우에는 **"bmi"**라는 이름의 파일).
    • "mp4": 파일의 유형을 나타내며, 이 경우에는 mp4 비디오 파일입니다

옵셔널 String을 반환한다

상수로 선언한 videoPath 를 사용하지 않으면 위와같은 경고창이 뜬다.

 

아래와 같은 부분에서 엔터키를 치면

코드를 칠 수 있는 공간이 나온다

import UIKit
import AVKit

class VideoViewController: UIViewController {

    // 비디오 재생 버튼을 클릭하면 실행되는 액션 함수
    @IBAction func playButton(_ sender: UIButton) {
        // 번들에서 'bmi.mp4' 파일 경로를 찾기
        guard let videoPath = Bundle.main.path(forResource: "bmi", ofType: "mp4") else{
            // 비디오 파일을 찾을 수 없는 경우 콘솔에 메시지 출력
            print("동영상없음")
            return  // 파일이 없으면 함수 종료
        }
        
        // 경로를 URL로 변환
        let videoURL = URL(filePath: videoPath)
        
        // AVPlayer 객체를 생성하여 비디오 URL로 초기화
        let player = AVPlayer(url: videoURL)
        
        // AVPlayerViewController를 생성하고, AVPlayer를 연결
        let playerController = AVPlayerViewController()
        playerController.player = player
        
        // 현재 뷰 컨트롤러에서 AVPlayerViewController를 화면에 표시
        present(playerController, animated: true)
        
        // 비디오 재생 시작
        player.play()
    }
    
    // 뷰가 로드되었을 때 호출되는 메소드
    override func viewDidLoad() {
        super.viewDidLoad()

        // 추가적인 설정이 필요하면 여기에 작성
    }
}

동영상 재생 소스
guard let 문법을 사용하지 않고 강제 언래핑을 해주게 되면 동영상이 없을 시 크랙이 날 수 있기 떄문에 안전하게 guard let 을 사용하여 안전하게  videoPath를 언래핑 해 주는것이 좋다.

 

present 함수는 iOS에서 뷰 컨트롤러를 다른 뷰 컨트롤러로 표시하는 데 사용됩니다. 이 함수는 현재의 뷰 컨트롤러에서 새로운 뷰 컨트롤러를 화면에 표시할 때 호출됩니다. 일반적으로 모달 뷰 또는 새로운 화면을 띄우는 데 사용됩니다.

매개변수 설명:

  • viewControllerToPresent: 표시할 뷰 컨트롤러입니다. 이 뷰 컨트롤러는 현재 뷰 컨트롤러에서 나타날 다른 화면입니다.
  • animated: 새로운 뷰 컨트롤러가 화면에 나타날 때 애니메이션을 사용할지 여부를 결정하는 불리언 값입니다. true로 설정하면 화면 전환 애니메이션이 표시됩니다.
  • completion: 화면 전환이 완료된 후 실행될 코드 블록입니다. 이 매개변수는 선택사항입니다.
//
//  WebViewController.swift
//  BMI-GDY
//
//  Created by comsoft on 2024/11/21.
//

import UIKit
import WebKit
class WebViewController: UIViewController {

    @IBOutlet var webView: WKWebView!
    @IBAction func goWeb(_ sender: UIButton) {
        guard let url = URL(string: "https://m.naver.com") else{
            return
        }
        let request = URLRequest(url: url)
        webView.load(request)
        
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        guard let url = URL(string: "https://rhehfl418q.tistory.com") else{
            return
        }
        let request = URLRequest(url: url)
        webView.load(request)
        // Do any additional setup after loading the view.
    }


}

웹 연결 소스코드

만약 guard let 문법을 사용하지 않고 바로 할당하려 하면 x-code에서 자동으로 수정해준다

자동수정 후 

 

위 소스같은 경우는 중복되는 부분이 있기때문에  url을 받아서 웹뷰에 웹페이지를 로드시켜주는 함수를 만들어서 리팩토링 하였다.

import UIKit
import WebKit

class WebViewController: UIViewController {

    // WKWebView 인스턴스를 연결합니다. 스토리보드에서 연결된 웹뷰입니다.
    @IBOutlet var webView: WKWebView!

    // URL을 받아서 웹 페이지를 로드하는 공통 함수
    private func loadWebPage(urlString: String) {
        // URL이 유효한지 확인합니다.
        guard let url = URL(string: urlString) else {
            print("잘못된 URL")  // URL이 잘못되었을 때 디버깅을 위한 출력
            return
        }
        
        // URL을 요청(request) 객체로 변환
        let request = URLRequest(url: url)
        
        // 웹뷰에 요청을 로드하여 웹 페이지를 표시
        webView.load(request)
    }

    // 버튼을 눌렀을 때 호출되는 액션 함수
    @IBAction func goWeb(_ sender: UIButton) {
        // "https://m.naver.com" URL을 로드
        loadWebPage(urlString: "https://m.naver.com")
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // 뷰가 로드될 때 기본 웹 페이지를 로드합니다.
        loadWebPage(urlString: "https://rhehfl418q.tistory.com")
    }
}

개요:

WebViewController 클래스는 WKWebView를 사용하여 앱 내에서 웹 페이지를 표시하는 간단한 뷰 컨트롤러입니다. 이 클래스는 뷰가 로드될 때 기본 웹 페이지를 표시하고, 버튼을 클릭하면 다른 웹 페이지로 이동할 수 있게 합니다.

클래스: WebViewController

UIViewController를 상속받은 클래스로, 웹 콘텐츠를 앱 내에서 표시하기 위해 웹 뷰를 통합합니다.


속성:

  • @IBOutlet var webView: WKWebView!:
    스토리보드에서 연결된 WKWebView 인스턴스로, 앱 내에서 웹 콘텐츠를 표시하는 역할을 합니다.

메서드:

  1. private func loadWebPage(urlString: String)
    • 설명:
      이 private 메서드는 urlString을 인자로 받아 해당 웹 페이지를 webView에 로드합니다. 주어진 URL을 URLRequest 객체로 변환한 후 웹 뷰에 로드하며, URL이 잘못되었을 경우 오류 메시지를 출력합니다.
    • 매개변수:
      • urlString: String - 로드할 웹 페이지의 URL을 나타내는 문자열입니다.
    • 반환값:
      • 반환값 없음

출저: 스마일한의 스위프트 기초