Domanda

Ho un CALayer che voglio animare attraverso lo schermo. Ho creato due metodi: uno Aprire il livello e uno a chiusura pagina. Questi sia il lavoro assegnando un alloggio ai del livello trasformare proprietà.

Ora voglio usare un CAKeyFrameAnimation per far scorrere aperto lo strato. Ho ottenuto questo lavoro in modo che le diapositive strato aperto, ma ora non riesco a far scorrere lo strato vicino usando il mio vecchio metodo. Sto cercando di capire perché questo è. Qualsiasi aiuto sarebbe grande.

Codice per il mio CALayer:

- (id)init
{
  if( self = [super init] )
  {
    bIsOpen = NO;
    closeTransform = self.transform;
    openTransform = CATransform3DMakeTranslation(-235.0, 0.0, 0.0);
  }
  return self;
}

- (void)closeMenu
{
  if( bIsOpen )
  {
    self.transform = closeTransform;
    bIsOpen = !bIsOpen;
  }  
}

- (void)openMenu
{
  if( !bIsOpen )
  {
    CAKeyframeAnimation *closeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
    closeAnimation.duration = 1.0;
    closeAnimation.removedOnCompletion = NO;
    closeAnimation.fillMode = kCAFillModeForwards;
    closeAnimation.values = [NSArray arrayWithObjects:[NSValue valueWithCATransform3D:closeTransform],[NSValue valueWithCATransform3D:openTransform],nil];
    closeAnimation.timingFunctions = [NSArray arrayWithObject:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];

    [self addAnimation:closeAnimation forKey:@"transform"];
    bIsOpen = !bIsOpen;
  }
}
È stato utile?

Soluzione

ho calcolato questo fuori. Il mio problema è che l'animazione anima l'oggetto come se modificare la proprietà che viene modificato (in questo caso la trasformazione), ma il valore non viene effettivamente modificato. Credo che questo abbia a che fare con il Presentation Layer rispetto al livello del modello. Così, quando l'animazione è stata fatta per l'apertura del livello, il livello è stato posizionato sullo schermo in modo corretto, ma la sua trasformazione non è effettivamente cambiato. Quindi, per risolvere questo problema ho usato il metodo (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag delegato per impostare la trasformazione allo stato aperto una volta l'animazione era completa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top