Мне нужно создать пользовательский UIView
, который будет иметь круглые углы, границу, тень и метод drawRect()
переопределен, чтобы предоставить пользовательский код чертежа, с помощью которого несколько прямых линий втянуты в представление (мне нужно используйте быстрый и легкий подход, поскольку многие из этих представлений могут быть визуализированы).
Проблема, с которой я сейчас сталкиваюсь, заключается в том, что тень больше не применяется к круглым углам, как только я переопределяю drawRect()
в классе представления (даже без какого-либо настраиваемого кода в нем). См. Прикрепленное изображение для разницы:
В контроллере представления я использую следующий код:
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;
В переопределенном drawContext()
я бы использовал что-то вроде:
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);
Но, как сказано выше, проблема с тенью возникает даже без добавления этого кода.
Есть ли какой-либо другой/лучший способ рисовать легкие элементы на вид, отличный от этого подхода, который совместим с круглыми углами и тенями? Я не хочу добавлять лишние представления или контексты изображения в представление, поскольку они должны быть легкими и эффективными.