2011-08-19 4 views
0

Je sous-classe UIView, récupérant une image distante puis l'attachant à la vue en utilisant drawRect. Cela fonctionne bien, mais l'image est ensuite biaisée en fonction de ce que je définis pour mon cadre de vues.iOS: Echelle UIImage à remplir dans un UIView

Je peux ajouter un contentMode de UIViewContentModeScaleAspectFill à mon UIView mais cela ne semble pas du tout s'appliquer à mon UIImage que je dessine, il écrase toujours UIImage car il suit la taille de l'image des vues.

Il semble que je devrais faire quelque chose comme ce qui suit, mais qui effectue un zoom juste l'image 100% dans mon cadre plutôt que de suivre le réglage contentMode:

[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)]; 

Ai-je besoin de faire quelque chose de spécifique à drawRect: faire pour que mon image suive la propriété contentMode?

Répondre

2

Je pense que la solution la plus simple serait de sous-classer UIImageView au lieu de UIView et d'utiliser la propriété contentMode de la classe. Ensuite, vous n'avez pas besoin d'appeler drawRect, il suffit de charger l'image dans l'imageView.

Alternativement, si vous avez besoin de sous-classer UIView, ajoutez un UIImageView à votre vue, installez des ressorts et des entretoises, définissez le contentMode et chargez votre image.

+0

Pourquoi même sous-classe 'UIImageView'? Il suffit de l'utiliser. @nic: 'contentMode' est une propriété que vous devriez respecter dans votre' drawRect', pas celle qui vous est demandée. 'UIImageView' l'obéit déjà. – Tommy

+0

UIImageView n'appelle pas drawRect. Et comme je fais du dessin personnalisé, je dois utiliser UIView. –

+0

@Nathanial, j'ai aimé l'idée de simplement ajouter un UIImageView comme sous-vue de ma vue principale. Cela a fonctionné parfaitement! –

0

Vous pouvez utiliser quelque chose comme ça

// If we have a custom background image, then draw it, othwerwise call super and draw the standard nav bar 
- (void)drawRect:(CGRect)rect 
{ 
    if (navigationBarBackgroundImage) 
    [navigationBarBackgroundImage.image drawInRect:rect]; 
    else 
    [super drawRect:rect]; 
} 

// Save the background image and call setNeedsDisplay to force a redraw 
-(void) setBackgroundWith:(UIImage*)backgroundImage 
{ 
    self.navigationBarBackgroundImage = [[[UIImageView alloc] initWithFrame:self.frame] autorelease]; 
    navigationBarBackgroundImage.image = backgroundImage; 
    [self setNeedsDisplay]; 
}