2010-07-31 1 views
1

Je fais les exercices de défi dans le livre Cocoa Programming for Mac d'Aaron Hillegass. Ce que j'essaie de faire est d'avoir une fenêtre redimensionner à deux fois la hauteur de la largeur. Voici mon code jusqu'à présent.J'ai un problème pour utiliser NSSize

#import "AppController.h" 


@implementation AppController 

-(id) init 
{ 
    [super init]; 
    NSLog(@"init"); 
    [window setDelegate:self]; 
    return self; 
} 

-(NSSize) windowWillResize:(NSWindow*) sender 
toSize:(NSSize)frameSize 
{ 
    int x; 
    NSSize mySize; 
    mySize.width = x; 
    mySize.height = 2*x; 
    NSLog(@"mySize is %f wide and %f tall",mySize.width,mySize.height); 
    return mySize; 
} 

Cela ne fonctionne pas comme prévu Je suis sûr que je n'utilise pas correctement le type NSSize. Je ne connais pas beaucoup de C donc l'utilisation de la structure est là où je pense que je fais mon erreur. ADDENDUM: J'ai changé le code ci-dessus pour le suivant. Je sais que je suis passé un NSSize ainsi il n'y a aucune raison d'en créer un autre (c'est-à-dire mySize). Cependant, je ne comprends pas pourquoi cela fonctionne. Quelqu'un peut-il expliquer.

#import "AppController.h" 


@implementation AppController 

-(id) init 
{ 
    [super init]; 
    NSLog(@"init"); 
    [window setDelegate:self]; 
    return self; 
} 



-(NSSize) windowWillResize:(NSWindow*) sender 
toSize:(NSSize)frameSize 
{ 
    //float x = 100; 
    //NSSize mySize; 
    //mySize.width = x; 
    //mySize.height = x * 2; 
    //NSLog(@"mySize is %f wide and %f tall",mySize.width,mySize.height); 
    NSLog(@"mySize is %f wide and %f tall",frameSize.width,frameSize.height); 
    return NSMakeSize(frameSize.width, frameSize.width * 2); 

} 
@end 

Répondre

0

Vous devez assigner une valeur initiale à x:

int x = 100; 

Sinon, le résultat est indéfini.

+0

Je l'ai fait, mais ce qui se passe est que lorsque je redimensionne la fenêtre, elle ne prend qu'une taille et ne me permet pas de redimensionner; Ce n'est pas un redimensionnement dynamique. – lampShade

+0

En outre, j'ai activé le redimensionnement activé dans Interface Builder. – lampShade

1

Pensez à ce que vous voulez que mySize soit.

  • Vous voulez sa largeur soit la même que celle frameSize.width
  • Vous voulez sa hauteur à frameSize.width * 2.

Maintenant, regardons ce que vous faites avec x:

  • Vous définissez mySize.width égale à elle
  • Vous définissez mySize.height pour être x * 2

De cela, nous pouvons conclure :

Vous souhaitez définir x à frameSize.width.

Alternativement, la méthode entière pourrait simplement être return NSMakeSize(frameSize.width, frameSize.width * 2).

+0

Merci et votre solution est pourquoi j'ai des problèmes. Comment saurais-je qu'il existe une fonction (NSMakeSize) qui fait ce que vous suggérez? – lampShade

+0

Cela ne fonctionne toujours pas correctement :( – lampShade

Questions connexes