У меня есть подкласс CALayer, MyLayer, который имеет свойство NSInteger, названное myInt. Я действительно хотел бы анимировать это свойство через CABasicAnimation, но кажется, что CABasicAnimation только работает над так называемыми "animatable" свойствами (границы, положение, и т.д.). Есть ли что-то, что я могу переопределить для создания моего пользовательского myInt свойства animatable?
Да, это возможно (хотя я считаю, что только в последних выпусках Core Animation, то есть в iPhone 3.0+ и OS X 10.6+).
Сделайте свойство динамическим, чтобы CA реализовал аксессоры за вас:
@dynamic myInt;
Сообщите слою, что изменения свойства требуют перерисовки:
+ (BOOL) needsDisplayForKey : (NSString *) ключ {
if ([key isEqualToString: @ "myInt"]) {
return YES;
} else {
return [super needsDisplayForKey : key];
}
}
Используйте значение myInt
в своем методе drawInContext:
. Теперь, когда вы анимируете myInt
, Core Animation будет интерполировать значения для каждого шага анимации и неоднократно просить слой нарисовать себя.
Если вы также хотите включить неявную анимацию для этого свойства, также переопределите actionForKey:
.