У меня есть подкласс 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"];
, высота изменяется, но не анимируется.Я вижу actionForKey: метод, вызываемый с frame.size.height, но независимо от того, что я возвращаю, он никогда не анимируется.Высота анимируется правильно, если я не установил действия или у меня нет метода actionForKey:, но тогда размеры окна также анимируются, чего я не хочу.
Кроме того, возможно, я неправильно понимаю,но я думал, что возврат nil из actionForKey: заставит запускать анимации по умолчанию, но кажется, что даже наличие метода останавливает все неявные анимации (установлен ли словарь действий или нет).
Что мне здесь не хватает, буду благодарен за любые указатели.