Dans l'une de mes applications, j'ai un dessin personnalisé semi-transparent UIView
que j'utilise comme couverture sur un autre UIView pour un effet spécial.CGContextSetLineWidth de largeur variable autour du chemin
Basse Vue:
Lower View avec vue personnalisée sur le dessus:
Il fonctionne, son grand sur l'iPhone où les marges latérales ne sont que 10 pixels, mais maintenant je dois développer les marges gauche et droite pour correspondre à la ligne ci-dessous.
Voici mon code:
- (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];
}
Après avoir réglé le _xwidth
et _ywidth
, la partie clé de ce code est le MIN
pour la largeur de course. L'idée ici est que le cadre est par défaut, la même largeur de trait tout autour. Ce que je lui demande de faire est de faire la largeur de course plus grande sur les côtés que sur le haut et le bas. L'utilisation de MIN
garantit que le trait n'obtient pas la taille plus épaisse _xwidth
et saigne au centre. Si j'utilise la valeur _ywidth
, les côtés sont superbes, mais je n'obtiens plus le rouge transparent car les bords supérieur et inférieur saignent au centre. Cela me amène à ma question:
est-il pour moi un moyen de préciser que je veux la course soit _xwidth
épaisse sur les côtés et _ywidth
d'épaisseur sur le haut et le bas? Sinon, y a-t-il un autre moyen plus facile que je néglige?
Avec mon code, _xwidth réglé sur 42, _ywidth réglé sur 10, je reçois ceci: Vous pouvez voir ce que je vais faire ici, et comment je dois obtenir la course de côté pour couvrir le rouge à découvert Contexte.