Как выровнять подпредставление к центру родительского NSView - PullRequest
13 голосов
/ 13 января 2011

Я разрабатываю программу, в которой я программно добавляю 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, чтобы добавить его в пользовательский вид.Проблема в том, что изображение прилипает к нижнему левому углу родительского представления.Как я могу поместить это изображение в центр родительского вида?

Я попытался добавить смещение к исходному кадру, но это не работает, когда окно изменено в размере или если изображение сзагружен другой размер.

Любая помощь будет оценена.

Ответы [ 2 ]

39 голосов
/ 13 января 2011

Я не уверен, что это лучший способ сделать это, но я просто делаю простую математику, когда хочу центрировать подпредставление внутри его родителя.

Вам необходимо установить все поля для автоматического изменения размера, если вы хотите, чтобы он оставался по центру.

[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:, просто используйте приведенную выше логику для вычисления значений начала кадра.

0 голосов
/ 12 февраля 2014

Попробуйте это.в .h

@ свойство (сильное, неатомное) IBOutlet UIView * CoinsPurchaseView;

в .m

self.CoinsPurchaseView.center = self.view.center;
    [self.view addSubview:self.CoinsPurchaseView];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...