0

画面上のポイントAからポイントBをクリックすると、オブジェクトがポイントAからポイントBまでゆっくりと(水平に)まっすぐスライドするアニメーションを作成しようとしています。ちなみに、アニメーションは初めてです。

        [UIView animateWithDuration:10
                              delay:0
                            options:nil
                         animations:^ {

                             if(magnifier != nil){
                                 [magnifier removeFromSuperview];

                             }

                             magnifier = [[MagnifierView alloc] init];

                             magnifier.viewToMagnify = imageView;
                             magnifier.touchPoint = newPoint;
                             [imageView addSubview:magnifier];
                             [magnifier setNeedsDisplay];                             
                         } 
                         completion:nil]; 

しかし、何らかの理由でそれはそれをずっと上に動かし、そして最終的にはポイントBに移動しています。奇妙な曲線のようなものです。

どうすればこれを正しく行うことができますか?

4

1 に答える 1

1

ループを使用しないでください。持っているアニメーションブロックを使用するだけです。

  • ブロックの前に、オブジェクトをポイントAに設定します。
  • ブロック内で、ポイントBに設定します。ブロックによってアニメーション化されます。
  • また、アニメーションブロックの外側でオブジェクトを初期化します。

例:

// initialize your object outside the block
magnifier = [[MagnifierView alloc] init];
[magnifier setFrame:CGRectMake(0, 0, 100, 100)]; // for example, start at 0, 0 (width and height set to 100 for demo purposes)
[imageView addSubview:magnifier];

[UIView animateWithDuration:10
 delay:0
 options:nil 
 animations:^ {

    // inside the animation block, put the location you want the magnifier to move to
    [magnifier setFrame:CGRectMake(500, 0, 100, 100)]; // for example, move to 500, 0

} 
completion:^(BOOL finished) {

    // do anything you need after here

}];

また、オプションについてUIViewAnimationOptionCurveEaseInOutは、アニメーションの最初と最後にイージング効果が必要なUIViewAnimationOptionCurveLinear場合、またはイージングなしの同じタイミングのアニメーションが必要な場合に設定できます(他にも利用可能なものがあります。UIViewAnimationOptionsを参照してください)。

于 2012-12-11T22:54:57.637 に答える