2015-12-16 2 views
3

Dans mon application, j'ai besoin d'un UIView dont la forme est initialement un cercle, mais il peut ensuite être modifié en une ellipse en changeant sa hauteur ou sa largeur. Alors, je l'ai substituée la méthode drawRect() comme ce qui suit:Comment masquer le contour d'un rectangle en dessinant des courbes

override func drawRect(rect: CGRect) { 
    if (self.isRound) { 
     let ctx:CGContext = UIGraphicsGetCurrentContext()! 
     CGContextSetRGBStrokeColor(ctx, 0.0, 0.0, 0.0, 1.0) 
     CGContextSetLineWidth(ctx, 0.5) 
     CGContextAddEllipseInRect(ctx, rect) 
     CGContextStrokePath(ctx) 
     self.layer.cornerRadius = frame.size.width/2 
    } 
} 

qui fonctionne très bien, le retour de ce résultat:

enter image description here

Je voudrais savoir comment cacher, si possibile, les 4 coins de sorte que seule l'ellipse elle-même soit strictement visible. Y a-t-il un moyen?

UPDATE et SOLUTION

C'est la solution que j'ai trouvé, à la recherche here dans toutes les fonctions d'Apple graphiques de base concernant les ellipses. si mon UIView est censé être une ellipse Tout d'abord, dans son constructeur, je prends l'astuce suivante concernant le paramètre alpha:

if (self.isRound) { 
     self.backgroundColor = UIColor(red: 0.0, green: 0.6, blue: 1.0, alpha: 0.0) 
    } 
else { 
     self.backgroundColor = UIColor(red: 0.0, green: 0.6, blue: 1.0, alpha: 0.4) 
    } 

De cette façon, le rectangle de fond n'est pas montré du tout. Alors, voici ma méthode drawRect():

override func drawRect(rect: CGRect) { 
    if (self.isRound) { 
     let ctx:CGContext = UIGraphicsGetCurrentContext()! 
     CGContextSetRGBFillColor(ctx, 0.0, 0.6, 1.0, 0.4) /*!!!*/ 
     CGContextFillEllipseInRect(ctx, rect) /*use Fill and not Stroke */ 
     CGContextStrokePath(ctx) 
    } 
} 

qui me donne ce résultat:

enter image description here

+1

De toute évidence, il ** est ** possible, parce que vous avez réussi à dessiner ces cercles blancs sans coins :) Je pense que vous pouvez résoudre ce problème par vous-même. – kelin

Répondre

2

Vous avez besoin d'un chemin de détourage, jetez un oeil à CGContextClip