Esta pregunta se ha hecho antes, pero de una manera ligeramente diferente y no he podido obtener ninguna de las respuestas para que funcione como yo quería, así que estoy esperando alguien con grandes habilidades de Core Animation puede ayudarme.Cómo voltear una UIView alrededor del eje x mientras se cambian simultáneamente las subvistas
Tengo un juego de cartas en una mesa. A medida que el usuario desliza hacia arriba o hacia abajo, el conjunto de tarjetas sube y baja por la mesa. Hay 4 cartas visibles en la pantalla en un momento dado, pero solo la segunda tarjeta muestra su cara. A medida que el usuario desliza la segunda tarjeta se voltea sobre su cara y la siguiente carta (dependiendo de la dirección del deslizamiento) cae en su lugar mostrando su cara.
he levantado mi clase de vista de la tarjeta como esto:
@interface WLCard : UIView {
UIView *_frontView;
UIView *_backView;
BOOL flipped;
}
Y he tratado de voltear la tarjeta utilizando este pedazo de código:
- (void) flipCard {
[self.flipTimer invalidate];
if (flipped){
return;
}
id animationsBlock = ^{
self.backView.alpha = 1.0f;
self.frontView.alpha = 0.0f;
[self bringSubviewToFront:self.frontView];
flipped = YES;
CALayer *layer = self.layer;
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0/500;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, M_PI, 1.0f, 0.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;
};
[UIView animateWithDuration:0.25
delay:0.0
options: UIViewAnimationCurveEaseInOut
animations:animationsBlock
completion:nil];
}
Este código funciona, pero tiene la siguiente problemas que no puedo entender:
- Solo la mitad de la tarjeta en el eje x está animada.
- Una vez volteado, la cara de la tarjeta está al revés y se refleja.
- Una vez que he volteado la tarjeta, no puedo hacer que la animación vuelva a ejecutarse. En otras palabras, puedo ejecutar el bloque de animación tantas veces como quiera, pero solo la primera vez se animará. Las veces siguientes que trato de animar conducen a un desvanecimiento entre las subvistas.
Además, tenga en cuenta que necesito poder interactuar con la cara de la tarjeta. es decir, tiene botones en él.
Si alguien se ha encontrado con estos problemas, sería genial ver sus soluciones. Aún mejor sería agregar una transformación de perspectiva a la animación para darle ese poco de realismo adicional.
Gracias Aaron. El método transitionWithView me ha dado una pista para la solución. Dicho esto, me has dado una mejor comprensión de cómo las animaciones 3D. Es hora de que invierta en un buen libro Core Animation. –