import UniformTypeIdentifiers import SwiftUI import CoreGraphics struct GifRenderer { static func render(_ images: [CGImage], at fps: Int, to url: URL) async { let framedelay = String(format: "%.3f", 1.0 / Double(fps)) let fileProperties = [kCGImagePropertyGIFDictionary as String: [kCGImagePropertyGIFLoopCount as String: 0]] let gifProperties = [kCGImagePropertyGIFDictionary as String: [kCGImagePropertyGIFUnclampedDelayTime as String: framedelay]] let cfURL = url as CFURL if let destination = CGImageDestinationCreateWithURL(cfURL, UTType.gif.identifier as CFString, images.count, nil) { CGImageDestinationSetProperties(destination, fileProperties as CFDictionary?) for image in images { CGImageDestinationAddImage(destination, image, gifProperties as CFDictionary?) } CGImageDestinationFinalize(destination) } } }