Рисование NSImage в подкласс NSView - PullRequest
0 голосов
/ 05 февраля 2010

Вот мой код (в прямоугольнике рисования):

// Drawing code here.
NSLog(@"%@", [[NSBundle mainBundle] pathForResource:@"NoiseBGMainView" ofType:@"jpg"]);
NSURL *pathToBGImage = [[NSURL alloc] initWithString:[[NSBundle mainBundle] pathForResource:@"NoiseBGMainView" ofType:@"jpg"]];
NSImage *NoiseBGMainView = [[NSImage alloc] initWithContentsOfURL:pathToBGImage];
[NoiseBGMainView drawInRect:[self bounds] fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1];

И изображение не рисует ... Я не знаю, что не так.

Ответы [ 3 ]

4 голосов
/ 05 февраля 2010

Почему бы просто не использовать [NSImage imageNamed:@"NoiseBGMainView.jpg"] вместо этого? Это даст вам NSImage вашей фотографии (если она сможет ее найти) и nil, если она не сможет. NSLog каковы результаты этого вызова, затем приходите и сообщайте о том, ведет ли он запись (null) или нет.

1 голос
/ 06 февраля 2010
NSURL *pathToBGImage = [[NSURL alloc] initWithString:[[NSBundle mainBundle] pathForResource:@"NoiseBGMainView" ofType:@"jpg"]];

Это неправильно. -[NSURL initWithString:] принимает строковую версию URL, например http://apple.com/,, а не путь.

Поскольку вы не передали URL-адрес, URL-адрес будет относительным, но для относительного URL-адреса нужна база. URL является допустимым объектом, но никуда не ведет. Это, в свою очередь, заставляет initWithContentsOfURL: возвращать nil (потому что вы пытались загрузить изображение с относительного URL без основы). Затем вы пытаетесь заставить изображение рисовать, но у вас нет изображения, поэтому ничего не происходит.

Вы хотите initFileURLWithPath:. (Или метод класса fileURLWithPath:, с помощью которого вам не нужно будет публиковать URL позже.)

1 голос
/ 05 февраля 2010

Вы можете нарисовать NSImage в NSView без написания какого-либо кода для рисования, прикрепив NSImageView к вашему виду и установив ресурс изображения как изображение NSImageView. (NSImageView обрабатывает весь рисунок).

Если ваш пользовательский NSView загружен из пера, вам также не нужен какой-либо установочный код - просто установите соответствующие соединения NSView-NSImageView-NSImage (resource) с Interface Builder.

...