質問

私は、画面全体でアニメーション化することのCALayerを持っています。 1枚のスライドは、スライドの近くに層と1を開く:私は2つのメソッドを作成しました。これらの層のtransformプロパティにプロパティを割り当てることで、作業の両方ます。

今、私はレイヤーを開いてスライドさせるCAKeyFrameAnimationを使用したいです。層のスライドが開くので、私はこの作業を得たが、今私は私の古い方法を使用してレイヤ近くをスライドすることはできません。私はこれである理由を理解しようとしています。すべてのヘルプは素晴らしいことだ。

私の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;
  }
}
役に立ちましたか?

解決

私はこのアウトを考え出し。私の問題は、(この場合は変換)、それが変更されたプロパティを変更するかのようなアニメーションは、オブジェクトをアニメーション化していることでしたが、値が実際に変更されていません。私は、これはモデルレイヤ対プレゼンテーション層に関係していると信じています。アニメーションは、レイヤを開くために行われたときに、層が正しく画面上に配置したが、その変換が実際に変更されていません。したがって、この私を修正するアニメーションが完了した後に開いた状態に変換を設定するには(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flagのデリゲートメソッドを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top