2015-05-27 3 views
1

Используя Rob Mayoff's answer to create GIF, я адаптировал его код к следующему в Swift.Почему GIF не замедляется с kCGImagePropertyGIFDelayTime

let kFrameCount:Int = 6 

let frames:NSNumber = NSNumber(float: 20000.0) //No matter what number I place here...GIF runs at same speed 

let fileProperties = [kCGImagePropertyGIFLoopCount as String: 0] 
let frameProperties = [kCGImagePropertyGIFDelayTime as String: frames] 

let documentsUrl = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as! NSURL 
let fileURL = documentsUrl.URLByAppendingPathComponent("animated.gif") 

var destination: CGImageDestination = CGImageDestinationCreateWithURL(fileURL, kUTTypeGIF, kFrameCount, nil) 
var destination2: Void = CGImageDestinationSetProperties(destination, fileProperties) 

for i in 0..<kFrameCount { 
    CGImageDestinationAddImage(destination, imagessss[i].CGImage, frameProperties) 
} 

if (!CGImageDestinationFinalize(destination)) { 
     println("fail") 
} 

println(fileURL) 

let activityVC: UIActivityViewController = UIActivityViewController(activityItems: [fileURL], applicationActivities: nil) 
self.presentViewController(activityVC, animated: true, completion: nil) 

Это создает GIF. Но независимо от того, какую сумму я размещаю как float, 20000.0 или 0.01, GIF работает на том же DelayTime. Также, если я изменяю значение в fileProperties от 0 до любого другого номера, GIF все еще выполняет непрерывный цикл.

Я чувствую, что ошибка заключается в строке

var destination2: Void = CGImageDestinationSetProperties(destination, fileProperties) 

или моей декларации fileProperties и frameProperties

Кто-нибудь знает, почему мой fileProperties и frameProperties не влияющие на GIF?

P.S. Я могу эффективно замедлить gif за счет увеличения кадров и шнуровки массива imagessss с повторяющимися изображениями, но это не идеально.

+0

Интересный фрагмент кода о проблеме задержки: http://stackoverflow.com/a/17824564/ 2227743 – Moritz

+0

не должен delayTime быть врожденным свойством GIF-файла, принятым при написании? – Chameleon

+0

Посмотрите на этот пример: https://gist.github.com/mayoff/4969104 ищите kCGImagePropertyGIFDelayTime –

ответ

2

Вам не хватает kCGImagePropertyGIFDictionary уровня в вашей собственности.

Изменение Вы свойства в:

let fileProperties = [kCGImagePropertyGIFDictionary as String: [kCGImagePropertyGIFLoopCount as String: 0]] let frameProperties = [kCGImagePropertyGIFDictionary as String: [kCGImagePropertyGIFDelayTime as String: frames]]

(я использую Xcode 6.4)

 Смежные вопросы

  • Нет связанных вопросов^_^