【发布时间】:2011-04-08 00:51:27
【问题描述】:
我有一个 CALayer 子类,它被限制为父层的宽度,但高度是固定的。我希望在调整窗口大小时禁用隐式动画,但在设置图层高度时启用。
要在调整窗口大小时禁用动画,我将图层操作设置为
NSMutableDictionary *actions = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[NSNull null], @"bounds", [NSNull null], @"position", nil];
这似乎有效。然后我覆盖了层子类中的 actionForKey: 方法
- (id<CAAction>)actionForKey:(NSString *)event
{
if ([event isEqualToString:@"frame.size.height"]) {
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"frame.size.height"];
[animation setDuration:0.5f];
return animation;
}
return nil;
}
但是当我改变我的层的高度时
[layer setValue:[NSNumber numberForFloat:50.0] forKey:@"frame.size.height"];
高度改变但没有动画。我看到使用 frame.size.height 调用 actionForKey: 方法,但无论我返回什么,它都不会被动画化。如果我没有设置动作,或者没有 actionForKey: 方法,高度会正确动画,但是窗口大小也会被动画,这是我不想要的。
另外,也许我误解了,但我认为从 actionForKey: 返回 nil 会使默认动画运行,但似乎即使该方法的存在也会停止所有隐式动画(无论操作字典是否设置) .
我在这里缺少什么,我将不胜感激。
【问题讨论】:
标签: cocoa core-animation