0

私の最初の Core Animation は、点 a から点 b に移動するイメージです。なんらかの理由で、アニメーションが呼び出されると、赤いボックスが表示され、そこにある画像の代わりに移動します。これが私のコードです:

-(IBAction)preform:(id)sender{
CALayer *layer = [CALayer layer];
[layer setPosition:CGPointMake(100.0, 100.0)];
[layer setBounds:CGRectMake(0.0, 0.0, 50.0, 60.0)];
[layer setBackgroundColor:[[UIColor redColor] CGColor]];
[imView.layer addSublayer:layer];

CGPoint point = CGPointMake(imView.frame.origin.x, imView.frame.origin.y);
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"position"];
anim.fromValue  = [NSValue valueWithCGPoint:point];
anim.toValue    = [NSValue valueWithCGPoint:CGPointMake(point.x + 50, point.y)];
anim.duration   = 1.5f;
anim.repeatCount =1;
anim.removedOnCompletion = YES;
anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[layer  addAnimation:anim forKey:@"position"];
}
4

1 に答える 1

1

アプリの UI にその赤いボックスが必要ない場合は、作成せずに、アニメーションをビューのレイヤーに適用します。その赤いボックスが必要な場合は、作成しますが、アニメーションを赤いボックスのレイヤーではなく、ビューのレイヤーに適用します

また、レイヤーの を変更しない限りanchorPointpositionプロパティは実際にはレイヤーの中心であり、角ではありません。スムーズなアニメーションを作成するには、それを考慮する必要があります。

最後に、アニメーションが終了した後にビューをスナップさせたくない場合は、新しい位置を設定する必要があります。心配はいりません。アニメーションの再生中は、ビューの再配置は表示されません。

推奨される (およびテストされていない) コード:

-(IBAction)preform:(id)sender{

  CGPoint point = CGPointMake(imView.frame.size.width/2.0 , imView.frame.size.height/2.0 );
  CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"position"];
  anim.fromValue  = [NSValue valueWithCGPoint:point];
  anim.toValue    = [NSValue valueWithCGPoint:CGPointMake(point.x + 50, point.y)];
  anim.duration   = 1.5f;
  anim.repeatCount =1;
  anim.removedOnCompletion = YES;
  anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
  [imView.layer  addAnimation:anim forKey:@"position"];

  imView.center = CGPointMake( imView.center.x + 50, imView.center.y
}

代わりにアニメーションヘルパー関数を使用すれば、これはすべて簡単になりますUIViewが、使用方法を学ぼうとしていると思いますCAAnimation

于 2013-02-11T02:33:41.520 に答える