Анимация пользовательского свойства подкласса CALayer

У меня есть подкласс CALayer, MyLayer, который имеет свойство NSInteger, названное myInt. Я действительно хотел бы анимировать это свойство через CABasicAnimation, но кажется, что CABasicAnimation только работает над так называемыми "animatable" свойствами (границы, положение, и т.д.). Есть ли что-то, что я могу переопределить для создания моего пользовательского myInt свойства animatable?

30
задан jemmons 7 March 2010 в 06:12
поделиться

1 ответ

Да, это возможно (хотя я считаю, что только в последних выпусках Core Animation, то есть в iPhone 3.0+ и OS X 10.6+).

  1. Сделайте свойство динамическим, чтобы CA реализовал аксессоры за вас:

     @dynamic myInt; 
     
  2. Сообщите слою, что изменения свойства требуют перерисовки:

     + (BOOL) needsDisplayForKey : (NSString *) ключ {
    if ([key isEqualToString: @ "myInt"]) {
    return YES; 
    } else {
    return [super needsDisplayForKey : key]; 
    } 
    } 
     
  3. Используйте значение myInt в своем методе drawInContext: . Теперь, когда вы анимируете myInt , Core Animation будет интерполировать значения для каждого шага анимации и неоднократно просить слой нарисовать себя.

  4. Если вы также хотите включить неявную анимацию для этого свойства, также переопределите actionForKey: .

69
ответ дан 27 November 2019 в 23:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: