Frage

ich eine CALayer haben, dass ich über den Bildschirm zu animieren möchten. Ich habe zwei Verfahren geschaffen: eine Folie, die Schicht öffnen und ein Schließen gleiten kann. Diese beiden Arbeiten eine Eigenschaft auf die Schicht der Zuweisung von transform-Eigenschaft.

Jetzt möchte ich eine CAKeyframeAnimation verwenden, um die Schicht zu schieben offen. Ich habe diese Arbeit, so dass die Schicht Dias öffnen, aber jetzt kann ich nicht die Schicht in der Nähe mit meiner alten Methode gleiten. Ich versuche, herauszufinden, warum das so ist. Jede Hilfe wäre toll.

-Code für meinen 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;
  }
}
War es hilfreich?

Lösung

dachte ich diese aus. Mein Problem war, dass die Animation belebt das Objekt, als ob es die Eigenschaft ändern, die (in diesem Fall der Transformation) geändert wird, aber der Wert ist nicht wirklich verändert. Ich glaube, das hat mit dem Presentation Layer gegenüber dem Modell Ebene zu tun. Also, wenn die Animation, die Schicht für die Öffnung wurde die Schicht positioniert auf dem Bildschirm richtig gemacht wurde, aber seine Transformation hat sich nicht wirklich verändert. Also dieses Problem beheben ich die (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag Delegatmethode eingestellt, die in den geöffneten Zustand zu verwandeln, sobald die Animation abgeschlossen war.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top