Also mache ich eine Art einfaches Spiel basierend auf Sechsecken. Hier ist, wie es aussieht:Erstellen einer UIButton mit Form CAShapeLayer
Ich habe es geschafft, die Hexagone zu ziehen genau so, wie ich sie als CAShapeLayer
s will, aber ich möchte sie anklickbar. Kurz gesagt möchte ich sie irgendwie in UIButtons
umwandeln, damit ich verfolgen kann, welches über TouchUpInside ausgewählt wird. Die andere Art, wie ich daran denken kann, ist Spuren zu verfolgen und zu überprüfen, ob sie in der Form mit dem Tag waren, aber es scheint viel zu kompliziert zu sein. Unten ist mein Code:
let screenSize: CGRect = UIScreen.mainScreen().bounds
let screenWidth = screenSize.width
let screenHeight = screenSize.height
let radius : CGFloat = screenWidth/6
var c = 0
var counter = 0
for j in 1...6 {
for i in 1...3 {
for x in 1...2 {
var center = CGPoint(x: CGFloat((i-1)*2)*radius+CGFloat(i-1)*radius, y: CGFloat((j-1)*2)*radius)
if (x==2) {
center.x = center.x+1.5*radius
center.y = center.y+radius
}
let shape = CAShapeLayer()
view.layer.addSublayer(shape)
shape.opacity = 0.5
shape.lineWidth = 2
shape.lineJoin = kCALineJoinMiter
shape.strokeColor = UIColor(hue: 0.786, saturation: 0.79, brightness: 0.53, alpha: 1.0).CGColor
shape.fillColor = UIColor(hue: 0.786, saturation: 0.15, brightness: 0.89, alpha: 1.0).CGColor
let path = UIBezierPath()
path.moveToPoint(CGPointMake(center.x-radius, center.y))
path.addLineToPoint(CGPointMake(center.x-radius/2, center.y-radius))
path.addLineToPoint(CGPointMake(center.x+radius/2, center.y-radius))
path.addLineToPoint(CGPointMake(center.x+radius, center.y))
path.addLineToPoint(CGPointMake(center.x+radius, center.y))
path.addLineToPoint(CGPointMake(center.x+radius/2, center.y+radius))
path.addLineToPoint(CGPointMake(center.x-radius/2, center.y+radius))
path.closePath()
shape.path = path.CGPath
}
}
}
Hey vielen Dank für die Antwort! Das macht Sinn. Gibt es eine Möglichkeit, zum Beispiel UIButton mit Shape Layer zu setzen? Wie würde ich einen Hexagon-UIButton erstellen? – Antoine
Beispielcode hinzugefügt. – matt