2010-08-12 3 views
2

Salut à tous, j'ai un projet sur lequel je travaille et j'ai remarqué que mon NSRect que je dessine à une certaine coordonnée x, y qui serait le centre de la résolution sur laquelle je travaille, n'est pas le centre si la résolution change. Je comprends comment tout cela fonctionne. Le problème est que mon projet va être affiché sur plusieurs résolutions quelqu'un connaît-il une solution possible pour centrer le NSrect quel que soit l'aspect ou la résolution de l'écran. J'ai mes classes déclarées comme NSPanels qui ont personnalisé dessin. Toute idée sur une solution possible serait utile. Merci a tous.Centrer un NSRect avec le code

Ceci est le NSRect x, y, largeur, hauteur

NSRect windowFrame = NSMakeRect(400, 500, 500, 100); 

puis

window = [[Mainbox alloc] initWithContentRect:windowFrame 
              styleMask:NSBorderlessWindowMask 
              backing:NSBackingStoreBuffered 
               defer:NO]; 

Répondre

5

Pour centrer un rectangle à l'intérieur de l'autre, réglé l'origine du rect interne à ((l'origine du rect extérieur et de la moitié de la taille du rect extérieur) moins la moitié de la taille du rect intérieur).

Mais, vous n'avez pas besoin de faire cela.

Envoyez un message center à votre fenêtre avant de le commander. Il se centrera HIG de façon appropriée. Vous pouvez vouloir initialiser votre fenêtre avec un rect commençant à partir de 0,0 au lieu de quelque point arbitraire, afin de s'assurer que, s'il y a un écran de menu principal, c'est l'écran que la fenêtre considérera être sur.

+0

Merci pour la réponse. Avez-vous un exemple de ce à quoi ressemblerait le format du message central? J'ai passé en revue les références de classe pour voir si je pouvais trouver des méthodes à appeler pour centrer la fenêtre. Je reçois ce que vous dites avec les origines à 0, 0 Je ne suis pas sûr à quoi ressemblerait le message du centre. – Kyle

+0

Nevermind lol je viens de passer [centre de fenêtre]; et ça a fonctionné comme je m'y attendais. Merci pour l'aide-partenaire. – Kyle

0

Il est difficile de fournir le code suivant sans les nombreuses dépendances qu'il requiert de divers bits et mors placés ailleurs dans mon "cadre personnel" .. mais j'ai une classe d'objets ... similaire à ce que fait Apple quand elle définit struct comme NSRect, en premier lieu ... qui fournit une partie de la commodité, vous propose êtes désireux .. tels que ...

@interface 
NSRect AGPositionRectOnRect(NSRect inner, NSRect outer, NSPoint position); 
// moves the origin of the rect 
NSRect AGCenterRectOnPoint(NSRect rect, NSPoint center); 
// returns the innter rect with its posiion centeredn on the outer rect 
NSRect AGCenterRectOnRect(NSRect inner, NSRect outer); 
// will a square rect with a given center 
NSRect AGSquareAround(NSPoint center, CGFloat distance); 

@implementation 
NSRect AGCenterRectOnRect(NSRect inner, NSRect outer) { 
    return AGPositionRectOnRect(inner, outer, AGHalfPoint); 
} 
NSRect AGCenterRectOnPoint(NSRect rect, NSPoint center) { 
    return NSMakeRect(center.x - rect.size.width/2, 
       center.y - rect.size.height/2, 
       rect.size.width, 
       rect.size.height); 
} 
NSRect AGCenterRectOnRect(NSRect inner, NSRect outer) { 
    return AGPositionRectOnRect(inner, outer, AGHalfPoint); 
} 
NSRect AGSquareAround(NSPoint center, CGFloat distance) { 
    return NSMakeRect(center.x - distance, 
       center.y - distance, 
       2 * distance, 
       2 * distance 
       ); 
}