У меня есть NSImageView, который загружает изображение из пакета приложения.
Это так:
coverImage.image = [NSImage imageNamed:@"themeSignEnd.png"];
coverImage.imageScaling = NSImageScaleNone;
coverImage.imageAlignment = NSImageAlignLeft;
Изображение отображается очень хорошо.
Размер NSImageView рассчитывается на основе нескольких других факторов, а затем устанавливается с использованием этого кода:
coverImage.frame = CGRectMake((1280 - 869) / 2, 0, 869 * percentage, 800);
Это прекрасно работает при первом запуске (при запуске приложения).
NSImageView принимает размер, и содержащееся в нем изображение обрезается по соответствующей границе.
К сожалению, когда я пытаюсь изменить размер NSImageView во время работы приложения (используя тот же код, что и выше), оно не будет заметно обновляться.
NSLogging coverImage.frame
показывает, что сам фрейм обновлен правильно. Однако вид, кажется, не перерисовывается - ни при уменьшении, ни при увеличении кадра. Кроме того, когда я закрываю и перезапускаю приложение, NSImageView рисует правильную границу.
Что может вызвать такое поведение?
Возможно ли, что NSImageView просто не перерисовывается? Если так, как я могу заставить перерисовку?
Существуют ли какие-то другие особенности NSImageView, которые я пропустил и которые могут привести к такому поведению?
редактирование:
Оказывается, эта ошибка возникает, только если для свойства ImageFrameStyle
установлено значение NSImageFrameNone
. Если для фрейма установлено что-то еще, оно перерисовывается просто отлично. К сожалению, нам нужно, чтобы изображение отображалось без рамки.
Есть ли разница в рендеринге для NSImageViews с кадрами и без них, которые могут это объяснить?