Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Single values not showing Swift 3 #1

Open
pan23 opened this issue Dec 27, 2017 · 4 comments
Open

Single values not showing Swift 3 #1

pan23 opened this issue Dec 27, 2017 · 4 comments

Comments

@pan23
Copy link

pan23 commented Dec 27, 2017

I have installed RKPieChart and it works fine for 2 and 3 values with PieChart. but only one value is 100 and other two are 0, piechart not showing.

@ridvank
Copy link
Owner

ridvank commented Dec 28, 2017

I will be looking for it today and let you know 👍

@RodrigoLara
Copy link

I had the same problem, you just need to add a condition in the RKPieChartView class in the function calculateAngles(), "if item.endAngle! > 2 * π && items.count! = 1" , I leave the complete code of the function.

 private func calculateAngles()  {

    totalRatio = items.map({ $0.ratio }).reduce(0, { $0 + $1 })

    for (index, item) in items.enumerated() {
        item.startAngle = index == 0 ? 3 * π / 2 : items[index - 1].endAngle

        if items.count == 1 {
            totalRatio = 100
        }

        item.endAngle = item.startAngle! + (360 * item.ratio / totalRatio).degreesToRadians

        if item.endAngle! > 2 * π && items.count != 1 {
            item.endAngle = item.endAngle! - 2 * π
        }
    }
}

I hope help you

@soleilpqd
Copy link

soleilpqd commented Feb 7, 2018

My way, not sure about this:

    private func calculateAngles() {
        totalRatio = items.map({ $0.ratio }).reduce(0, { $0 + $1 })
        for (index, item) in items.enumerated() {
            item.startAngle = index == 0 ? 3 * π / 2 : items[index - 1].endAngle
            if items.count == 1 {
                totalRatio = 100
            }
            var diff = (360 * item.ratio / totalRatio).degreesToRadians
            let pi2 = π * 2
            while diff > pi2 {
                diff -= pi2
            }
            item.endAngle = item.startAngle! + diff
        }
    }

@usinuniverse
Copy link

usinuniverse commented Jul 5, 2018

If you have only one item, and you want It's occupy whole graph (100%), like this:

private func calculateAngles() {
        totalRatio = items.map({ $0.ratio }).reduce(0, { $0 + $1 })
        for (index, item) in items.enumerated() {
            item.startAngle = index == 0 ? 3 * π / 2 : items[index - 1].endAngle
            if items.count == 1 {
                items[0].ratio = 99.999999 // if ratio <= 100 then crashed. so just input 99.9999
                totalRatio = 100
            }
            item.endAngle = item.startAngle! + (360 * item.ratio / totalRatio).degreesToRadians
            if item.endAngle! > 2 * π {
                item.endAngle = item.endAngle! - 2 * π
            }
        }
    }

But this solution is just a fake. And this is very easy way.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants