任何人都可以幫助創建一個AVPlayer
的池在tableView中重用嗎?因此,想法是讓AVPlayer
的池,比方說3,並在用戶滾動瀏覽表格時繼續重用它們。在TableView中重複使用AVPlayer
這裏的應用程序的快速大綱,我們要建設什麼樣的:
- 每個視頻是MP4,是隻有5秒之久。所以每個小區都會播放5秒的視頻並循環播放。
- 所有視頻都是本地的,它們會在表格顯示給用戶之前下載到磁盤。這將有助於tableView的平滑滾動性能。
現在我創造了太多AVPlayer
的,而不是重複使用它們這是對性能產生不良影響,如滾動有點不穩定。另外,Apple不允許創建無限量的AVPlayer
。
任何想法?由於
更新1:
import UIKit
import VIMVideoPlayer
var cache = NSCache<NSString, VIMVideoPlayerView>()
class FeedTableViewCell: UITableViewCell {
// MARK: - Properties
@IBOutlet weak var containerView: UIView!
static let reuseIdentifier = "FeedTableViewCell"
var video: Video? {
didSet {
if let cachedVideoPlayerView = cache.object(forKey: video!.preview!.remoteURL as NSString) {
// We have a cached video player view!
containerView.addSubview(cachedVideoPlayerView)
} else {
// There is nothing cached.
let previewURL = FileManager.applicationDocumentsDirectory.appendingPathComponent(video!.preview!.fileName!)
let newVideoPlayer = VIMVideoPlayer()
newVideoPlayer.setURL(previewURL)
newVideoPlayer.isLooping = true
newVideoPlayer.isMuted = true
newVideoPlayer.disableAirplay()
let newVideoPlayerView = VIMVideoPlayerView()
newVideoPlayerView.frame = contentView.bounds
newVideoPlayerView.delegate = self
newVideoPlayerView.setVideoFillMode(AVLayerVideoGravityResizeAspectFill)
newVideoPlayerView.player = newVideoPlayer
containerView.addSubview(newVideoPlayerView)
cache.setObject(newVideoPlayerView, forKey: video!.preview!.remoteURL as NSString)
}
}
}
// MARK: - Life Cycle
override func awakeFromNib() {
super.awakeFromNib()
print("AWAKE FROM NIB CELL")
}
override func prepareForReuse() {
super.prepareForReuse()
}
}
// MARK: - VIMVideoPlayerViewDelegate
extension FeedTableViewCell: VIMVideoPlayerViewDelegate {
func videoPlayerViewIsReady(toPlayVideo videoPlayerView: VIMVideoPlayerView!) {
videoPlayerView.player.play()
}
}
[AVPlayer.play()在UITableViewCell中可能的重複會暫時阻止UI](http://stackoverflow.com/questions/35496766/avplayer-play-in-uitableviewcell-briefly-blocks-ui) –