2

やりたい

  1. AnimationDurationを0に変更します
  2. 何かをする
  3. AnimationDurationをもっと長いものに変更します(たとえば1.0f)
  4. 他のことをする

...すべてtouchesBeganメソッドで、間に「一時停止」はありません。しかし、それは私にそれをさせないようです。

このような:

s1.animationDuration = 0.0f;
s1.center = touchedPoint;
s1.alpha = 1.0f;
s1.animationDuration = 1.0f;
s1.alpha = 0.0f;

ここでの完全な例: https ://gist.github.com/gregtemp/5086240

touchesEndedメソッドに移動できることはわかっていますが、それは避けたいと思います。

4

1 に答える 1

1

あなたの質問では、次の方法を尋ねています。

  1. オブジェクトのプロパティを更新します
  2. それを移動
  3. 同じオブジェクトのプロパティを更新します
  4. フェードアウト

...画面に触れたときに別の場所に再表示できるようにします。

また、これを1つの方法で実行したい...

この問題を解決するために別のアプローチを取ることをお勧めします。

まず、図形を、削除または破棄するまで永続するオブジェクトと考えてみてください。基本的に、オブジェクトはさまざまなメソッドに渡されるものとして扱うことができます。

このように考え始めたら、次のテクニックを使用して、探している効果を作成できます。

#import "C4WorkSpace.h"

@implementation C4WorkSpace 

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    for (UITouch *t in touches) {
        CGPoint touchPoint = [t locationInView:self.canvas];
        [self createObjectAtPoint:touchPoint];
    }
}

-(void)createObjectAtPoint:(CGPoint)newPoint {
    C4Shape *s = [C4Shape ellipse:CGRectMake(newPoint.x-25,newPoint.y-25,50,50)];
    s.userInteractionEnabled = NO;
    [self.canvas addShape:s];
    [self runMethod:@"fadeAndRemoveShape:" withObject:s afterDelay:0.0f];
}

-(void)fadeAndRemoveShape:(C4Shape *)shape {
    shape.animationDuration = 1.0f;
    shape.alpha = 0.0f;
    [shape runMethod:@"removeFromSuperview" afterDelay:shape.animationDuration];
}

@end

これは何をしますか:

  1. タッチポイントを取得します
  2. タッチポイントをシェイプを作成するメソッドに渡します
  3. 作成されたシェイプをフェードアウトするメソッドに渡します
  4. 消えたときにキャンバスから形状を削除します
  5. 画面から削除された後、形状は自動的にメモリから削除されます
于 2013-03-04T22:45:55.197 に答える