Vista com sombra, cantos arredondados e desenho personalizado
Eu tenho que criar um costumeUIView
que terá cantos arredondados, uma borda, uma sombra e suadrawRect()
O método é substituído para fornecer código de desenho personalizado com o qual várias linhas retas são desenhadas na vista (preciso usar uma abordagem rápida e leve aqui, pois muitas dessas vistas podem ser renderizadas).
O problema que estou enfrentando atualmente é que a sombra não se aplica mais aos cantos arredondados assim que eu substituirdrawRect()
na classe view (mesmo sem nenhum código personalizado ainda). Veja a imagem em anexo para a diferença:
No controlador de exibição, estou usando o seguinte código:
view.layer.cornerRadius = 10;
view.layer.masksToBounds = true;
view.layer.borderColor = UIColor.grayColor().CGColor;
view.layer.borderWidth = 0.5;
view.layer.contentsScale = UIScreen.mainScreen().scale;
view.layer.shadowColor = UIColor.blackColor().CGColor;
view.layer.shadowOffset = CGSizeZero;
view.layer.shadowRadius = 5.0;
view.layer.shadowOpacity = 0.5;
view.layer.masksToBounds = false;
view.clipsToBounds = false;
No substituídodrawContext()
Eu usaria algo como:
var context:CGContext = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, UIColor.redColor().CGColor);
// Draw them with a 2.0 stroke width so they are a bit more visible.
CGContextSetLineWidth(context, 2.0);
CGContextMoveToPoint(context, 0.0, 0.0); //start at this point
CGContextAddLineToPoint(context, 20.0, 20.0); //draw to this point
CGContextStrokePath(context);
Mas, como dito acima, o problema de sombra ocorre mesmo sem esse código adicionado.
Existe alguma outra / melhor maneira de desenhar elementos leves em uma visão que não seja essa abordagem compatível com cantos arredondados e sombras? Não quero adicionar visualizações extras ou contextos de imagem desnecessários à exibição, pois eles precisam ser leves e com bom desempenho.