Question

Récemment, j'ai essayé d'économiser sur le temps de rendu en réduisant au minimum le temps consacré à l'allocation et la duplication des ressources sous forme d'images en utilisant un UIImageViews et UIImages déjà attribués.

Ce que j'essaie de faire est de maintenir une carte de tous UIImages - chacun unique et réattribuer chacun à plusieurs UIImageViews, par la demande du moteur de jeu. Comme le jeu progresse, je retire quelques UIImageViews de l'affichage, et peut les réutiliser plus tard avec différents UIImages pré-chargés.

La première fois que je crée le UIImageView que je fais quelque chose comme:

  

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

     

[m_ParentView addSubview: m_ImageView];

Et les heures suivantes je change tout simplement l'image:

  

[libération m_ImageView.image];

     

[m_ImageView setImage otherSavedImg];

Le problème est que, après l'interrupteur, la nouvelle taille de l'image affichée est identique à la taille de l'image initiale. Je le problème en contournais recréant l'UIImageView chaque fois (ce qui semble être une perte de temps), mais je me demande aussi pourquoi cela se produit et comment puis-je l'empêcher.

Merci,

Était-ce utile?

La solution

Les documents pour UIImageView dire « Cette méthode permet de régler le châssis du récepteur pour correspondre à la taille de l'image spécifiée. » Lors de l'appel « setImage: », votre aide d'un simple poseur de propriété. Aucune recalcul supplémentaire est fait. Si vous avez besoin de réajuster la taille du cadre de l'UIImageView, vous devrez le faire manuellement.

A en juger par le contexte que vous avez donné, cela semble que ça va être quelque chose que vous allez faire assez souvent. En tant que tel, je vous recommande la création d'une catégorie pour 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

Maintenant, chaque fois que vous avez besoin de changer une image et redimensionner le imageView, simplement #import UIImageView + Resizing.h et utilisation:

[myImageView setImage:anImage resize:YES];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top