iphone core-animation calayer

iphone - Animación de una propiedad personalizada de la subclase CALayer



core-animation (2)

Hay una manera de conservar los iVars de sus subclases CALayer personalizadas. Sobreescribe initWithLayer :, el método que se llama para crear una copia de capas personalizadas. Por ejemplo, si tiene una capa en la que desea crear una propiedad personalizada llamada ''ángulo'', puede usar el siguiente código:

@implementation AngledLayer @synthesize angle = _angle // Tell Core Animation that this key should be animated + (BOOL) needsDisplayForKey:(NSString *)key { if ([key isEqualToString:@"angle"]) return YES; return [super needsDisplayForKey:key]; } // Make sure that, when the layer is copied, so is the custom ivar - (id) initWithLayer:(id)layer { self = [super initWithLayer:layer]; if (self) { AngledLayer *angledVersion = (AngledLayer *)layer; self.angle = angledVersion.angle; } return self; }

¡Y Bob es tu tío! Tenga en cuenta que no puede usar este objeto con animación implícita, para lo cual también debería reemplazar el método actionForKey :.

Tengo una subclase CALayer, MyLayer, que tiene una propiedad NSInteger llamada myInt. Realmente me gustaría animar esta propiedad a través de CABasicAnimation, pero parece que CABasicAnimation solo funciona en las propiedades llamadas "animables" (límites, posición, etc.). ¿Hay algo que pueda anular para hacer que mi propiedad myInt personalizada sea animable?


Sí, es posible (solo en las últimas versiones de Core Animation, creo, es decir, iPhone 3.0+ y OS X 10.6+).

  1. Haga que su propiedad sea dinámica para que CA implemente los accesorios por usted:

    @dynamic myInt;

  2. Indique a la capa que los cambios de la propiedad requieren redibujado:

    + (BOOL)needsDisplayForKey:(NSString*)key { if ([key isEqualToString:@"myInt"]) { return YES; } else { return [super needsDisplayForKey:key]; } }

  3. Usa el valor de myInt en tu método drawInContext: Ahora, cuando anime myInt , Core Animation interpolará los valores para cada paso de la animación y repetidamente le pedirá a la capa que dibuje.

  4. Si también desea habilitar animaciones implícitas para esta propiedad, también anule actionForKey: