¿Cómo puedo hacer que OpenFlow funcione correctamente en iOS 5.0?

Recientemente actualicé mi aplicación para usar el SDK de iOS 5.0. Dentro de él, estoy utilizando la implementación de flujo de cubierta OpenFlow de Alex Fajowski .

Descubrí que cuando ejecuto la aplicación en iOS 5.0, OpenFlow está haciendo una transformación incorrecta o reposicionando Z cuando deslizo las imágenes.

¿Hay algo que pueda hacer para que OpenFlow funcione correctamente en iOS 5.0 SDK?

Hice una mejora sobre lo que tienes aquí y ciertamente hace que funcione sin problemas (como solía ser en iOS 4).

En AfOpenFlowView.m, en lugar de lo indicado anteriormente (in -setUpInitialState):

leftTransform = CATransform3DTranslate(CATransform3DIdentity, 0, 0, SIDE_COVER_ZPOSITION / 2.0); leftTransform = CATransform3DRotate(leftTransform, SIDE_COVER_ANGLE, 0.0f, 1.0f, 0.0f); rightTransform = CATransform3DTranslate(CATransform3DIdentity, 0, 0, SIDE_COVER_ZPOSITION / 2.0); rightTransform = CATransform3DRotate(rightTransform, SIDE_COVER_ANGLE, 0.0f, -1.0f, 0.0f); 

Inside -layoutCover: selectedCover: animated, coloque el siguiente código:

 CGFloat newZPosition = SIDE_COVER_ZPOSITION / 2.0; 

 CABasicAnimation *zPositionAnimation = [CABasicAnimation animationWithKeyPath:@"zPosition"]; [zPositionAnimation setToValue:[NSNumber numberWithFloat:newZPosition]]; [zPositionAnimation setDuration:(animated ? .3 : 0.0)]; [zPositionAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; [zPositionAnimation setRemovedOnCompletion:NO]; [zPositionAnimation setFillMode:kCAFillModeForwards]; 

Ahora, en lugar de hacerlo:

 aCover.layer.zPosition = newZPosition; 

Reemplazarlo por:

 [aCover.layer addAnimation:zPositionAnimation forKey:nil]; 

Puede habilitar condicional, ya sea en function de si se está ejecutando en iOS 4 o 5.

Mejor,

Hoy, finalmente encontré la solución para este problema. Aparentemente, en iOS 5, zPosition ya no se está animando (está muy mal, porque la documentation sí lo dice). Esta es la razón por la cual este error puede ser corregido al include la transición correcta a la CATransform3D.

Más temprano:

  leftTransform = CATransform3DIdentity; leftTransform = CATransform3DRotate(leftTransform, SIDE_COVER_ANGLE, 0.0f, 1.0f, 0.0f); rightTransform = CATransform3DIdentity; rightTransform = CATransform3DRotate(rightTransform, SIDE_COVER_ANGLE, 0.0f, -1.0f, 0.0f); 

Ahora se ve así:

  leftTransform = CATransform3DTranslate(CATransform3DIdentity, 0, 0, SIDE_COVER_ZPOSITION); leftTransform = CATransform3DRotate(leftTransform, SIDE_COVER_ANGLE, 0.0f, 1.0f, 0.0f); rightTransform = CATransform3DTranslate(CATransform3DIdentity, 0, 0, SIDE_COVER_ZPOSITION); rightTransform = CATransform3DRotate(rightTransform, SIDE_COVER_ANGLE, 0.0f, -1.0f, 0.0f); 

Espero que les ayude, ya que me ayudaron.