我試圖在AVPlayer開始播放音樂時停止activityIndicator,並且在AVPlayer再次啓動時(加載,緩衝)啓動activityIndicator。這一點起作用,問題在於播放音樂之前,AVPlayer在幾秒鐘之前停止activityIndicator(5,6,7)。當它再次(加載,緩衝)時,它不會再次啓動activityIndicator。任何人都知道我的錯誤在哪裏,或者我需要修復它。由於AVPlayer在播放前停止UIActivityIndicator
var activityView = UIActivityIndicatorView(activityIndicatorStyle: .WhiteLarge)
var selectIndex:Int = -1
var check = true
var url : String!
var playerItem:AVPlayerItem?
var player:AVPlayer?
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell{
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! RadioCollectionViewCell
cell.backgroundColor = UIColor.yellowColor()
let object = objects[indexPath.row]
cell.img.image = UIImage(named: object["image"]!)
cell.btnPlay.addTarget(self, action: Selector("audioControlButtonAction:"), forControlEvents: UIControlEvents.TouchUpInside)
cell.btnPlay.tag = indexPath.row+1
return cell
}
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath){
print("You selected cell #\(indexPath.item)!")
}
func audioControlButtonAction(sender: UIButton){
if check == false {
deallocObservers(player!)
}
var btn:NSInteger
btn = sender.tag as NSInteger
let object = objects[btn-1]
let nurl = NSURL(string: "\(object["url"]!)")!
playerItem = AVPlayerItem(URL: nurl)
player=AVPlayer(playerItem: playerItem!)
print(selectIndex)
if selectIndex != -1 && selectIndex != sender.tag
{
let bt:UIButton = self.view.viewWithTag(selectIndex) as! UIButton
if bt.selected == true
{
bt.selected = false
}
}
if sender.selected == false{
player!.addObserver(self, forKeyPath: "status", options:NSKeyValueObservingOptions(), context: nil)
player!.addObserver(self, forKeyPath: "playbackBufferEmpty", options:NSKeyValueObservingOptions(), context: nil)
player!.addObserver(self, forKeyPath: "playbackLikelyToKeepUp", options:NSKeyValueObservingOptions(), context: nil)
player!.addObserver(self, forKeyPath: "playbackBufferFull", options:NSKeyValueObservingOptions(), context: nil)
player!.addObserver(self, forKeyPath: "loadedTimeRanges", options: NSKeyValueObservingOptions(), context: nil)
player!.play()
sender.selected = true
check = false
selectIndex = sender.tag
activityView.startAnimating()
}
else{
activityView.stopAnimating()
check = true
player?.pause()
sender.selected = false
selectIndex = -1
}
print(selectIndex)
}
func deallocObservers(player: AVPlayer) {
player.removeObserver(self, forKeyPath: "status")
player.removeObserver(self, forKeyPath: "playbackBufferEmpty")
player.removeObserver(self, forKeyPath: "playbackLikelyToKeepUp")
player.removeObserver(self, forKeyPath: "loadedTimeRanges")
player.removeObserver(self, forKeyPath: "playbackBufferFull")
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>){
if object?.isEqual(player) == true && keyPath == "status" {
print(player?.status)
switch player!.status {
case AVPlayerStatus.Failed:
print("Player item status failed")
player?.play()
break
case AVPlayerStatus.ReadyToPlay:
print("Player item status is ready to play")
activityView.stopAnimating()
break
case AVPlayerStatus.Unknown:
print("player item status is unknown")
break
}
switch keyPath! {
case "playbackBufferFull":
activityView.stopAnimating()
print("playbackBufferFull")
break
case "playbackLikelyToKeepUp":
activityView.stopAnimating()
print("playbackLikelyToKeepUp")
break
case "playbackBufferEmpty":
activityView.startAnimating()
print("playbackBufferEmpty")
break
case "loadedTimeRanges":
print("loadedTimeRanges")
default:
print("Error")
break
}
}
}
}
輸出
AVPlayer開始後(5,6,7秒)玩這一行Player item status is ready to play
-1
1
Optional(__C.AVPlayerStatus)
Player item status is ready to play
Error
1
-1
-1
1
Optional(__C.AVPlayerStatus)
Player item status is ready to play
Error
第一次當我按播放按鈕只是該代碼執行'如果sender.selected == false {............}''audioControlButtonAction'按鈕? – ZAFAR007