我有一个名为specialLayer
的子图的视图。不透明度的隐式动画像这样被禁用:为什么我不能在CABasicAnimation完成后设置图层的不透明度?
self.specialLayer.actions = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNull null], @"opacity", nil];
只有两种访问此子图层的方法。
- (void)touchDown {
self.specialLayer.opacity = 0.25f;
}
- (void)touchUp {
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
animation.fromValue = [NSNumber numberWithFloat:self.specialLayer.opacity];
animation.toValue = [NSNumber numberWithFloat:1.0];
animation.duration = 0.5;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
[self.specialLayer addAnimation:animation forKey:@"opacity"];
}
出现这种情况:
1)用户按下一个按钮向下(控股)和-touchDown被调用。 specialLayer的不透明度立即变为0.25
2)用户释放按钮并调用-touchUp。 specialLayer的不透明动画回到1.0
此序列仅适用于一次!
3)用户再次按下按钮(保持)并调用-touchDown。但specialLayer的不透明度在屏幕上不会改变!即使self.specialLayer.opacity = 0.25f;
被调用,也没有任何反应。不透明度似乎仍然是1.0f。
4)用户抬起手指,-touchUp被调用。 specialLayer的不透明度JUMPS为0.25,从那里动画到1.0f。
我用NSLog检查,以确保方法被调用的顺序。他们是这样。
当我取消注释动画代码并将不透明度直接设置为1.0时,后续直接不透明度更改立即生效。这绝对是导致问题的CABasicAnimation。删除禁用隐式动画的代码对此问题没有影响。
我不能为了我的生活弄清楚这里发生了什么。为什么CALayer不能反映我为不透明度添加CABasicAnimation后一段时间后为其设置的不透明度值?这是一个错误?
我在做什么错?
你是什么意思层的不透明度被打破?您需要在添加动画之前设置图层不透明度的最终值。像layer.opacity = 1.0 – msk
用更多细节更新了问题。 –
@ProudMember:你看过我的回答吗?第一句话解释了你的根本问题。请让我知道,如果你有任何问题。 –