我正在开发一个程序,在该程序中,我以编程方式向自定义NSView类添加了一个NSImageView。在创建image-view时,我传递了父容器的框架。
-(NSImageView *)loadNSImage:(NSString *)imageName frame:(NSRect)frame{
imageName = [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"];
NSImage *image = [[NSImage alloc] initWithContentsOfFile:imageName];
NSImageView *imageView = [[NSImageView alloc]initWithFrame:frame];
[imageView setImage:image];
[imageView setImageScaling:NSImageScaleProportionallyUpOrDown];
[imageView setAutoresizingMask:NSViewHeightSizable | NSViewWidthSizable | NSViewMaxXMargin | NSViewMaxYMargin | NSViewMinXMargin | NSViewMinYMargin];
[imageView setImageAlignment:NSImageAlignCenter];
[image release];
return imageView;
}
然后,我使用addSubView
方法将其添加到自定义视图中。问题是图像会粘在父视图的左下角。如何将此图像放在父视图的中心?
我试过在框架原点添加一个偏移量,但是当窗口调整大小时,或者加载了一个不同大小的图像时,这并不能真正起作用。
任何帮助都将不胜感激。
发布于 2011-01-13 23:21:35
我不确定这是否是最好的方法,但当我想要将一个子视图放在它的父视图中时,我只需要做简单的数学运算。
如果你想让它居中,你需要将所有的页边距设置为可自动调整大小。
[subview setFrameOrigin:NSMakePoint(
round((NSWidth([parentView bounds]) - NSWidth([subview frame])) / 2),
round((NSHeight([parentView bounds]) - NSHeight([subview frame])) / 2)
)];
[subview setAutoresizingMask:NSViewMinXMargin | NSViewMaxXMargin | NSViewMinYMargin | NSViewMaxYMargin];
这只是计算获得居中原点所需的边距。
如果在调用initWithFrame:
之前需要居中的框架,那么只需使用上面的逻辑来计算框架原始值。
https://stackoverflow.com/questions/4681176
复制相似问题