我一直在尝试开发一个基于CALayer
的“CardView”对象,该对象有两个彼此背对的层,以呈现卡片的两面。我一直在处理像doublesided
的{{1}}属性这样的事情,并发现结果令人困惑。我的基类是CALayer
,我正在为它添加两个CALayer
,一个带有M_PI / 2变换,两个都带有sublayers
,但是就目前而言,我得到的前面显示无论如何如何旋转卡片,背面根本不显示。如果我不创建正面,背面显示两侧,文字在一个角落,而不是48点,模糊。
这是一个屏幕截图的链接,显示卡片刚刚在doublesided = NO
视图中完成一次完整的革命。你看到前面的后面。这应该是看不见的,背面应该显示......我想......
https://files.me.com/gazelips/lj2aqo
UIViewController's
// CardView.h
#import <Foundation/Foundation.h>
#import <QuartzCore/QuartzCore.h>
#define kCardWidth 100.0f
#define kCardHeight 150.0f
@interface CardView : CALayer {
CALayer *cardFront, *cardBack;
}
@property (nonatomic, retain) CALayer *cardFront, *cardBack;
- (id)initWithPosition:(CGPoint)point;
- (void)addPerspective;
- (CALayer *)createFront;
- (CALayer *)createBack;
@end
答案 0 :(得分:23)
这个技巧最终成为CATransformLayer.
的使用。这是一个仅用于包含其他图层的图层(它不能包含backgroundColor
或borderWidth
等内容。然而,它确实保持了其子图层的真实3D关系(即,它不会像常规CALayer
那样展平它们)。因此,您可以制作两个图层,翻转一个并将其zPosition
偏移一个头发,并将它们放在CATransformLayer
中,现在您可以从星期日开始六个方向翻转此父图层,子图层保持锁定在一起并始终正确呈现。非常甜蜜,低开销!
答案 1 :(得分:1)
有一种更简单的方法可以做到这一点,只要你只是试图做一个正常的“翻转”。
查看UIView动画系统,并有一个'transitionWithView'。你可以在那里应用翻转动画,它将提供相同的效果,几乎没有工作。
答案 2 :(得分:0)
我还阅读了很多UIView的版本。将它们拼凑在一起之后,这就是我得到的并且它有效。
设置我设置
1)接口构建器下的卡片,其中一个视图对象包含一个显示卡片正面的UIImageView对象。 所以View-&gt; View-&gt; UIImageView-&gt;卡片前面的图像文件
2)然后将包含UIImageView的View对象更改为UIController Class(以便它响应触摸)。
3)在viewcontroller的头文件中,我创建了链接到UIImageView的IBOutlet UIImageView cardView和一个通过“touch down”事件链接到View对象(现在是UIController对象)的IBAction flipCard。
4)IBAction flipCard是通过动态创建另一个子视图View对象来实现的,该对象包含另一个UIImageView,但是带有背面图像的init。
5)使用CGRect,背面物体的框架和中心与正面对齐。
6)然后调用UIView的动画方法将子视图与动画交换。
这就是诀窍。
我现在不在我的Mac上所以我没有代码。如果有人有兴趣,我可以稍后发布。