在您的 iOS 应用程序中嵌入并控制 YouTube 视频!很酷,对吧?让我们看看它是如何工作的。
// Import Swift module
import YouTubePlayer
构建并布局视图,无论您选择的在 IB 中的 outlet 还是程序化方式。
@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
都有控制播放器的所有方法(播放、暂停、查找、更改视频等)。它们是
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()
请注意,如果这些方法在播放器准备好之前被调用,那么除了前两个方法之外的调用将导致 JavaScript 运行时错误。播放器将在调用 loadVideoURL(videoURL: NSURL)
或 loadVideoID(videoID: String)
之后再准备好。您可以通过检查其 ready: Bool
属性来在任何时候检查播放器的准备工作。这些函数是异步执行的,因此不能保证在立即跟随调用加载函数的播放函数调用是安全的。我计划很快更新库来添加当播放器准备好时将被调用的完成处理程序。
与此同时,您还可以使用 YouTubePlayerDelegate
方法 playerReady(videoPlayer: YouTubePlayerView)
来确保在播放器准备好时立即执行代码。
YouTube 的 iFrame 播放器根据播放器的生命周期发出某些事件。YouTubePlayerDelegate
详细说明了在各种播放器生命周期中会被调用的方法。它们是
func playerReady(videoPlayer: YouTubePlayerView)
func playerStateChanged(videoPlayer: YouTubePlayerView, playerState: YouTubePlayerState)
func playerQualityChanged(videoPlayer: YouTubePlayerView, playbackQuality: YouTubePlaybackQuality)
旁白:不幸的是,由于Swift协议的工作方式,这些都是必须的委托方法。在YouTubePlayer
的实例上设置委托是可选的,但任何委托都必须遵守YouTubePlayerDelegate
并因此必须实现上述的所有方法。我希望有更好的解决方案,但是将协议声明为@objc
协议意味着我无法使用枚举值作为参数,因为Swift枚举与Objective-C枚举不兼容。如果您知道任何解决方案可以让我们既有可选的委托方法,又能将Swift枚举传递给这些委托方法,请随时提交问题。