Как выровнять subview с центром родительского NSView
Я разрабатываю программу, в которой я программно добавляю NSImageView в пользовательский класс NSView. При создании представления изображения я передаю кадр родительского контейнера.
-(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
, чтобы добавить его в пользовательский вид. Проблема в том, что изображение обращается к левому нижнему углу родительского представления. Как разместить это изображение в центре родительского представления?
Я попытался добавить смещение к началу кадра, но это не работает, когда изменяется размер окна или загружается изображение с другим размером.
Любая помощь будет оценена.
Ответы
Ответ 1
Я не уверен, что это лучший способ сделать это, но я просто делаю простую математику, когда хочу сосредоточить subview внутри своего родителя.
Вам нужно установить все поля для автоматического изменения размера, если вы хотите, чтобы он оставался центрированным.
[subview setFrameOrigin:NSMakePoint(
(NSWidth([parentView bounds]) - NSWidth([subview frame])) / 2,
(NSHeight([parentView bounds]) - NSHeight([subview frame])) / 2
)];
[subview setAutoresizingMask:NSViewMinXMargin | NSViewMaxXMargin | NSViewMinYMargin | NSViewMaxYMargin];
Это просто вычисление полей, необходимых для получения центрированного происхождения.
Если вам нужен центрированный кадр перед вызовом initWithFrame:
, просто используйте приведенную выше логику для вычисления значений начала кадра.
Ответ 2
Попробуйте это.
в .h
@property (сильный, неатомный) IBOutlet UIView * CoinsPurchaseView;
в .m
self.CoinsPurchaseView.center = self.view.center;
[self.view addSubview:self.CoinsPurchaseView];