我一直在努力解决这个问题。
我有一个具有自定义视图的应用程序。应用程序启动时,我将自定义视图的帧大小设置为应用程序窗口的帧大小。这有效。在AppDelegate.m中,我将另一个视图控制器的视图加载到自定义视图中。在视图控制器的视图中,我有一个以编程方式放置在屏幕中心的图像。我的AppDelegate.m中有一个windowDidResize方法,当我调整应用程序窗口的大小时会调用它。
问题是当我调整应用程序窗口的大小时,图像不会重新定位在主窗口的中心。我尝试在加载的视图和视图控制器上使用NSWindowDelegate,并编写一个windowDidResize:方法,但这也不起作用。
请帮忙! 感谢。
答案 0 :(得分:0)
可能是一个黑客攻击,但我所做的是捕获初始窗口框架等大小作为一个初始窗口的#iv;方法;然后我用它来缩放在运行时测量的任何x / y /高度/宽度。
// Handy scaling macros
#define X(xVal) ((xVal) * (x_scale))
#define Y(yVal) ((yVal) * (y_scale))
每个窗口的代理处理程序用于更改大小:
- (void)set_scales:(NSSize)size
{
self.x_scale = (CGFloat)(size.width) / (CGFloat)(orig.width);
self.y_scale = (CGFloat)(size.height) / (CGFloat)(orig.height);
}
并且这些窗口的def / undef为x / y_scale宏只会返回这些ivars。总而言之,每个窗口都有一个NSSize orig,CGFloat x,y,一个缩放委托方法,两个宏(x / y_scale)和两个全局宏X,Y。
然后每当绘图等时,使用X()和Y()宏来定位和影响h / w。即,
[@"foo" drawAtPoint:NSMakePoint(X(100),Y(200)) withAttributes:nil];