使用代码将NSRect居中

时间:2010-08-12 03:29:12

标签: cocoa

嘿所有,我有一个我正在研究的项目,我注意到我在某个x,y坐标上绘制的NSRect,它是我正在处理的分辨率的中心,不是中心分辨率改变了。我明白这一切是如何运作的。

问题是我的项目将在多个分辨率上显示有没有人知道一个可能的解决方案,无论屏幕在哪个方面或分辨率,都可以使NSrect居中。我将我的类声明为具有自定义绘图的NSPanels 。关于可能解决方案的任何想法都会有所帮助。谢谢大家。

这是NSRect x,y,width,height

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

然后

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

2 个答案:

答案 0 :(得分:5)

要将一个矩形置于另一个矩形中心,将内部矩形的原点设置为((外部矩形的原点加上外部矩形的一半)减去内部矩形的一半)。

但是,你不需要这样做。

在您订购之前向您的窗口发送center消息。它会自行定位HIG。

您可能希望使用始于0,0而不是某个任意点的起始矩形来初始化窗口,以确保如果有主菜单屏幕,则窗口将认为自己处于打开状态

答案 1 :(得分:0)

很难提供下面的代码,而不需要在我的“个人框架”中的其他地方放置各种各样的位依赖,但是我有一个Object Class ...类似我猜想苹果在定义结构时会做什么比如NSRect,首先......它提供了一些你想要的便利功能......比如......

@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
                );
}