如何在旋转90度后将图像添加到CALayer的背面?

时间:2010-12-20 17:26:34

标签: iphone objective-c ipad core-animation

当我的旋转变换度高于90时,我想将背面图像添加到CALayer。

就像Flipboard翻转动画一样。

这是我目前的代码:

 CALayer *layer = self.view.layer;

 int frames = 130;

 layer.anchorPoint = CGPointMake(0, 0.5);

 CATransform3D transform = CATransform3DIdentity;
 transform.m34 = 1.0 / -2000.0;
 transform = CATransform3DRotate(transform, -frames * M_PI / 180.0, 0.0, 1.0, 0.0);

 self.view.layer.transform = transform;

 CAKeyframeAnimation *pivot = [CAKeyframeAnimation animationWithKeyPath:@"transform"];

 NSMutableArray *values = [[NSMutableArray alloc] initWithCapacity:45];
 NSMutableArray *times = [[NSMutableArray alloc] initWithCapacity:45];

 for (int i = 0; i < frames; i++) {

  CATransform3D transform = CATransform3DIdentity;
  transform.m34 = 1.0 / -2000.0;
  transform = CATransform3DRotate(transform, -M_PI / 180.0 * i, 0.0, 1.0, 0.0);

  [values addObject:[NSValue valueWithCATransform3D:transform]];
  [times addObject:[NSNumber numberWithFloat:(float)i / (frames - 1)]];
 }

 pivot.values = values;
 pivot.keyTimes = times;

 [values release];
 [times release];

 pivot.duration = 0.5f;
 pivot.calculationMode = kCAAnimationLinear;

 [layer addAnimation: pivot forKey: @"pivot"];

有人能告诉我如何像翻转效果一样添加背面图像。

alt text

1 个答案:

答案 0 :(得分:4)

据我所知,最简单的方法是添加两个代表页面正面和背面的子图层。将子图层的doubleSided属性设置为NO。将背面图层变换设置为您正在设置的相同翻转变换。然后,当页面的正面朝向观察者时,前侧层是可见的,而后侧层是“隐藏的”,反之亦然。

请参阅GeekGameBoard源代码(Card.m)以获取该技术的示例。