0

UIImageViewアプリを最小化して(ホームボタン、別のアプリの入力など)、再入力した後、アニメーションを作成してアニメーションを再開/開始させようとしています。私のviewDidLoadメソッドでは、アニメーション、必要なパス、および回転を作成するために次のことを行います。

CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, startX, startY);
CGPathAddCurveToPoint(path, NULL, startX, startY, curvePoint1X, curvePoint1Y, endX, endY);
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
animation.duration = duration;
animation.path = path;
animation.repeatCount = HUGE_VALF;
[imageView.layer addAnimation:animation forKey:@"theAnimation"];
[UIView animateWithDuration:duration delay:0.0 options:0
                     animations:^{
                         [UIView setAnimationRepeatCount:HUGE_VALF];
                         [UIView setAnimationBeginsFromCurrentState:YES];
                         imageView.transform = CGAffineTransformMakeRotation(M_PI);
                     }
                     completion:NULL];

うまく機能しますが、ホームボタンを押してアプリに戻ると、アニメーションが再生されず、ビューが元の位置にあります。アプリを再起動したときにこのアニメーションを再開するように設定するにはどうすればよいですか?アニメーションを最初から始めなければならないかどうかは気にしません。私もNSTimer自分のアプリで実行していて、再開することを知っています。そこでチェックを実行してアニメーションを再開することを考えていましたが、それが最善の解決策かどうかはわかりません。

4

1 に答える 1

0

興味のある人のために、私は自分の問題の解決策を見つけました。「NSTimer」を実行していて、プレゼンテーション層のフレームを見てビューが動いているかどうかを定期的に確認し、アニメーションが動いていない場合は、アニメーションを再開します。プレゼンテーション層のフレームをチェックするのは難しい部分でした、そして私はこれをしました:

-(BOOL) isViewNotMoving:(UIImageView *) imageView {
  // Grab values from view presentation layer and compare to test movement
  CGRect viewLocation = [[[imageView layer] presentationLayer] frame];
  double currentX = viewLocation.origin.x;
  double currentY = viewLocation.origin.y;
  BOOL testResult = false;
  if ((currentX - previousX == 0) && (currentY - previousY == 0)) {
      testResult = true;
  } else {
      testResult = false;
  }
  previousX = currentX;
  previousY = currentY;

  return testResult;
}

ここでpreviousX、およびpreviousYは前に宣言されています。他の誰かがこれが役に立つと思うことを願っています。

于 2012-09-05T17:01:42.733 に答える