试图从CALayers制作一张可以翻转的卡片

时间:2010-09-30 15:02:24

标签: objective-c ios core-animation calayer

我一直在尝试开发一个基于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

3 个答案:

答案 0 :(得分:23)

这个技巧最终成为CATransformLayer.的使用。这是一个仅用于包含其他图层的图层(它不能包含backgroundColorborderWidth等内容。然而,它确实保持了其子图层的真实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上所以我没有代码。如果有人有兴趣,我可以稍后发布。