2

私が開発している概念については、XIB ファイルを手動でロードする必要があり、クラスとインスタンス メソッドのスウィズリングを使用して、UIImage クラスの imageCustomNamed、imageCustomWithContentsOfFile、および imageCustomWithCGImage と UIImageView の initCustomWithImage への呼び出しをインターセプトすることができました。私がしたいのは、画像名を検出し、設計時にIBで設定されたものの代わりに、オンザフライでレンダリングされたコンテンツに置き換えることです。

例えば:

XIB に Image プロパティが "About.png" に設定されている UIImageView オブジェクトがある場合、その画像の読み込みをインターセプトし、特定の条件に応じて別の画像に置き換える必要があります。UIImageView オブジェクトがデザイン時に設定された画像を読み込んだ後で画像を置き換えても問題ありませんが、UIImageView のコンテンツを設定するために使用された UIImage の元の名前はどこにも保存されていないようです。

事前にXIBファイルの内容がわからないため、IBOutletsを使用できません。これは、特定の XIB だけでなく、あらゆる XIB で機能するクラスです。

カスタム メソッドは実際にはデフォルトのメソッドの代わりに呼び出されていますが、XIb をロードするときに、システムは引数として CGImageRef を受け入れる imageCustomWithCGImage を使用するように見えます。それから、元を知る方法はありません(つまり、画像ファイル名)

画像の読み込みを傍受する方法について何か考えはありますか?

4

3 に答える 3

1

少なくとも OS 3 では、UIImageNibPlaceholder の initWithCoder: をオーバーライドできます。次のように置き換えます。

-(id)hack_UIImageNibPlaceholder_initWithCoder:(NSCoder*)coder
{
  NSString * name = [coder decodeObjectForKey:@"UIResourceName"];
  [self release];
  return [[UIImage imageNamed:name] retain];
}

他のバンドル (フレームワークなど) から nib をロードするとどうなるかはわかりません。

于 2010-08-09T18:22:15.613 に答える
0

おそらく、xib ファイルで UIImageView の別のプロパティを設定し、そのプロパティを参照できますか? たとえば、ラベルやタグ...

于 2011-03-13T03:11:08.973 に答える