我正在创建类似instagram的功能,您可以在其中添加可拖动的文本,贴纸和gif。 我可以添加文本和贴纸并通过截屏保存。
是否可以保存添加了动画gif的图像。
有人可以提出解决方案吗?
谢谢。
答案 0 :(得分:0)
您好,我是通过以下方法实现的:hope希望对某人有帮助
1。在将gif放在Image上之后,我正在使用计时器通过此方法拍摄holderView的屏幕截图。
@objc func gifScreenShot() {
guard let imageView = self.screenView else {
return
}
UIGraphicsBeginImageContextWithOptions(imageView.frame.size, true, 0.0)
imageView.drawHierarchy(in: imageView.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.gifImages.append(image!)
if gifImages.count == 50 {
self.stopTimer()
}
}
2。一旦拍摄了50张屏幕截图,我就会停止计时器
func stopTimer() {
if gifTimer != nil {
gifTimer!.invalidate()
gifTimer = nil
DispatchQueue.global(qos: .background).async {
DispatchQueue.main.async {
self.createVideo()
}
}
}
}
3。并将所有屏幕截图合并为0.05秒的视频,并将其保存为照片库
func createVideo() {
let settings = CXEImagesToVideo.videoSettings(codec: AVVideoCodecType.h264.rawValue, width: (gifImages[0].cgImage?.width)!, height: (gifImages[0].cgImage?.height)!)
let movieMaker = CXEImagesToVideo(videoSettings: settings)
movieMaker.createMovieFrom(images: gifImages){ (fileURL:URL) in
if self.isSaveVideo {
PHPhotoLibrary.shared().performChanges({
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: fileURL)
}) { saved, error in
self.loadingViewStop()
self.gifImages.removeAll()
if saved {
self.gifImages.removeAll()
DispatchQueue.main.async {
self.view.toastMessage("Video saved successfully".localized)
}
} else {
print(error)
}
}
} else {
self.gifImages.removeAll()
self.videoFileURL = fileURL
self.nextTapped(snap: nil)
}
}
}
它像我预期的那样工作