Je veux faire ce UIView avec UIBezierPath:Faire Sunburst à Swift avec un UIBezierPath
Avec la capacité en option pour faire tourner (bien que je puisse faire cela sur mon propre si je sais comment dessiner que sunburst (qui est la façon dont j'appelle la vue))
ici la réponse est donnée dans l'objectif C: https://stackoverflow.com/a/14991292/7715250
J'ai essayé de le convertir en Swift avec ce code (copier-coller dans Playground travail):
import UIKit
class SunBurst: UIView{
override func draw(_ rect: CGRect) {
let radius: CGFloat = rect.size.width/2.0
UIColor.red.setFill()
UIColor.blue.setStroke()
let bezierPath = UIBezierPath()
let centerPoint = CGPoint(x: rect.origin.x + radius, y: rect.origin.y + radius)
var thisPoint = CGPoint(x: centerPoint.x + radius, y: centerPoint.y)
bezierPath.move(to: centerPoint)
var thisAngle: CGFloat = 0.0
let sliceDegrees: CGFloat = 360.0/20/2.0
let half: CGFloat = 180
let floatRadius = Float(radius)
for _ in 0..<20 {
let x = CGFloat((floatRadius * cosf(Float(.pi * thisAngle + sliceDegrees/half)))) + centerPoint.x
let y = CGFloat((floatRadius * sinf(Float(.pi * thisAngle + sliceDegrees/half)))) + centerPoint.y
thisPoint = CGPoint(x: x, y: y)
bezierPath.addLine(to: thisPoint)
thisAngle += sliceDegrees
let x2 = CGFloat((floatRadius * cosf(Float((.pi * thisAngle + sliceDegrees)/half)))) + centerPoint.x
let y2 = CGFloat((floatRadius * sinf(Float((.pi * thisAngle + sliceDegrees)/half)))) + centerPoint.y
thisPoint = CGPoint(x: x2, y: y2)
bezierPath.addLine(to: thisPoint)
bezierPath.addLine(to: centerPoint)
thisAngle += sliceDegrees
}
bezierPath.close()
bezierPath.lineWidth = 1
bezierPath.fill()
bezierPath.stroke()
}
}
let custom = SunBurst(frame: CGRect(x: 0, y: 0, width: 500, height: 500))
custom.backgroundColor = .clear
Avec ce résultat:
Je pense que je suis absent 1 ligne de code, car il semble presque correct, mais ce que suis-je manque? Je ne suis sûrement pas un expert en Objective C et j'ai utilisé https://objectivec2swift.com/#/home/converter/ pour convertir le code sur le lien avec la réponse. En outre, il semble presque correct, il devrait fonctionner en mode paysage. Quand je baisse la hauteur et conserve la même largeur, le sunburst échoue mal à dessiner. Comment cela peut-il aussi fonctionner dans le paysage?
Merci pour toute aide pour la bonne UIView. Je pense que ce serait bien pour une vue bonus dans un jeu.