У меня есть collectionView
, где я показываю некоторые изображения, первоначально с помощью метода setup collectionview все работает нормально.
@IBOutlet weak var collectionView: UICollectionView!
func setupCollectionView(){
DispatchQueue.main.async {
self.collectionView.delegate = self
self.collectionView.dataSource = self
}
self.collectionView.register(UINib(nibName: "WallPapersCell", bundle: nil), forCellWithReuseIdentifier: "WallPapersCell")
}
При возникновении изменений возникает проблемамассив Я перезагружаю данные, но collectionView
получаю nil
, следовательно, collectionView.reloadData()
не вызывается.Что может быть причиной?Я что-то упустил?
private var imagePathArray = [String](){
didSet {
print("did set")
if let collectionView = self.collectionView {
collectionView.reloadData()
}
}
}
func loadVideoWithVideoURL(_ videoURL: URL) {
print("load video url \(videoURL)")
// displayImageView.livePhoto = nil
let asset = AVURLAsset(url: videoURL)
let generator = AVAssetImageGenerator(asset: asset)
generator.appliesPreferredTrackTransform = true
let time = NSValue(time: CMTimeMakeWithSeconds(CMTimeGetSeconds(asset.duration)/2, preferredTimescale: asset.duration.timescale))
generator.generateCGImagesAsynchronously(forTimes: [time]) { [weak self] _, image, _, _, _ in
if let image = image, let data = UIImage(cgImage: image).pngData() {
let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let uniqueImageName = videoURL.deletingPathExtension().lastPathComponent
print("/\(uniqueImageName).JPG")
let imageURL = urls[0].appendingPathComponent("\(uniqueImageName).jpg")
try? data.write(to: imageURL, options: [.atomic])
print("Load image url \(imageURL)")
let image = imageURL.path
let mov = videoURL.path
print("image path \(image) and mov path\(mov)")
let output = FilePaths.VidToLive.livePath
print(output)
let assetIdentifier = UUID().uuidString
print(output)
if FileManager.default.fileExists(atPath: output + "/LiveWallpapers"){
print("exits")
}else{
self?.createLiveWallpapersDirectoryIfNotExists(output: output)
print("live wallpapers folder doesnot exists in caches directory")
}
if FileManager.default.fileExists(atPath: output + "/LiveWallpapers/\(uniqueImageName).JPG"){
print("exits")
return
}
JPEG(path: image).write(output + "/LiveWallpapers/\(uniqueImageName).JPG",
assetIdentifier: assetIdentifier)
QuickTimeMov(path: mov).write(output + "/LiveWallpapers/\(uniqueImageName).MOV",
assetIdentifier: assetIdentifier)
self?.imagePathArray.append(output + "/LiveWallpapers/\(uniqueImageName).JPG")
self?.videoPathArray.append(output + "/LiveWallpapers/\(uniqueImageName).MOV")
// here it is getting failed
self?.exportLivePhoto(cachePath: "/LiveWallpapers/\(uniqueImageName)")
}
}
}
Эта функция не работает, когда я пытаюсь записать видео и соединить видео и фото.The operation couldn’t be completed. (Cocoa error -1.)
эту ошибку я получаю, следовательно, получаю ошибку.
func exportLivePhoto (cachePath : String) {
PHPhotoLibrary.shared().performChanges({ () -> Void in
let creationRequest = PHAssetCreationRequest.forAsset()
let options = PHAssetResourceCreationOptions()
creationRequest.addResource(with: PHAssetResourceType.pairedVideo, fileURL: URL(fileURLWithPath: "\(cachePath).MOV"), options: options)
creationRequest.addResource(with: PHAssetResourceType.photo, fileURL: URL(fileURLWithPath:"\(cachePath).JPG"), options: options)
}, completionHandler: { (success, error) -> Void in
if !success {
NSLog("export live error" + (error?.localizedDescription)!)
}
})
}
Есть предложения?
Заранее спасибо !!