Agregar múltiples catextlayers con animaciones a Calayer no funciona correctamente -- swift campo con uikit campo con avfoundation camp Relacionados El problema

Adding multiple CATextLayers with animations to CALayer not working properly


0
vote

problema

Español

Estoy grabando algunos subtítulos personalizados en un video animando cada línea de texto con un CATextLayer() PLUS CAKeyframeAnimation() con cambios en la opacidad.

Estoy luchando por detectar por qué a veces no aparecen algunas líneas. La mayoría de los tiempos es solo la primera línea que no aparece (parece aleatoria).

Aquí está mi función para quemar una línea de subtítulos:

  let textLayer = CATextLayer() textLayer.string = createNSStringFromWords(string: subtitles.lineText, textSize: size) textLayer.shouldRasterize = true textLayer.rasterizationScale = UIScreen.main.scale textLayer.backgroundColor = UIColor.clear.cgColor textLayer.alignmentMode = .center textLayer.frame = CGRect(     x: 0,     y: videoSize.height * 0.11,     width: videoSize.width,     height: 200)  textLayer.displayIfNeeded() textLayer.opacity = 0  // MARK: - Text animation let opacityAnimation = CAKeyframeAnimation(keyPath: "opacity") opacityAnimation.beginTime = subtitles.startTime opacityAnimation.duration = (subtitles.endTime - subtitles.startTime)  // Opacity animation style opacityAnimation.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut) opacityAnimation.values = [0.2, 1, 1, 1, 1] opacityAnimation.keyTimes = [0, 0.2, 0.5, 0.8, 1] opacityAnimation.autoreverses = false  // What happens when we end the animation opacityAnimation.fillMode = .removed opacityAnimation.isRemovedOnCompletion = false  // Add the final result and iterate textLayer.add(opacityAnimation, forKey: "opacity") targetLayer.addSublayer(textLayer)   

Ejecutar esto para cada línea de texto para agregar, agregando cada uno al mismo CALayer (TextLayer). Revisé los subtítulos de entrada y los parecen ser correctos en el tiempo y el texto. También revisé las animaciones y parecen estar bien.

La única diferencia entre la primera y el resto, parece ser el inicio inicial (0) y la duración (normalmente y GT; 1.0 segundos). No estoy seguro de dónde ir a continuación.

Original en ingles

I am burning some custom captions into a video by animating each line of text with a CATextLayer() plus CAKeyframeAnimation() with changes in opacity.

I am struggling to detect why sometimes some lines do not appear. Most of the times is just the first line which does not appear (seems random).

Here is my function for burning a line of subtitles:

let textLayer = CATextLayer() textLayer.string = createNSStringFromWords(string: subtitles.lineText, textSize: size) textLayer.shouldRasterize = true textLayer.rasterizationScale = UIScreen.main.scale textLayer.backgroundColor = UIColor.clear.cgColor textLayer.alignmentMode = .center textLayer.frame = CGRect(     x: 0,     y: videoSize.height * 0.11,     width: videoSize.width,     height: 200)  textLayer.displayIfNeeded() textLayer.opacity = 0  // MARK: - Text animation let opacityAnimation = CAKeyframeAnimation(keyPath: "opacity") opacityAnimation.beginTime = subtitles.startTime opacityAnimation.duration = (subtitles.endTime - subtitles.startTime)  // Opacity animation style opacityAnimation.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut) opacityAnimation.values = [0.2, 1, 1, 1, 1] opacityAnimation.keyTimes = [0, 0.2, 0.5, 0.8, 1] opacityAnimation.autoreverses = false  // What happens when we end the animation opacityAnimation.fillMode = .removed opacityAnimation.isRemovedOnCompletion = false  // Add the final result and iterate textLayer.add(opacityAnimation, forKey: "opacity") targetLayer.addSublayer(textLayer) 

I run this for every line of text to add, adding each to the same CALayer(textLayer). I checked the input subtitles and the seem to be correct in time and text. I also checked the animations and they seem to be fine.

The only difference between the first one and the rest it seems to be the initial start (0) and the duration (typically > 1.0 seconds). Not sure about where to go next.

        

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

El hecho de que habla de "El inicio inicial (0)" es sospechoso. No está mostrando un código suficiente, pero es crucial que su animación comience los tiempos se exprese en términos de avcoreanimationbegIntimeatzero y no veo ninguna evidencia de que esté haciendo eso. No puede usar 0, ya que se reemplazará con CACurrentMediaTime() .

 

The fact that you speak of "the initial start (0)" is suspect. You are not showing sufficient code, but it is crucial that your animation begin times be expressed in terms of AVCoreAnimationBeginTimeAtZero and I see no evidence that you are doing that. You cannot use 0, as it will be replaced with CACurrentMediaTime().

 
 
   
   

Relacionados problema

0  ¿Puedo agregar uiimage o cgimageref al video?  ( Can i add uiimage or cgimageref to video ) 
Quiero agregar una imagen entre videos, al igual que Smiley o Clip Art. Smiley y el arte prediseñado probablemente tienen animación. Me referí a Encuentre ...

5  Concate dos archivos de audio uno tras otro iOS  ( Concat two audio files one after another ios ) 
Quiero concatenar dos archivos de audio en uno. Había hecho el siguiente código. Por favor, compruebe a continuación. - (BOOL)combineFiles{ AVMutableCo...

6  CvpixelBuffer a Ciimage siempre regresando nil  ( Cvpixelbuffer to ciimage always returning nil ) 
Estoy tratando de convertir un pixelbuffer extraído de avplayeritemvideooutput a Ciimage pero siempre recibiendo nil. el código if([videoOutput_ hasNew...

0  ¿Cómo reproducir datos de transmisión de AV en iOS?  ( How to play streaming av data in ios ) 
Estoy tratando de Play Streaming AV Data del servidor (Ej. VLC Server) Servidor Enviar datos de archivos AV al cliente por TCP / IP. Cliente Obtén dat...

1  IOS 8 Película de cámara trasera y frente  ( Ios 8 film from both back and front camera ) 
¿Cómo puedo grabar en el iOS 8 o incluso iOS 7 (si es posible) y cambiar entre cámaras mientras lo hago? He visto aplicaciones haciendo esta grabación desde l...

5  Uso de AvmutableAudiomix para ajustar los volúmenes para pistas dentro del activo  ( Using avmutableaudiomix to adjust volumes for tracks within asset ) 
Estoy aplicando un AvmutableAudiomix a un activo que he creado, el activo generalmente consta de 3-5 pistas de audio (sin video). El objetivo es agregar vario...

3  Salida de reproducción de redirección del elemento de AVPlayer  ( Redirection playback output of avplayer item ) 
Lo que quiero hacer es tomar las muestras de salida de un avasset correspondiente a un archivo de audio (sin video involucrado) y enviarlos a una clase de efe...

3  ¿Cómo convertir el objeto NSDATA con los datos JPEG en CVPiXELBUSHERREF en OS X?  ( How to convert nsdata object with jpeg data into cvpixelbufferref in os x ) 
como el título mencionado. Busco con Google y StackOverFlow, todos los recursos son para conversión de UIIMAGE, o convertir nsimage de CVPIXELBUSHERREF. Aho...

2  Exposición falsa larga en iOS  ( Fake long exposure on ios ) 
Tengo que implementar capacidades de fotos de larga exposición a una aplicación. Ya que sé que esto no es realmente posible, tengo que falsificarlo. Debe func...

4  Problemas con la orientación cambiante de una avcaptureVideopreviewlayer  ( Issues with changing orientation of an avcapturevideopreviewlayer ) 
Estoy usando avfoundation para crear una cámara de video UI. El ViewController que contiene solo se mostrará en la orientación de paisajes. Al cambiar la orie...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos