Mac*_*Mac 2 iphone core-animation
我是iPhone开发的新手,并且正在使用Core Animation进行一些实验.关于我正在尝试的动画的持续时间,我遇到了一个小问题.
基本上,我有一个带有两个子视图的视图,我正试图设置它们的不透明度,以便一个淡入而另一个淡出.问题是,子视图不是逐渐淡入/淡出,而是立即切换到/从完全/零不透明度.我试图用CATransaction调整动画持续时间而没有明显的效果.它也不是特定于动画不透明度 - 动画位置显示相同的问题.
我正在使用的代码(在superview的方法内)如下:
CALayer* oldLayer = ((UIView*) [[self subviews] objectAtIndex:0]).layer;
CALayer* newLayer = ((UIView*) [[self subviews] objectAtIndex:1]).layer;
[CATransaction begin];
[CATransaction setAnimationDuration:1.0f];
oldLayer.opacity = 0.0;
newLayer.opacity = 1.0;
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)
有谁知道问题可能是什么?
Bra*_*son 18
Noah的解决方案是最干净的方式来做你想要的,但是你没有看到动画的原因是为支持UIViews的CALayers禁用了隐式动画.因为没有动画,CATransaction无法设置任何内容的持续时间.
如果您真的想在图层上执行此动画,则需要设置手动CABasicAnimation来执行此操作:
CABasicAnimation *opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
opacityAnimation.removedOnCompletion = NO;
opacityAnimation.fillMode = kCAFillModeForwards;
[oldLayer addAnimation:opacityAnimation forKey:@"opacity"];
[newLayer addAnimation:opacityAnimation forKey:@"opacity"];
[CATransaction begin];
[CATransaction setAnimationDuration:1.0f];
oldLayer.opacity = 0.0;
newLayer.opacity = 1.0;
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)
(请注意,我不确定您是否可以在此处重复使用不透明度动画.您可能需要为每个图层创建单独的实例.)