В одном из моих приложений у меня есть пользовательский нарисованный полупрозрачный UIView
, который я использую в качестве обложки поверх другого UIView для специального эффекта.
Вид снизу:
Вид снизу с пользовательским видом сверху:
Это работает, это здорово на iPhone, где боковые поля составляют всего 10 пикселей, но теперь мне нужно расширить левое и правое поля, чтобы они соответствовали ряду под ним.
Вот мой код:
- (void)draw:(TTStyleContext*)context {
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
[_color setStroke];
CGContextSetLineWidth(ctx, MIN(_xwidth, _ywidth));
CGFloat fw = context.frame.size.width;
CGFloat fh = context.frame.size.height;
CGContextMoveToPoint(ctx, fw, floor(fh/2));
CGContextAddArcToPoint(ctx, fw, fh, floor(fw/2), fh, RD(_radius));
CGContextAddArcToPoint(ctx, 0, fh, 0, floor(fh/2), RD(_radius));
CGContextAddArcToPoint(ctx, 0, 0, floor(fw/2), 0, RD(_radius));
CGContextAddArcToPoint(ctx, fw, 0, fw, floor(fh/2), RD(_radius));
CGContextClosePath(ctx);
CGContextStrokePath(ctx);
CGContextRestoreGState(ctx);
context.frame = CGRectInset(context.frame, _xwidth/2, _ywidth/2);
return [self.next draw:context];
}
После установки _xwidth
и _ywidth
ключевой частью этого кода будет MIN
для ширины хода. Идея здесь в том, что рамка по умолчанию одинаковой ширины обводки. То, что я прошу это сделать, это сделать ширину хода больше по бокам, чем сверху и снизу. Использование MIN
гарантирует, что ход не получит более толстый размер _xwidth
и не попадет в центр. Если я использую значение _ywidth
, стороны выглядят великолепно, но я больше не получаю прозрачный красный, потому что верхняя и нижняя границы просачиваются в центр. Это подводит меня к моему вопросу:
Есть ли способ указать мне, что я хочу, чтобы толщина обводки была _xwidth
по бокам и _ywidth
по верху и низу? Если нет, есть ли другой более простой способ? Я с видом?
С моим кодом, _xwidth установленным в 42, _ywidth установленным в 10, я получаю это:
Вы можете увидеть, что я собираюсь сделать здесь, и как мне нужно получить боковой ход, чтобы скрыть непокрытый красный фон.