这是我的动画代码:
CGFloat zDistance = 850;
CGFloat scaleFactor = BACK_COVER_WIDTH / self.transformLayer.bounds.size.width;
CATransform3D rotation = CATransform3DMakeRotation(M_PI, 0.0, 1.0, 0.0);
CATransform3D scale = CATransform3DMakeScale(scaleFactor, scaleFactor, 0.0);
CATransform3D transform = CATransform3DConcat(rotation, scale);
transform.m34 = 1.0 / -zDistance;
CGPoint location = CGPointMake(CGRectGetMidX(self.layer.frame), CGRectGetMidY(self.layer.frame));
[CATransaction begin];
[CATransaction setAnimationDuration:1.0];
self.transformLayer.transform = transform;
self.transformLayer.position = location;
[CATransaction commit];self.transformLayer是一个有两个子层的CATransformLayer,一个用于前面,另一个用于后面(我正在创建一个“翻转”效果)。但是,这段代码只是在没有动画的情况下设置位置和转换。所以我认为transform可能不支持隐式动画,所以我把它取出来并尝试设置位置,但这也没有动画化(我确信position支持隐式动画)。
我是做错了什么,还是CATransformLayer只是不支持隐式动画?文档没有提到任何关于它不支持它的内容,所以我假设它是支持它的。
编辑:这是针对Mac的,而不是iOS
发布于 2011-03-18 20:45:29
我最后只是使用了明确的动画,但大卫邓肯的答案这里似乎是一个正确的方向上的任何其他人谁遇到这个问题。
发布于 2011-02-08 05:30:59
隐式动画对于与UIView相关的所有层都是禁用的。如果您对细节感兴趣,我还有一个更多的详细反应关于另一个问题。但简而言之,如果您希望在与视图关联的层上进行动画,则需要显式地执行它们(即使用-addAnimation:forKey:附加-addAnimation:forKey:对象)。
编辑:原来这个问题是针对OS的,而CATransformLayer实际上是一个子层。请忽略这个答案(虽然链接的答案对iOS仍然有用)。
发布于 2011-02-12 19:08:41
只呈现CATransformLayer的子层。因此,我猜想它的transform属性从未被应用过。您是否尝试过设置sublayerTransform属性?看来这就是你想要的。
https://stackoverflow.com/questions/4929894
复制相似问题