2010-08-02 36 views
0

J'essaie de créer une étiquette avec une image derrière elle. l'image est un rectangle personnalisé avec des coins arrondis.Redimensionnement d'une image pouvant être contrecollée pour correspondre à un UILabel sizeToFit

Je lis à propos de la stretchableImageWithLeftCapWidth: pour m'assurer que les coins ne seront pas mis à l'échelle et à propos de sizeToFit pour agrandir le cadre UILabel.

Maintenant, la vue dans son ensemble: J'ai un UIView dans IB, j'ai ajouté un ImageView avec l'image, et un UILabel au-dessus. Les deux sont centrés (et doivent rester centrés),

J'appelle une fonction qui va changer le texte de UILabel et apporter les changements nécessaires aux cadres.

Voici ce que j'ai essayé de le faire:

myLabel.text = hint; 
    [myLabel sizeToFit]; 
    CGRect r = myLabel.frame; 

    UIImage* image = [[UIImage imageNamed:@"Bg.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:5]; 
    [image retain]; 
    myImageView.frame = CGRectMake(r.origin.x - 5, r.origin.y - 5, r.size.width + 10, r.size.height + 10); 
    [myImageView initWithImage:image]; 
    [self setNeedsDisplay]; 

Qu'est-ce que je manque? et comment puis-je m'assurer que quand cela fonctionnera, le texte et l'image resteront centrés?

Merci!

+0

Quel est exactement le problème? –

+0

Le code que j'ai écrit ne fonctionne pas ... –

Répondre

0

Vous pouvez utiliser la propriété center sur chaque UIView:

myImageView.center = CGPointMake(self.bounds.size.width/2,self.bounds.size.height/2); 

Cela centre myImageView à l'intérieur de soi verticalement et horizontalement. Utilisez la même chose pour votre étiquette. Si votre ImageView a besoin d'un plus grand cadre theres la fonction plus lisible CGRectInset()

myImageView.frame = CGRectInset(myLabel.frame, 10, 10); 

Soit dit en passant:

  1. Vous l'image apparemment une fuite. Il n'y a aucune raison de le conserver.
  2. N'utilisez pas l'initialiseur (init WithImage :) sur un objet déjà initialisé. Utilisez setImage: ou la propriété image à la place.
+0

Salut, merci pour votre aide et vos notes. J'ai fait les changements, mais l'échelle d'image Bg.png est toujours fausse. Au moins maintenant, il est dans la bonne taille, mais l'échelle n'est pas proportionnelle. peut-être devrais-je corriger certaines propriétés de l'UIImageView lui-même? –

+0

Salut - J'ai joué avec un peu plus et maintenant il semble fonctionner. Mes hypothèses sont que stretchableImageWithLeftCapWidth besoin de quelques pixels de plus. –