2011-01-16 10 views
5

Ho un NSImageView e voglio aggiungere un'ombra. Ho provato a farlo programmaticamente con:Aggiunta di un'ombra a NSImageView

NSShadow *shadow = [[[NSShadow alloc] init] autorelease]; 
[shadow setShadowBlurRadius:4.0f]; 
[shadow setShadowOffset:CGSizeMake(4.0f, 4.0f)]; 
[shadow setShadowColor:[NSColor blackColor]]; 

[view setShadow:shadow]; 

Ma non apparirà. Qualche idea? Grazie.

+0

Si potrebbe provare a creare un NSImage vuoto (della stessa dimensione di quello che si desidera disegnare), 'lockFocus' su di esso, impostare l'ombra e disegnare l'originale nel nuovo (e' unlockFocus'). Uso questa tecnica per colorare le immagini; non posso garantire che funzionerà per l'ombra. – Richard

risposta

9

È necessario impostare i parametri dell'ombra. Per impostazione predefinita, sono tutti zeri, quindi non ha alcun effetto visibile su una vista.

Vedere -setShadowColor:, -setShadowRadius: e -setShadowOffset: su NSShadow, credo.

+0

Ho provato ad aggiungere tutto quanto sopra a nessun effetto. Ho aggiornato il campione sopra. –

+2

La tua vista è anche supportata da un 'CALayer'? In caso contrario, è necessario abilitare il backup Core Animation inviando 'setWantsLayer:' (con un valore di 'YES') alla propria vista prima di impostare l'ombra. –

+0

@ Jonathan: era proprio quello che stavo per pubblicare come risposta. 'setShadow:' copia semplicemente le proprietà dell'ombra sul livello dell'anima core, quindi la vista deve essere supportata da un 'CALayer'. Ciò si nota anche quando si desidera applicare un'ombra a una vista utilizzando Interface Builder. – Joost