setAnimationDidStopSelectorについて教えてください(iPhone SDK)


以下のようなコードを組んでいるのですが、setAnimationDidStopSelectorで指定したendDropPartメソッドの中で、どうやってアニメーションさせるオブジェクトを指定するか悩んでいます。iPhone SDKは初心者です。どなたかご教授いただけないでしょうか?

-(void)endDropPart{
/*
[下のメソッドのrrecieverが指すボタン setAlpha:1.0f];
*/
NSLog(@"endAnim");
}

- (void)DropPart:(UIButton *)reciever {

[player play];

CGFloat y = [reciever center].y;

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5f];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(endDropPart)];

[reciever setCenter:CGPointMake([reciever center].x, y+150)];
[reciever setAlpha:0.0f];

[UIView commitAnimations];

}

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/09/26 07:56:38
  • 終了:2010/10/03 08:00:03

ベストアンサー

id:loio No.2

loio回答回数342ベストアンサー獲得回数502010/09/26 12:49:24

ポイント40pt

ひとつは、最初のアニメーションだけ実行するか、全部のアニメーションを実行するかでちょっと変わりますね。

最初のアニメーションだけ実行するなら

BOOL flag=NO;

  • DropPort{

if(flag){

animetion

flag=YES;

}

}

  • endDropPort{

flag=NO;

nextAnimation

}

全部実行するなら

UIButton* buttonInstance[MAX];

NSInteger wptr=0;

NSInteger rptr=0;

  • DropPort{

animetion

buttonInstance[ptr]=receiver;

wptr++;

if (wptr==MAX)

wptr=0;

if (buttonInstance[wptr])

error;

}

  • endDropPort{

[buttonInstance[rPtr] hogehoge];

rptr++;

if (rptr==MAX)

rptr=0;

}

DropPortとendDropPortの順番が入り混じるようだとカオスですね。

たぶん「dopartが別の引数で呼び出される」これを禁止するのが一番いいと思いますけど。

http://q.hatena.ne.jp/1285455398

その他の回答(2件)

id:loio No.1

loio回答回数342ベストアンサー獲得回数502010/09/26 11:31:23

ポイント40pt

dropPartで、receiverのインスタンスか、tagをグローバル変数に格納して、endDropPartで参照すればよいんじゃないですか。

http://q.hatena.ne.jp/1285455398

id:seventhwonder

ご返答ありがとうございました。既にグローバル変数化はためしたのですが、アニメーションの継続時間0.5秒の間にdopartが別の引数で呼び出されると、仕込んだ変数と実行時の値が異なり、てんでばらばらの結果になってしまうのです。なにか良いお知恵はないでしょうか?

2010/09/26 12:31:44
id:loio No.2

loio回答回数342ベストアンサー獲得回数502010/09/26 12:49:24ここでベストアンサー

ポイント40pt

ひとつは、最初のアニメーションだけ実行するか、全部のアニメーションを実行するかでちょっと変わりますね。

最初のアニメーションだけ実行するなら

BOOL flag=NO;

  • DropPort{

if(flag){

animetion

flag=YES;

}

}

  • endDropPort{

flag=NO;

nextAnimation

}

全部実行するなら

UIButton* buttonInstance[MAX];

NSInteger wptr=0;

NSInteger rptr=0;

  • DropPort{

animetion

buttonInstance[ptr]=receiver;

wptr++;

if (wptr==MAX)

wptr=0;

if (buttonInstance[wptr])

error;

}

  • endDropPort{

[buttonInstance[rPtr] hogehoge];

rptr++;

if (rptr==MAX)

rptr=0;

}

DropPortとendDropPortの順番が入り混じるようだとカオスですね。

たぶん「dopartが別の引数で呼び出される」これを禁止するのが一番いいと思いますけど。

http://q.hatena.ne.jp/1285455398

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません