我有一组卡片在桌子上。当用户向上或向下滑动卡片组时,卡片会沿着桌子上下移动。屏幕上每次只显示4张卡片,但只有第二张卡片显示其正面。当用户滑动第二张卡片时,它会翻转回正面,然后下一张卡片(根据滑动方向)就会落在它的位置并显示其正面。
我已经像这样设置了我的卡片视图类:
@interface WLCard : UIView {
UIView *_frontView;
UIView *_backView;
BOOL flipped;
}
我尝试使用以下代码翻转卡片:
- (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];
}
这段代码能够运行,但是存在以下问题,我无法解决:
- 只有卡片横轴一半被动画化了。
- 一旦翻转,卡片的正面是倒立和镜像的。
- 一旦我翻转了卡片,就再也无法运行动画了。换句话说,我可以运行多次动画块,但只有第一次会有动画效果。之后尝试运行动画都只会在子视图之间产生淡入淡出的效果。
此外,请注意我需要能够与卡片的正面进行交互。即:它上面有按钮。
如果有人遇到这些问题并找到了解决方案,那么分享一下你的解决方案将会非常棒。更好的做法是添加透视变换到动画中,使其更具真实感。