以前有人问过这个问题,但方式略有不同,我无法得到任何答案以按照我想要的方式工作,所以我希望有出色的 Core Animation 技能的人可以帮助我。
我的桌子上有一组卡片。当用户向上或向下滑动时,一组卡片会在桌子上上下移动。在任何给定时间,屏幕上都会显示 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];
}
此代码有效,但它有以下我似乎无法弄清楚的问题:
- x 轴上只有一半的卡片是动画的。
- 一旦翻转,卡片的正面就会倒置并镜像。
- 一旦我翻转了卡片,我就无法让动画再次运行。换句话说,我可以根据需要多次运行动画块,但只有第一次才会动画。随后我尝试制作动画只会导致子视图之间的淡入淡出。
另外,请记住,我需要能够与卡片的表面进行交互。即它上面有按钮。
如果有人遇到这些问题,很高兴看到您的解决方案。更好的做法是为动画添加透视变换,以赋予它额外的真实感。