modifier la position d'objets dans le code

yodarkyodark Membre
08:27 modifié dans API AppKit #1
Bonjour,

Je voudrais savoir comment faire pour positionner un objet imageView depuis mon code
J'ai essayé de faire

monImage.frame.origin.x = 50 ;
mais ca ne fonctionne pas j'ai une erreur invalid value ! Comment faire ?

Réponses

  • AliGatorAliGator Membre, Modérateur
    novembre 2008 modifié #2
    Invalid lvalue tu veux dire, non ? Ce qui voudrais dire que tu ne peux pas faire une affectation comme tu le fais (une lvalue c'est une expression en partie gauche d'une expression, donc là  il te dit que cette expression là  tu n'as pas le droit de la mettre à  gauche d'un signe "=" d'affectation)
    frame est sans doute une property, qu'il faut que tu affectes dans son ensemble.

    Il faut donc soit modifier tout "origin" et encore que je ne suis pas sûr que ça suffise, soit modifier tout frame :
    monImage.frame = CGRectMake(50, monImage.frame.origin.y, monImage.frame.size.width, monImage.frame.size.height);
    
    Tu peux voir aussi du côté des méthodes de CGGeometry.h si tu ne trouves pas ce que tu veux...
  • schlumschlum Membre
    08:27 modifié #3
    Et voilà  les confusions que mettent les propriétés avec cette stupide syntaxe "." dans l'esprit des gens  ::)

    Décidément Objective-C 2.0 était vraiment un coup de drague aux développeurs Java qui n'a rien apporté de bon  >:D
  • yodarkyodark Membre
    08:27 modifié #4
    oui d'ailleurs en tant que développeur JAVA je suis perdu...
    à  quoi sert la notation pointée si ça n'est pas pour modifier les paramètres ? Quand faut-il utiliser les points ? et quand ne pas le faire ?
  • CéroceCéroce Membre, Modérateur
    08:27 modifié #5
    C'est normal, parce qu'un rectangle " ici, celui décrivant la position de la vue " est une structure:

    typedef struct _NSRect {<br />&nbsp; &nbsp; NSPoint origin;<br />&nbsp; &nbsp; NSSize size;<br />} NSRect;<br /><br />typedef struct _NSPoint {<br />&nbsp; &nbsp; float x;<br />&nbsp; &nbsp; float y;<br />} NSPoint;<br /><br />typedef struct _NSSize {<br />&nbsp; &nbsp; float width;<br />&nbsp; &nbsp; float height;<br />} NSSize;
    


    Or, les propriétés, qui manipulent des NSValues, ne fonctionnent qu'avec des objets ou une poignée de types scalaires, dont NSRect, NSPoint et NSSize.

    Tu peux écrire:
    NSPoint origine = [[monImage valueForKeyPath:@&quot;frame.origin&quot;] pointValue];<br />origine.x = 50;<br />[monImage setValue:[NSValue valueWithPoint:origine] forKeyPath:@&quot;frame.origin&quot;];
    


    En utilisant les propriétés, ça donne:
    NSPoint origine = monImage.frame.origin;<br />origine.x = 50;<br />monImage.frame.origin = origine;
    


    (ça doit marcher, mais je ne programme pas en ObjC 2.0, alors j'émet les réserves de rigueur).

    La notation en point, utilisée pour les propriétés, est malheureusement la même que celle du bon vieux langage C pour accéder aux champs d'une structure; cependant, les notions sont bien différentes.


  • yodarkyodark Membre
    08:27 modifié #6
    petite question encore ça marche lorsque je décide de bouger un image préalablement crée dans IB

    Mais lorsque je génère l'image par code j'ai une erreur
    [UIImage setFrame:]: unrecognized selector sent to instance 0x5530a0&#39;
    


    UIImageView * imgTag = [UIImage alloc] initWithContentsOfFile: [mainBundle pathForResource:@&quot;topAccuracy&quot; ofType:@&quot;png&quot; autorelease ];
    imgTag.frame = CGRectMake(graphicArea.frame.size.width/2, position , logo.frame.size.width, logo.frame.size.height);
    //[self.view addSubview:imgTag];
  • CéroceCéroce Membre, Modérateur
    08:27 modifié #7
    Je ne connaà®t pas l'iPhone, mais ça me paraà®t normal. L'affichage se fait sans doute dans une UIImageView.
  • yodarkyodark Membre
    08:27 modifié #8
    Je vois pas ce que tu veux dire...

    Je créer un image view ligne 1 (ça c'est correct je pense je l'ai déjà  utilisé)
    ligne 2 je modifie la taille de l'image et je la place
    ligne 3 j'affiche l'image dans la vue de mon contrôleur de vue

    non ?
  • AliGatorAliGator Membre, Modérateur
    novembre 2008 modifié #9
    dans 1227539360:

    Je créer un image view ligne 1 (ça c'est correct je pense je l'ai déjà  utilisé)
    Faux, tu as créé une UIImage (que tu as par erreur stocké dans une variable de type UIImageView, mais c'est bien à  UIImage que tu envoies ton "alloc"...) et non une UIImageView...
    Du coup ça explique pourquoi il te dit que "UIImage ne répond pas à  setFrame" puisque c'est effectivement à  un objet UIImage que tu demandes de changer la frame au lieu d'un UIImageView...
Connectez-vous ou Inscrivez-vous pour répondre.