2

最近、既に割り当てられている UIImageViews と UIImages を使用して、画像としてのリソースの割り当てと複製に費やされる時間を最小限に抑えることで、レンダリング時間を節約しようとしています。

私がやろうとしているのは、すべての UIImage のマップを維持することです。それぞれが一意であり、ゲーム エンジンからの要求に応じて、それぞれを複数の UIImageView に再割り当てします。ゲームが進行するにつれて、いくつかの UIImageView を表示から削除し、後でプリロードされた別の UIImage でそれらを再利用する可能性があります。

初めて UIImageView を作成するときは、次のようにします。

m_ImageView = [[UIImageView alloc] initWithImage : initialImg];

[m_ParentView addSubview: m_ImageView];

そして、次の場合は単に画像を切り替えます。

[m_ImageView.画像リリース];

[m_ImageView setImage otherSavedImg];

問題は、切り替え後、表示される新しい画像サイズが最初の画像サイズと同じになることです。毎回 UIImageView を再作成することで問題を回避しましたが (これは時間の無駄のようです)、なぜこれが起こるのか、どうすればそれを防ぐことができるのか疑問に思っています。

ありがとう、

4

1 に答える 1

3

UIImageView のドキュメントには、「このメソッドは、指定された画像のサイズに合わせてレシーバーのフレームを調整します」と書かれています。「setImage:」を呼び出すときは、単純なプロパティ セッターを使用します。余分な再計算は行われません。UIImageView のフレームのサイズを再調整する必要がある場合は、手動で行う必要があります。

あなたが与えた文脈から判断すると、これはあなたが幾分頻繁にやっていることのようです. そのため、UIImageView のカテゴリを作成することをお勧めします。

UIImageView+Resizing.h:

@interface UIImageView (Resizing)

- (void) setImage:(UIImage *)newImage resize:(BOOL)shouldResize;

@end

UIImageView+Resizing.m:

@implementation UIImageView (Resizing)

- (void) setImage:(UIImage *)newImage resize:(BOOL)shouldResize {
  [self setImage:newImage];
  if (shouldResize == YES) {
    [self sizeToFit];
  }
}

@end

これで、画像を変更して imageView のサイズを変更する必要があるときはいつでも、単純に #import UIImageView+Resizing.h を使用して:

[myImageView setImage:anImage resize:YES];
于 2009-07-05T04:26:24.223 に答える