2017-01-30 31 views
0

我想將圖像生成到滾動視圖(就像視頻開始在默認的ios播放器中播放時一樣)。如何使用「generateCGImagesAsynchronously」從視頻加載圖像序列?

let imageView = UIImageView() 
let asset :AVAsset = AVURLAsset.init(url: url as URL) 
let assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset) 
assetImgGenerate.appliesPreferredTrackTransform = true 
assetImgGenerate.requestedTimeToleranceAfter = kCMTimeZero; 
assetImgGenerate.requestedTimeToleranceBefore = kCMTimeZero; 

var img = UIImage() 

assetImgGenerate.appliesPreferredTrackTransform = true 
let thumbTime: CMTime = asset.duration 
let times = thumbTime as NSValue 

assetImgGenerate.generateCGImagesAsynchronously(forTimes: [times], completionHandler: {(requestedTime, image, actualTime,result, error) -> Void in 
    img = UIImage(cgImage: image!) 
    imageView.image = img 
}) 

scrollView.backgroundColor = UIColor.black 
scrollView.contentSize = CGSize(width: CGFloat(imageView.frame.width), height: 0) 
scrollView.addSubview(imageView)} 

這不會給出任何輸出。如何將圖像生成爲序列以在滾動視圖中顯示?

我在這裏做錯了什麼?

回答

1

有在你的代碼中的一些錯誤:

  1. 你問AVAssetGenerator一些圖片在特定的時間,但在塊你總是分配最後一個圖像視圖。
  2. 您的滾動視圖(假設您設置正確)具有圖像視圖的寬度,可能在分配時爲0,高度也設爲0.
  3. 您可能錯過了AVAssetGenerator異步生成圖像,因此在第一張圖像返回到塊內之前設置滾動視圖的設置
  4. 嘗試紙上的所有內容,如果您總是設置相同的圖像視圖,那麼如何創建一種連續圖像滾動視圖?您應該循環瀏覽所有返回的圖像,爲每個圖像創建一個圖像視圖,並排放置它們並相應地設置內容大小。

    最後一張圖片在內存使用上相當昂貴。
+1

謝謝你的迴應。我知道我需要爲每個返回值創建圖像視圖,我相信我需要遍歷每個「times」變量的值。但我該怎麼做,我是新來的。我應該在哪裏放置循環執行?你能不能請教我。在此先感謝兄弟。 – fAiSaL

+0

現在工作正常。我編碼,就像你說的。我只有我缺乏的東西=邏輯。 Boooomm – fAiSaL

+0

但正如你所說,圖像在這裏創造了很多記憶,我能做些什麼來解決這個問題? – fAiSaL

相關問題