J'ai une coutume UIView
Je dessine, et dans la fonction drawRect
je crée une forme de cercle (avec un centre creux, donc l'image d'un beignet) comme UIBezierPath
.Comment créer un dessin UIImage avec drawInRect à l'aide d'un UIBezierPath?
Je veux ensuite utiliser cette forme UIBezierPath
/cercle comme masque lorsque je dessine mon UIImage
avec drawInRect
. Donc, à la fin, je vais avoir une forme de beignet avec un fond d'image.
je crée le cercle/UIBezierPath
comme suit:
let context = UIGraphicsGetCurrentContext()
let progress = CGFloat(1.0)
let diameter = CGFloat(32.0)
let gapExpression: CGFloat = diameter * CGFloat(M_PI)
let dashExpression: CGFloat = progress * diameter * CGFloat(M_PI)
CGContextSaveGState(context)
CGContextTranslateCTM(context, 19, 19)
CGContextRotateCTM(context, -270 * CGFloat(M_PI)/180)
var circlePath = UIBezierPath()
circlePath.moveToPoint(CGPointMake(-16, 0))
circlePath.addCurveToPoint(CGPointMake(0, -16), controlPoint1: CGPointMake(-16, -8.84), controlPoint2: CGPointMake(-8.84, -16))
circlePath.addCurveToPoint(CGPointMake(16, 0), controlPoint1: CGPointMake(8.84, -16), controlPoint2: CGPointMake(16, -8.84))
circlePath.addCurveToPoint(CGPointMake(0, 16), controlPoint1: CGPointMake(16, 8.84), controlPoint2: CGPointMake(8.84, 16))
circlePath.addCurveToPoint(CGPointMake(-16, 0), controlPoint1: CGPointMake(-8.84, 16), controlPoint2: CGPointMake(-16, 8.84))
circlePath.closePath()
circlePath.lineCapStyle = kCGLineCapRound;
UIColor.grayColor().setStroke()
circlePath.lineWidth = 5
CGContextSaveGState(context)
CGContextSetLineDash(context, 0, [dashExpression, gapExpression], 2)
circlePath.stroke()
CGContextRestoreGState(context)
Qui, si je viens dans mon drawRect
il produit une forme cercle/beignet.
Cependant, je dois aussi UIImage
:
let image = UIImage(named: "test-shape")
que je tire à l'aide drawInRect
, mais je veux que l'image soit masquée par la UIBezierPath
ci-dessus.
Comment est-ce que j'accomplirais ceci?
Je l'ai fait, et le résultat a fini avec la bordure circulaire grise et l'image à l'intérieur du cercle (l'image est juste un carré violet). Voici à quoi il ressemble: http://i.imgur.com/bMnnf8p.png, et je cherche ceci: http://i.imgur.com/SEDdfNT.png où le violet est masqué par la forme de beignet . –
Oh, je vois ce que vous essayez de faire. Vous essayez d'utiliser la ligne comme masque. Je ne pense pas que tu puisses faire ça. Vous devez probablement dessiner un cercle dans un cercle et utiliser l'image comme remplissage. Laissez-moi mettre à jour répondre ... – picciano
Eh bien, désolé. J'ai joué avec et j'ai pu obtenir le violet pour remplir correctement la forme, mais ce que vous faites avec les tirets ne va évidemment pas fonctionner maintenant. Je vais l'ajouter à la réponse ci-dessus, peut-être que ce sera utile. – picciano