2011-09-08 5 views
7

Sto cercando di tracciare una linea con un'ombra ma non voglio mantenere la linea ma solo l'ombra.Disegnare una linea con un'ombra, ma solo mantenere l'ombra. IOS

Ho tentato di impostare il colore del tratto della linea da cancellare, ma quando lo faccio l'ombra scompare.

Il seguente codice crea 2 righe, voglio solo mantenere l'ombra perché sembra più bella e non è pixelata come la linea.

È possibile?

CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 2.0); 

    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 0.0, 0.0, 1.0); 
    CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), YES);  

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGFloat components[4] = {0.0, 0.0, 0.0, 1.0}; 
    CGColorRef shadowColor = CGColorCreate(colorSpace, components); 
    CGContextSetShadowWithColor(UIGraphicsGetCurrentContext(), CGSizeMake(10,10), 4.0, shadowColor); 

Grazie.

risposta

9

Quindi non è possibile farlo direttamente perché l'ombra riflette il percorso, quindi se si rende il percorso trasparente, l'ombra sarà anche trasparente. Ci sono alcune soluzioni alternative a cui riesco a pensare (dipende esattamente da quello che stai facendo) ma un modo subdolo sarebbe solo quello di disegnare l'ombra abbastanza lontano sotto il percorso che puoi semplicemente disegnare su di esso, in pratica cancellandolo. Ad esempio, se lo sfondo è bianco, ciò comporterà ciò che desideri:

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0); 
    CGContextSetLineWidth(context, 10.0); 
    CGContextMoveToPoint(context, 10.0, 30.0); 
    CGContextAddLineToPoint(context, 310.0, 30.0); 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGFloat components[4] = {0.0, 0.0, 0.0, 1.0}; 
    CGColorRef shadowColor = CGColorCreate(colorSpace, components); 
    CGContextSetShadowWithColor(context, CGSizeMake(0.0f,20.0f), 4.0, shadowColor); 
    CGContextStrokePath(context); 

    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0); 
    CGContextSetLineWidth(context, 10.0); 
    CGContextMoveToPoint(context, 10.0, 30.0); 
    CGContextAddLineToPoint(context, 310.0, 30.0); 
    CGContextStrokePath(context); 
} 

sperare che questo aiuti.

2

perché non disegnare la linea come un'ombra. Non si disegna l'ombra, ma si disegna invece una linea nera con un'altezza di 0,25 o meno e spostarla nella posizione in cui ci si aspetterebbe dall'ombra.