Anters Bear
Anters Bear

Reputation: 1956

Adding UIButtons in an arc

I'm trying to make a button that when tapped forms an arc of options. I'm able to draw the options on a diagonal line (see image below) but can't figure out how to display them in an arc. Any suggestions?

What I'm getting

enter image description here

Code

        let resourceObjects = ["sprite", "shape", "text", "function", "sound", "variable", "list"]

        let radius : CGFloat = 120
        var shiftX : CGFloat = 0
        var shiftY : CGFloat = radius


        // x^2 + y^2 = radius

        for o in resourceObjects {


            let cell = UIButton()
            cell.frame = CGRect(x: sender.frame.origin.x + shiftX, y: sender.frame.origin.y + 50 - shiftY, width: screenWidth, height: 30)
            self.view.addSubview(cell)

            let img = UIImageView()
            img.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
            img.image = UIImage(named: String(o) + ".png")
            cell.addSubview(img)

            let lbl = UILabel()
            lbl.frame = CGRect(x: 27, y: 0, width: screenWidth - 60, height: 30)
            lbl.font = UIFont.systemFont(ofSize: 12)
            lbl.text = o
            lbl.sizeToFit()
            lbl.frame = CGRect(x: 27, y: 0, width: lbl.frame.width, height: lbl.frame.height)
            cell.addSubview(lbl)

            cell.frame = CGRect(x: sender.frame.origin.x + shiftX, y: sender.frame.origin.y + 50 - shiftY, width: lbl.frame.width + 27, height: 30)

            shiftX += radius / CGFloat(resourceObjects.count)
            shiftY -= radius / CGFloat(resourceObjects.count)

            options.append(cell)

        }

Upvotes: 0

Views: 56

Answers (1)

Duncan C
Duncan C

Reputation: 131491

Use trig to calculate the positions: vary your angle from 0 to 2 pi for a full circle. Use a fraction of that range for a part of a circle.

x = cos(angle) * radius + origin.x
y = sin(angle) * radius + origin.y

Upvotes: 1

Related Questions