Отображение изображения в cocoa
Я совершенно новичок в этом, но здесь говорится:
Я хочу нажать кнопку в своем приложении и отобразить изображение (я планирую прочитать его с камеры, но для начала я открою файл .TIF.) Однако внутри построителя интерфейса я могу сделать кнопки в объекте NSObject, но в литературе звучит так, как будто мне нужно создать объект NSView для отображения файла. Проблема в том, что когда я это делаю, объект NSObject, похоже, не разговаривает с объектом NSView. Я пытаюсь сделать что-то вроде:
NSString *inFilePath;
inFilePath = @"/Volumes/Data/Temp/Smiles.tiff";
NSImage *TestImage = [[NSImage alloc] initWithContentsOfFile:inFilePath];
[MyView setImage:TestImage];
Здесь MyView является объектом NSView. Я получаю предупреждения о том, что MyView может не отвечать на setImage. Я попытался определить IBOutlet внутри объекта NSObject, и хотя я могу подключить его в построителе интерфейса, консоль дает мне ошибку:
нераспознанный селектор, отправленный в класс 0x1e080
Итак, не ясно, что следующий шаг. Есть ли простой способ заставить два разных объекта "поговорить" друг с другом?
Благодаря
Ответы
Ответ 1
Вам нужен объект NSImageView
. В библиотеке Interface Builder это называется Image Well, но вы можете настроить его так, чтобы он не имел рамку.
NSImageView
является подклассом NSView
, который оптимизирован для отображения изображений.
В файле заголовка (.h) у вас должно быть что-то вроде этого:
@interface MyController : NSObject
{
//this declares an outlet so you can hook up the
//image view in Interface Builder
IBOutlet NSImageView* imageView;
}
@end
И в вашем файле реализации (.m):
@implementation MyController
//called once the nib is loaded and all outlets are available
- (void)awakeFromNib
{
NSString *inFilePath = @"/Volumes/Data/Temp/Smiles.tiff";
NSImage *testImage = [[NSImage alloc] initWithContentsOfFile:inFilePath];
#if !__has_feature(objc_arc)
[testImage autorelease];
#endif
//imageView is your outlet
[imageView setImage:testImage];
}
@end
В Interface Builder вы должны подключить выход imageView
вашего класса, чтобы указать на NSImageView
, который вы разместили в своем представлении.