OK, concreet voorbeeld, dan. Na het compleet doornemen en intikken van code uit Cocoa for Dummies, en enkele online tutorials en source code probeer ik het voldende:
Het doel is een plaatje met een File Open dialog op het scherm te zetten in een Image View. Ik neem als basis een opdracht uit een van de tutorials waarin ik hetzelfde deed voor een Quick Time filmpje:
#import "MyMovieController.h"
@implementation MyMovieController
- (IBAction)openMovie:(id)sender
{
NSArray *theFileTypes = [NSArray arrayWithObjects:@"mov",@"mpeg",@"mpg", nil];
NSOpenPanel *theOpenPanel = [NSOpenPanel openPanel];
[theOpenPanel setAllowsMultipleSelection:NO];
int result = [theOpenPanel runModalForTypes:theFileTypes];
if (result==NSOKButton)
{
NSArray *theSelectedMovie = [theOpenPanel URLs];
NSURL *theMovieURL = [theSelectedMovie objectAtIndex:0];
NSMovie *theMovie = [[NSMovie alloc] initWithURL:theMovieURL byReference:NO];
NSRect origFrame = [theWindow frame];
NSPoint topLeft = origFrame.origin;
topLeft.y = topLeft.y + origFrame.size.height;
[movieScreen setMovie:theMovie];
NSSize size = [movieScreen sizeForMagnification:1.0];
size.width +=40;
size.height +=40;
[theWindow setContentSize:size];
[theWindow setFrameTopLeftPoint:topLeft];
[theWindow display];
}
}
OK, simpel zat. Gewoon een image view erbij maken en dan de code enigzins aanpassen:
- (IBAction)openImage:(id)sender
{
NSArray *theFileTypes = [NSArray arrayWithObjects:@"jpg",@"jpeg", nil];
NSOpenPanel *theOpenPanel = [NSOpenPanel openPanel];
[theOpenPanel setAllowsMultipleSelection:NO];
int result = [theOpenPanel runModalForTypes:theFileTypes];
if (result==NSOKButton)
{
NSArray *theSelectedImage = [theOpenPanel URLs];
NSURL *theImageURL = [theSelectedImage objectAtIndex:0];
NSImage *theImage = [[NSImage alloc] initWithURL:theImageURL byReference:NO];
NSRect origFrame = [theWindow frame];
NSPoint topLeft = origFrame.origin;
topLeft.y = topLeft.y + origFrame.size.height;
[imageScreen setImage:theImage];
NSSize size = [imageScreen sizeForMagnification:1.0];
size.width +=40;
size.height +=40;
[theWindow setContentSize:size];
[theWindow setFrameTopLeftPoint:topLeft];
[theWindow display];
}
}
@end
Ik ben echt uren aan het debuggen geweest, maar ik kan niet uitvinden waarom het niet werkt. Dus ga ik de ref.doc van ImageView raadplegen. Bij ImageView kan ik alleen een NSImage gebruiken. Bij NSImage heb ik echter weer niet dezelfde methode als bij QT, dus verwacht ik dat ik een NSData moet gebruiken.
Maar hoe?
Dit is slechts 1 voorbeeld van wat ik heb geprobeerd....