Disegno di una NSImage in NSView sottoclasse
-
18-09-2019 - |
Domanda
Ecco il mio codice finora (nel rect sorteggio):
// 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];
E l'immagine non disegnare ... Non so cosa c'è di sbagliato.
Soluzione
Perché non usare [NSImage imageNamed:@"NoiseBGMainView.jpg"]
invece? Che vi darà una NSImage
della tua foto (se può trovarlo), e nil
se non si può. NSLog
quali sono i risultati di quella chiamata sono, poi vieni a riferire su se sta accedendo (null)
oppure no.
Altri suggerimenti
È possibile disegnare un NSImage in un NSView senza scrivere alcun codice di disegno collegando un NSImageView per la visualizzazione e impostare il tuo risorsa immagine come immagine del NSImageView. (NSImageView gestisce tutto il disegno).
Se la vostra abitudine NSView viene caricato da un pennino, non è necessario alcun codice di impostazione sia -. Basta effettuare i collegamenti appropriati NSView-NSImageView-NSImage (risorse) con Interface Builder
NSURL *pathToBGImage = [[NSURL alloc] initWithString:[[NSBundle mainBundle] pathForResource:@"NoiseBGMainView" ofType:@"jpg"]];
Questo è sbagliato. -[NSURL initWithString:]
prende una versione stringa di un URL, ad esempio http://apple.com/ , non un percorso.
Perché non avete superato un URL, l'URL sarà un URL relativo, ma un URL relativo bisogno di una base. L'URL è un oggetto valido, ma non porta da nessuna parte. Questo, a sua volta, fa sì che initWithContentsOfURL:
per tornare nil
(perché si è tentato di caricare un'immagine da un URL relativo senza base). È quindi provare a dire l'immagine per disegnare, ma non si dispone di un'immagine, in modo da non succede nulla.
Si desidera initFileURLWithPath:
. (O il metodo di classe fileURLWithPath:
, con la quale non sarà necessario rilasciare l'URL in seguito.)