У меня есть 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, которые я пропустил, которые могут привести к такому поведению?
edit:
Оказывается, эта ошибка возникает только тогда, когда Свойство ImageFrameStyle
имеет значение NSImageFrameNone
. Если для кадра установлено что-то еще, он будет перерисован нормально. К сожалению, нам нужно, чтобы изображение отображалось без рамки.
Есть ли разница в рендеринге для NSImageView с кадрами и без них, которая могла бы это объяснить?