Comment puis-je dessiner un UIView personnalisé qui n'est littéralement qu'une balle (un cercle 2D)? Est-ce que je remplacerais simplement la méthode drawRect? Et quelqu'un peut-il me montrer le code pour dessiner un cercle bleu?
De plus, serait-il acceptable de changer le cadre de cette vue dans la classe elle-même? Ou dois-je changer le cadre d'une classe différente?
(essayant juste de mettre en place une balle qui rebondit)
Oui:
Idéalement non, mais vous pourriez.
Je laisserais le parent contrôler ça.
la source
CGContextSetFillColorWithColor(ctx, self.colorOfCircle.CGColor);
, la méthode proposée dans la solutionCGColorGetComponents
ne fonctionne qu'avec certaines couleurs, voir stackoverflow.com/questions/9238743/…rect
, j'ai accidentellement utiliséself.frame
pour l'ellipse. La valeur correcte estself.bounds
. Oh! :)Voici une autre façon d'utiliser UIBezierPath (peut-être que c'est trop tard ^^) Créez un cercle et masquez UIView avec, comme suit:
la source
layerClass
méthode de classe pour en faire un calque de forme.Ma contribution avec une extension Swift:
Il suffit d'appeler
myView.asCircle()
la source
masksToBounds
sur true et l'utilisationself
sont tous facultatifs dans cette réponse, mais c'est toujours la solution la plus courte et la meilleureSwift 3 - classe personnalisée, facile à réutiliser. Il utilise un
backgroundColor
ensemble dans le générateur d'interface utilisateurla source
Classe Swift 3 :
la source
Une autre façon d'aborder le dessin de cercle (et d'autres formes) consiste à utiliser des masques. Vous dessinez des cercles ou d'autres formes en créant d'abord des masques des formes dont vous avez besoin, en second lieu, en fournissant des carrés de votre couleur et, troisièmement, en appliquant des masques à ces carrés de couleur. Vous pouvez modifier le masque ou la couleur pour obtenir un nouveau cercle personnalisé ou une autre forme.
Voici la sortie du code ci-dessus:
la source
Il existe une autre alternative pour les paresseux. Vous pouvez définir le
layer.cornerRadius
chemin d' accès clé de votre vue dans Interface Builder . Par exemple, si votre vue a une largeur = hauteur de 48 , définissezlayer.cornerRadius = 24
:Cependant, cela ne fonctionne que si vous avez une taille statique de la vue
(width/height is fixed)
et que le cercle n'apparaît pas dans le générateur d'interface.la source
Swift 3 - Xcode 8.1
la source