1

UIImageView のかなり単純な回転を行いたいです。基本的に、完全に正方形の画像にホイールの画像があり、アニメーションで回転させたいと考えています。

だから私はこれを試しました:

- (void)testButtonPressed:(id)sender {
    NSLog(@"Test button pressed");
    CGAffineTransform transform = CGAffineTransformMakeRotation(1.0);

    [UIView animateWithDuration:10.0 delay:0 options:UIViewAnimationOptionCurveLinear
                     animations:^{
                         dial.transform = transform;  // "dial" is a UIImageView
                     }
                     completion: ^(BOOL finished){
                     }];
 }

何が起こるかというと、アニメーションが始まると、画像 (約 300 平方) がすぐに 50 ~ 100 ピクセル飛び出し、狭い楕円形に「圧迫」されます。その後、アニメーションは問題なく進行します。

代わりに使用してみbeginAnimationましたが、同じ動作になりました。

回転の原点に関することを理解していないことは理解していますが(ドキュメントは円で話しています)、スクイーズは奇妙に思えます。

何か案は?

(これは、Xcode 4.5.1 の iPhone 6.0 シミュレーターで実行されています。おそらく単なるシミュレーターのものですか?)

更新: もう少し作業する機会がありました (「実際の」作業の合間に行います)。自動レイアウトのない新しい XIB を作成し、ホイールは「通常」でしたが、背景は垂直方向に圧縮されていました。

それからちょっとしたインスピレーション。NLog ダンプで画像ビューが「自動サイズ変更」とマークされていることに気付きました。IB からそれをオフにする方法はわかりませんでしたが、メイン ビューで「サブビューの自動サイズ変更」をオフにできることがわかりました。それをすると、完璧に動作しました!

自動レイアウトに導入された新機能のいくつかが、ここでの犯人であると考えています。ただし、すべての魔法の設定をまだ見つけたかどうかはわかりません.

しかし... すべての「不透明」をオフにした後でも、iPadで画像の「透明」部分が黒くなるという問題がまだあります。

更新:画像が 32 ビット モードではなく JPG 24 ビット モードであることがようやくわかりました。これはシミュレーターで機能します。純粋な黒は透明として解釈されます。しかしiPadでは使えません。32ビット画像を使用すると、それが修正され、(「サブビューの自動サイズ変更をオフにして奇妙な歪み/変換を排除する」と) ...回転> 180度が後方にアニメーション化されることを除いて、すべて問題ありません。アニメーションは「スマート」であり、「最短パス」を取ります.

アニメーションを 2 つのステップに分割する必要があると思います。

4

1 に答える 1

0

CABasicAnimationでやってみませんか。

CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat: -M_PI_2 ];
rotationAnimation.duration = 2.0;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = 1.0; 
rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

[imageView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
于 2012-11-30T21:40:43.090 に答える