AVPlayer在播放之前停止UIActivityIndi​​cator [英] AVPlayer stop UIActivityIndicator before playing

查看:68
本文介绍了AVPlayer在播放之前停止UIActivityIndi​​cator的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在AVPlayer开始播放音乐时停止activityIndi​​cator,并在AVPlayer再次启动(加载,缓冲)时也启动activityIndi​​cator.有点奏效,问题是AVPlayer在播放音乐之前几秒钟(5,6,7)之前停止了activityIndi​​cator.而且,当它再次(加载,缓冲)时,它不会再次启动activityIndi​​cator.任何人都不知道我的错误在哪里或我需要解决什么.谢谢

I'm trying to stop activityIndicator when AVPlayer start playing music, and also start activityIndicator when again AVPlayer start (loading, buffering). It little bit works, the problem is that AVPlayer stop activityIndicator before some seconds (5,6,7) before playing music. And also it not start again activityIndicator when it again (loading, buffering). Any one have any idea where is my mistake or what i need to fix it. Thanks

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在此行Player item status is ready to play

AVPlayer start playing after(5,6,7 seconds) this line 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

推荐答案

关于第二个问题,即而且当它再次(加载,缓冲)时,它也不会再次启动activityIndi​​cator"

Regarding second problem i.e. "And also it not start again activityIndicator when it again (loading, buffering)"

我认为解决此问题的方法可能是以下之一:-

I think a workaround for that could be one of following:-

a)

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath){
    print("You selected cell #\(indexPath.item)!")
//Start activityView Animation when user clicks on any item which won't be buffered by default
activityView.startAnimating()
}

b)

var selectIndex:Int = -1 {
didSet {
      //Start activityView Animation when user clicks on any item which won't be buffered by default
      activityView.startAnimating()
       }
}

这篇关于AVPlayer在播放之前停止UIActivityIndi​​cator的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆