Je ne trouve rien nulle part (moteurs de recherche, docs, ici, etc.) qui montre comment créer des coins arrondis (en particulier dans une vue de table groupée) sur un élément qui clipse également les sous-espoirs.
J'ai Code qui crée correctement un rectangle arrondi sur un chemin avec 4 arcs (les coins arrondis) qui ont été testés dans le drawrect: méthode dans mon sous-classement uableviewcell. Le problème est que les sous-visions, qui se produisent des uibuttons avec leurs envies uiimage internes, ne respectent pas le CGContextClip () que l'utableviettexcell obéys. P>
Voici le code: p>
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat radius = 12;
CGFloat width = CGRectGetWidth(rect);
CGFloat height = CGRectGetHeight(rect);
// Make sure corner radius isn't larger than half the shorter side
if (radius > width/2.0)
radius = width/2.0;
if (radius > height/2.0)
radius = height/2.0;
CGFloat minx = CGRectGetMinX(rect) + 10;
CGFloat midx = CGRectGetMidX(rect);
CGFloat maxx = CGRectGetMaxX(rect) - 10;
CGFloat miny = CGRectGetMinY(rect);
CGFloat midy = CGRectGetMidY(rect);
CGFloat maxy = CGRectGetMaxY(rect);
[[UIColor greenColor] set];
CGContextBeginPath(context);
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);
CGContextClip(context);
CGContextFillRect(context, rect);
[super drawRect:rect];
}
5 Réponses :
Créer une sous-classe de regarder Cet exemple . P> UiImageView code> avec des coins arrondis et une transparence. Le utableviewCell code> doit être opaque pour une meilleure performance. P>
L'objet Calayer a des fonctions pour arrondir les coins: et vous êtes tous définis. Vous pouvez également ajouter des couleurs et des trucs de frontière, consultez les docs au cas où vous êtes intéressé. P> p>
Vous ne devriez jamais utiliser Calayer Cornerradius dans un UitailViewCell. Sa performance HIT est beaucoup trop grande pour que ces cellules soient dessinées pour avoir une table de défilement rapide.
Il n'ya aucun moyen d'utiliser cela pour les nappes car le paramètre Cornerradius est pour tous les coins. Il n'y a aucun moyen de faire une seule cellule arrondie
vue.layer.maskstobounds = YES code> et vue.layer.cornerradius = 8.0f code> me donne exactement ce que j'étais après. Merci.
Le compilateur se plaint que Calayer n'a pas de propriété Cornerradius à moins que vous importiez
@OSCAR - C'est parce que la référence Calayer CODE> dans uIView.h code> est juste une référence de classe avant. Voir la ligne 81 (dans la 6.1 SDK, de toute façon).
Voir ce code: http://gist.github.com/292384 P>
Je l'ai utilisé dans plusieurs projets, la performance est excellente et elle est hautement personnalisable. Il n'utilise pas Cornerradius et le dessin des cellules est sensible au contexte. P>
OOH, je ne suis pas sûr que le code aborde votre requête Sous-Views. Code utile pour des tables de style de groupe arrondies sensibles au contexte.
Merci pour cela! C'est juste ce que je cherchais.
Essayez ceci à votre avis Initialiseur:
self.layer.borderWidth = 2.0f; self.layer.borderColor = [[UIColor greenColor] CGColor]; self.layer.masksToBounds = YES; self.layer.cornerRadius = 12.0f;
Cela ne clipse pas sous-visions d'UIButton.
Pour cela, vous devez aller à l'inspecteur des attributs du bouton dans IB, sous la section Vue, dessin, cocher "Sous-Sous-Sous-Sudviews"
Si vous avez un utableviewCell personnalisé, vous pouvez le faire dans SWIFT 4.0:
class CustomTVC: UITableViewCell {
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
self.layer.cornerRadius = 20
self.layer.masksToBounds = true
}
Il n'y a pas de réponse ici sur la question principale. Est-il possible d'obtenir CGContextClip () pour affecter les sous-visions?
C'est ce ... Stackoverflow.com/a/20410857/294884 qui clipsera toutes les sous-espions également.