1

私はいくつかのUIViewアニメーションを使ってやっています

[UIView beginAnimations:nil context:nil];
// ... Animation configuration ...
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationEnded:finished:context:)];
[UIView commitAnimations];

次の質問について:animationDidStop:finished:context:が非公開のAPIであるため、Appleはアプリを拒否しました

「setAnimationDidStopSelector」として独自のメソッドを実装しました。

私の質問は、context:(void *)contextパラメーターに関するものです。Appleはそれを次のように定義しています:

アニメーションデリゲートメッセージに渡される追加のアプリケーション提供情報— setAnimationWillStartSelector:およびsetAnimationDidStopSelector:メソッドを使用して設定されたセレクター。

コンテキストとしてどの王様を渡すことができるのだろうか。私はObjective-CおよびCプログラミングに比較的慣れておらず、void*タイプでは少し迷っています。

あらゆる種類の引数、オブジェクト、NSDictionnary、NSStringなどを渡すことができますか。

ありがとう

4

2 に答える 2

3

void *何かへのポインタです。任意のオブジェクト、または構造体やCoreFoundationの不透明(OPAQUE)型などの他のものへのポインターを渡すことができます。コンパイラの警告を取り除くには、ポインタをvoid *:にキャストします。

... context:(void *)myDictionary];

このメソッドは何contextが含まれているのかわからないため、保持したり、正しいメモリ管理を行ったりしないことに注意してください。アニメーションデリゲートメソッドが呼び出されたときに、渡すものがcontextまだ存在していることを確認する必要があります。

于 2010-10-19T10:30:14.610 に答える
0
context:(void *)myDictionary];

このメソッドを呼び出して渡そうとするとき

(void *)[NSNumber numberWithInt:5] - 

xCodeは、CからObjective-CへのpointerCastが無効であるため、いくつかの_bridgeを作成することを提案しています...

于 2013-02-11T13:16:39.427 に答える