それは本当に単純なものでなければなりませんが、ブロックを使用してこれを機能させることに成功していません。これには質問と回答がありますが、私が見つけたものはすべて、私が求めているブロックベースのアニメーションではCABasicAnimation
なく、使用することによって解決されます。UIView
次のコードは動作しません (ブロックベース)、アニメーションはありません:
CGAffineTransform spin = CGAffineTransformRotate(spiningView.transform, DEGREES_RADIANS(360));
CATransform3D identity = CATransform3DIdentity;
CATransform3D spin2 = CATransform3DRotate(identity, DEGREES_RADIANS(360), 0.0f, 0.0f, 1.0f);
[UIView animateWithDuration:3.0f
delay:0.0f
options:UIViewAnimationOptionCurveLinear
animations:^
{
spiningView.transform = spin;
//spiningView.layer.transform = spin2;
//Have also tried the above, doesn't work either.
}
completion:^(BOOL finished)
{
spiningView.transform = spin;
//spiningView.layer.transform = spin2;
}];
私の理解では、Block-Based を使用するたびに、UIViewAnimation
Block が開始値が最終値と同じであることを「認識」すると、アニメーションは発生しません。360 度に移動するように設定すると、オブジェクトはその場所にとどまります。ただし、ブロックベース アニメーションを使用してこのアニメーションを作成する必要がありますCABasicAnimation
。
CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0f];
rotationAnimation.duration = 3.0f;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = 1;
[spiningView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
さらに、次のブロックベースは機能しますが、アニメーションの間に停止があります (最初に 180 度回転し、そこから別の 180 度を作成して回転を完了します)。これは私が求めているものではありません。
[UIView animateWithDuration:3.0f
delay:0.0f
options:UIViewAnimationOptionCurveLinear
animations:^
{
spiningView.transform = CGAffineTransformRotate(spiningView.transform, DEGREES_RADIANS(180));;
}
completion:^(BOOL finished)
{
[UIView animateWithDuration:3.0f
delay:0.0f
options:UIViewAnimationOptionCurveLinear
animations:^
{
spiningView.transform = CGAffineTransformRotate(spiningView.transform, DEGREES_RADIANS(360));
}
completion:^(BOOL finished)
{
}];
}];
私は多くの時間を節約し、使用に身を委ねてそれをやり遂げることができることを知っていますが、この場合(360度の回転を行う)、一方が機能し、もう一方が機能しない理由CABasicAnimation
を知りたいです。この場合の 2 と、完全な 360 度回転を実行できるコード (ブロックベース) の間で、これに関する詳細な説明をいただければ幸いです。
前もって感謝します。