Domanda

sto disegnando un'immagine arrotondata in una cella UITableView in questo modo:

CGRect imageRect = CGRectMake(8, 8, 40, 40);
CGFloat radius = 3;

CGFloat minx = CGRectGetMinX(imageRect);
CGFloat midx = CGRectGetMidX(imageRect);
CGFloat maxx = CGRectGetMaxX(imageRect);
CGFloat miny = CGRectGetMinY(imageRect);
CGFloat midy = CGRectGetMidY(imageRect);
CGFloat maxy = CGRectGetMaxY(imageRect);

CGContextMoveToPoint(context, minx, midy);
CGContextAddArcToPoint(context, minx, miny, midx, miny, radius);
CGContextAddArcToPoint(context, maxx, miny, maxx, midy, radius);
CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
CGContextAddArcToPoint(context, minx, maxy, minx, midy, radius);
CGContextClosePath(context);

CGContextClip(context);

[self.theImage drawInRect:imageRect];

Questo sembra grande, ma vorrei aggiungere un'ombra ad esso per effetto aggiunto. Ho provato con qualcosa sulla falsariga di:

CGContextSetShadowWithColor(context, CGSizeMake(2, 2), 2, [[UIColor grayColor] CGColor]);
CGContextFillPath(context);

Ma questo funziona solo quando l'immagine ha aree trasparenti, se l'immagine non è trasparente a tutti, non sarà nemmeno a disegnare l'ombra intorno al bordo.

Mi chiedo se c'è qualcosa che sto facendo male?

È stato utile?

Soluzione

Si scopre che il modo corretto per farlo è di agganciare l'UIImage stesso, piuttosto che il percorso. E 'quindi una semplice questione di:

CGContextSetShadow(...);
[self.theClippedImage drawInRect:...];

Altri suggerimenti

Mi immagino che se l'immagine che si sta disegnando per non presenta aree trasparenti poi CoreGraphics interpreta l'intera immagine come un oggetto solido. Poi, se si tenta di disegnare l'ombra dell'ombra sarà disegnare al di fuori dei limiti dell'immagine e come tale non lo vedrà.

Questa pagina fornisce un buon esempio di come fare tale disegno con CoreGraphics. Forse si potrebbe provare a modificare il codice fornito lì e vedere se questo risolve il problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top