YouTubePlayer
在你的 iOS 应用程序中嵌入和控制 YouTube 视频!太酷了,让我们一起看看它是怎么工作的。
0.7.0 更新: WKWebView
破坏性更改
安装
Carthage
将以下内容添加到 Cartfile 中
github "gilesvangruisen/Swift-YouTube-Player"
然后运行 carthage update
别忘了
- 将
YouTubePlayer.framework
添加到链接库
构建阶段 - 将
YouTubePlayer.framework
作为输入文件添加到carthage copy-frameworks
运行脚本阶段(如果您为 iOS 构建则需要此操作)
有关使用 Carthage 作为依赖项管理器的更多信息,请参阅 Carthage
Cocoapods
请确保您选择了使用框架 use_frameworks!
。然后请将以下内容添加到您的Podfile中
pod 'YouTubePlayer'
…然后运行 pod install
。
示例
// Import Swift module
import YouTubePlayer
根据您的意愿构建和布局视图,无论是使用IB和输出还是以编程方式。
@IBOutlet var videoPlayer: YouTubePlayerView!
// init YouTubePlayerView w/ playerFrame rect (assume playerFrame declared)
var videoPlayer = YouTubePlayerView(frame: playerFrame)
为播放器提供要加载的视频,无论它是从ID还是URL加载。
// Load video from YouTube ID
videoPlayer.loadVideoID("nfWlot6h_JM")
// Load video from YouTube URL
let myVideoURL = NSURL(string: "https://www.youtube.com/watch?v=wQg3bXrVLtg")
videoPlayer.loadVideoURL(myVideoURL!)
控制YouTubePlayerView
每个 YouTubePlayerView
都有用于控制播放器的函数(播放、暂停、搜索、更改视频等)。它们是
func loadVideoURL(videoURL: NSURL)
func loadVideoID(videoID: String)
func loadPlaylistID(playlistID: String)
func play()
func pause()
func stop()
func clear()
func seekTo(seconds: Float, seekAhead: Bool)
func previousVideo()
func nextVideo()
func getCurrentTime(completion: ((Double?) -> Void)?)
func getDuration(completion: ((Double?) -> Void)?)
请注意,调用第二个方法之外的任何方法,如果在播放器准备好之前被调用,将导致JavaScript运行时错误。播放器不会立即准备好,直到调用loadVideoURL(videoURL: NSURL)
或loadVideoID(videoID: String)
之后不久。您可以随时通过检查其ready: Bool
属性来检查播放器的准备状态。这些函数是异步运行的,因此一个调用load函数之后的立即调用play函数可能并不安全。我计划很快更新库以添加当播放器准备好时的完成处理程序。
同时,您还可以使用YouTubePlayerDelegate
中的方法playerReady(videoPlayer: YouTubePlayerView)
来确保在播放器准备就绪时立即执行代码。
响应用件
YouTube的iFrame播放器根据播放器的生命周期发出某些事件。YouTubePlayerDelegate
规定了在播放器生命周期期间会调用的这些方法。它们是
func playerReady(videoPlayer: YouTubePlayerView)
func playerStateChanged(videoPlayer: YouTubePlayerView, playerState: YouTubePlayerState)
func playerQualityChanged(videoPlayer: YouTubePlayerView, playbackQuality: YouTubePlaybackQuality)
注:所有这些委托方法都是可选的,这意味着您可以在委托类中实现所有、某个或没有任何一个。
重大变更
0.7.0 从 UIWebView
(已弃用)过渡到 WKWebView
需要改变返回值的播放器调用为异步。如果您升级到 0.7.0,则需要将任何对 getCurrentTime()
和 getDuration()
的调用替换为其异步等价物,具体见上文 所述。