人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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];

}

●質問者: seventhwonder
●カテゴリ:コンピュータ
✍キーワード:iPhone SDK nil void アニメーション オブジェクト
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● loio
●40ポイント

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

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

◎質問者からの返答

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


2 ● loio
●40ポイント ベストアンサー

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

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

BOOL flag=NO;

if(flag){

animetion

flag=YES;

}

}

flag=NO;

nextAnimation

}

全部実行するなら

UIButton* buttonInstance[MAX];

NSInteger wptr=0;

NSInteger rptr=0;

animetion

buttonInstance[ptr]=receiver;

wptr++;

if (wptr==MAX)

wptr=0;

if (buttonInstance[wptr])

error;

}

[buttonInstance[rPtr] hogehoge];

rptr++;

if (rptr==MAX)

rptr=0;

}

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

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

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


3 ● umI
●0ポイント

http://q.hatena.ne.jp

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ