티스토리 뷰

반응형

안녕하세요 :) Zedd입니다.

코딩을 하다가 좋은..?거를 발견해서..검색만 하면 다 나오긴 하는데..

아무튼 저같이 webView에 익숙하지 않으신 분들을 위해 이 글을 씁니다 :)


제가 겪은 문제는 유튜브동영상을 webView를 이용해서 보여줘야하는데, 그 유투브 동영상을 로딩하는 순간에 ActivityIndicator를 보여주고 싶더라구요 :)

근데 이 유투브가 언제 로딩이 될지, 그런걸 모르잖아요?

그걸 해결하는 방법입니다 :)

간단해요!


@IBOutlet weak var indicator: UIActivityIndicatorView!


@IBOutlet weak var webView: UIWebView!


일단 webView와 indicator의 IBOutlet은 다 따두셨죠? 

이제 webView가 로딩이 됐냐 안됐냐를 판단하는 방법은!!!!

바로 UIWebViewDelegate를 이용하는 것입니다. 


그럼, 지금 Controller에 UIWebViewDelegate를 채택해줄거에요.

원래는!!!!extension을 이용해서 UIWebViewDelegate를 추가해주는게 맞지만....

헷갈리실 수 있으니, Controller옆에 바로 할게요.


class PlayerViewController: UIViewController,UIWebViewDelegate {

    @IBOutlet weak var indicator: UIActivityIndicatorView!

    @IBOutlet weak var webView: UIWebView!


자...delegate를 "채택"했으면, 이제 일을 해줄 대리자역할을 위임해야겠죠?

viewDidLoad()에



override func viewDidLoad() {

        super.viewDidLoad()


        webView.delegate = self


if let url = url{

            webView.loadRequest(URLRequest(url: url))

        }

}

대리자를 지정하는 코드를 작성해줍니다. 


그리고!!!!delegate를 채택했으니, delegate메소드를 구현해줘야겠죠.

똑똑한 webView에게는



func webViewDidStartLoad(_ webView: UIWebView) { }


func webViewDidFinishLoad(_ webView: UIWebView) { }

이렇게 똑똑한!!!! 메소드가 있답니다. 

이름만 봐도 알 수 있을 것 같죠?

로드를시작했다, 로드가 끝났다.


그럼 이 메소드 안에!



func webViewDidStartLoad(_ webView: UIWebView) {


        indicator.startAnimating()


    }

func webViewDidFinishLoad(_ webView: UIWebView) {


        indicator.stopAnimating()


        indicator.isHidden = true

    }

이렇게 activityIndicator를 원하시는 대로 해주면 됩니다. :)



정말 간단하죠?

아 그리고, 저는 처음에 webView를 안쓰고 AVKit Player View Controller를 이용해서 재생하려고 했어요..ㅎㅎ..

하지만!! 이렇게 하면 재생이 안될겁니다. 왜냐하면 AVKit Player View Controller는 동영상 "파일"만을 재생하며, 유튜브 동영상 링크는 동영상 파일로는 인식?을 안하나봐요. 

아무튼 주의하세요 :) 

youtube-ios-player-helper이런것도 써봤는데, 그냥 webView가 제일 나은 것 같습니다....ㅎㅎ


도움이 되셨길 바래요 :)

안녕~~


반응형