2009-07-20 11 views
1

Je suis relativement nouveau pour objectif-c ... J'utilise l'iPhone 3.0 SDKavertissements Xcode objectif-c

J'ai un UIView, qui est une sous-vue, que je veux redimensionner dans certaines circonstances .

La façon dont je le fais est dans une classe de contrôleur.

par exemple,

CGSize el = CGSizeMake(30, 40); 
[self.subview setSize:el]; 

le code ci-dessus ne travail, mais le compilateur donne un avertissement: 'UIView' ne peut pas répondre à 'setSize:'

À un certain niveau, « si ce n'est pas cassé, je ne veux pas le réparer ", mais je suis un peu inquiet de faire quelque chose de mal.

Des idées pour savoir pourquoi je reçois l'avertissement et comment je peux le réparer?

TIA

+0

grâce à vous deux! – user141146

Répondre

3

Cela signifie probablement que setSize pour UIView est implmented mais qu'elle ne figure pas dans le fichier d'en-tête qui est importé dans le projet. Cela en fait une API non documentée, c.-à-d. Un jour il pourrait changer et casser votre code :)

Et bien sûr si vous allez à la documentation de UIView, vous ne trouverez pas de réfrence à la propriété de taille. Donc je l'éviterais.

Ce que vous devez utiliser à la place est la propriété frame

CGSize el = CGSizeMake(30, 40); 
CGRect bounds = CGself.subview.bounds; 
bounds.size = el; 
CGself.subview.bounds = bounds; 

Donnez un coup de feu.

+0

La méthode 'frame' renvoie l'image par valeur, donc vous ne pouvez pas définir sa taille comme ça. Vous auriez besoin de faire quelque chose comme 'CGRect frame = self.subview.frame; frame.size = CGSizeMake (30, 40); self.subview.frame = cadre; – Chuck

+0

Je viens de vérifier la documentation et vous avez raison – hhafez

0

La bonne chose à faire ici est d'utiliser autre chose que la propriété non publique size. Mais pour l'amour de la discussion: Si vous vouliez vous débarrasser de l'avertissement, vous pouvez déclarer que vous savez sur la propriété size quelque part en haut de votre fichier d'implémentation:

#import "MyClass.h" 

@interface UIView (private) 
- (void) setSize: (CGSize) newSize; 
@end 

@implementation MyClass 
… 
@end 

Le compilateur arrêter de se plaindre.

0

Voici une explication plus proche en utilisant la propriété « cadre » pour « myView »:

[self.myView.frame = CGRectMake(x, y, width, height)]; 

Où:

  • x, coordonnée du coin supérieur gauche de votre point de vue ayant comme référence le coin supérieur gauche de ses parents "x" coordonnées.
  • y, même que x mais axe y
  • largeur, la taille horizontale du cadre
  • hauteur, la taille verticale de l'image

à savoir Vous avez une vue qui correspond aux limites de l'écran, donc sa coordonnée (0,0) sera la même que celle de l'écran de votre appareil en haut à gauche. si vous voulez ajouter un sous-vue à peine plus petite que la taille de l'écran et le centrer horizontalement et verticalement, est ici la mise en place:

[self.myView.frame = CGRMake (20 , 20 , self.view.frame.size.width-40, self.view.frame.size.height-40); 

Cet exemple définit le cadre à l'intérieur de la vue et centré. Notez que nous soustrayons 40 à la largeur correspondant à: 20 côté gauche, 20 côté droit, et donc la même chose pour les ajustements verticaux.

Ce code fonctionnera également en mode portrait et paysage.

Questions connexes