sh-khashimov/SwiftFortuneWheel

positioning on slice after update

farazhaider88 opened this issue · 2 comments

Dear @sh-khashimov thanks for creating this library, its very useful.

I'm facing two issues right now can you please let me know how to solve them.

the first thing is that i need to text and position like that as image i did it with some hardcoding values so is there any better solution for that as you can see code its not look good.
Simulator Screen Shot - iPhone 11 - 2021-09-02 at 11 30 23

second issue is that im getting correct value as you mention in other solve issue the value after rotation, and pin is also correcting a correct value but now i have to update the color for the winning and losing slices for this i try to do add update slice function and checking condition, the issue is that color is updating for all but now position is shifting from the pin. like here the pin should point "Graphic" can you let me know what im doing wrong here.

Simulator Screen Shot - iPhone 11 - 2021-09-02 at 11 30 33

here is the code which im using right now:

`import UIKit
import SwiftFortuneWheel

class VariousWheelPodiumViewController: UIViewController {

var selectedIndex = -1


@IBOutlet weak var wheelControl: SwiftFortuneWheel!

var prizes = [(id:0,name: "MONEYMONEY", color: #colorLiteral(red: 0.9607843137, green: 0.768627451, blue: 0.568627451, alpha: 1),winningColor: #colorLiteral(red: 0.9333333333, green: 0.6078431373, blue: 0.2705882353, alpha: 1),losingColor: #colorLiteral(red: 0.737254902, green: 0.2901960784, blue: 0.6156862745, alpha: 1), textColor: #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)),
              (id:1,name: "GRAPHIC", color: #colorLiteral(red: 0.9843137255, green: 0.9098039216, blue: 0.8274509804, alpha: 1),winningColor: #colorLiteral(red: 0.9607843137, green: 0.768627451, blue: 0.568627451, alpha: 1), losingColor: #colorLiteral(red: 0.737254902, green: 0.2901960784, blue: 0.6156862745, alpha: 1),textColor: #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)),
              (id:2,name: "HOME", color: #colorLiteral(red: 0.9607843137, green: 0.768627451, blue: 0.568627451, alpha: 1),winningColor: #colorLiteral(red: 0.9333333333, green: 0.6078431373, blue: 0.2705882353, alpha: 1),losingColor: #colorLiteral(red: 0.737254902, green: 0.2901960784, blue: 0.6156862745, alpha: 1), textColor: #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)),
              (id:3,name: "IDEA", color: #colorLiteral(red: 0.9843137255, green: 0.9098039216, blue: 0.8274509804, alpha: 1), winningColor: #colorLiteral(red: 0.9333333333, green: 0.6078431373, blue: 0.2705882353, alpha: 1), losingColor: #colorLiteral(red: 0.737254902, green: 0.2901960784, blue: 0.6156862745, alpha: 1),textColor: #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)),
              (id:4,name: "MANAGMENT", color: #colorLiteral(red: 0.9607843137, green: 0.768627451, blue: 0.568627451, alpha: 1),winningColor: #colorLiteral(red: 0.9333333333, green: 0.6078431373, blue: 0.2705882353, alpha: 1), losingColor: #colorLiteral(red: 0.737254902, green: 0.2901960784, blue: 0.6156862745, alpha: 1),textColor: #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)),
              (id:5,name: "SEARCH", color: #colorLiteral(red: 0.9843137255, green: 0.9098039216, blue: 0.8274509804, alpha: 1),winningColor: #colorLiteral(red: 0.9333333333, green: 0.6078431373, blue: 0.2705882353, alpha: 1),  losingColor: #colorLiteral(red: 0.737254902, green: 0.2901960784, blue: 0.6156862745, alpha: 1),textColor: #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)),
              (id:6,name: "TARGET", color: #colorLiteral(red: 0.9607843137, green: 0.768627451, blue: 0.568627451, alpha: 1),winningColor: #colorLiteral(red: 0.9333333333, green: 0.6078431373, blue: 0.2705882353, alpha: 1),  losingColor: #colorLiteral(red: 0.737254902, green: 0.2901960784, blue: 0.6156862745, alpha: 1),textColor: #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)),
              (id:7,name: "TIME", color: #colorLiteral(red: 0.9843137255, green: 0.9098039216, blue: 0.8274509804, alpha: 1),winningColor: #colorLiteral(red: 0.9333333333, green: 0.6078431373, blue: 0.2705882353, alpha: 1), losingColor: #colorLiteral(red: 0.737254902, green: 0.2901960784, blue: 0.6156862745, alpha: 1),textColor: #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1))]



var slices = [Slice] ()

var finishIndex: Int {
    return Int.random(in: 0..<wheelControl.slices.count)
}



override func viewDidLoad() {
    super.viewDidLoad()

    wheelControl.configuration = .variousWheelPodiumConfiguration
    wheelControl.spinImage = "center"
    wheelControl.isSpinEnabled = false
    updateSlice()
    wheelControl.slices = slices
    
    
}

@IBAction func rotateTap(_ sender: Any) {
    let finishingIndex = self.finishIndex
    print(finishingIndex)
    wheelControl.startRotationAnimation(finishIndex: finishingIndex, continuousRotationTime: 1) { (isFinished) in
        guard isFinished else { return }
        print(self.prizes[finishingIndex])
        self.selectedIndex = finishingIndex
        self.updateSlice()
        self.wheelControl.slices = self.slices
        self.wheelControl.rotate(toIndex: finishingIndex)
    }
}

func updateSlice(){
    slices = []
    for (index,prize) in prizes.enumerated() {
        print(index,prize.name)
        
        var titleTextPreferences = TextPreferences(textColorType: .customPatternColors(colors: nil, defaultColor: .black), font: .systemFont(ofSize: 10, weight: .bold), verticalOffset: 20)
            titleTextPreferences.horizontalOffset = 10
            titleTextPreferences.orientation = .vertical
            titleTextPreferences.spacing = 0
            titleTextPreferences.alignment = .left
            
        var descriptionTextPreferences = TextPreferences(textColorType: .customPatternColors(colors: nil, defaultColor: .red), font: .systemFont(ofSize: 10), verticalOffset:-75)

        descriptionTextPreferences.horizontalOffset = 0
        descriptionTextPreferences.orientation = .vertical
        descriptionTextPreferences.spacing = 0
        descriptionTextPreferences.alignment = .left

        let content: [Slice.ContentType] = [.text(text: prize.name, preferences: titleTextPreferences),.text(text: prize.name, preferences: descriptionTextPreferences)]

        var slice = Slice(contents: content)
        if selectedIndex == -1{
            slice.backgroundColor = prize.color
        }else{
            slice.backgroundColor = index == selectedIndex ? prize.winningColor : prize.losingColor
        }
        slices.append(slice)
    }
   
}

}`

i m still getting this issue.... i also try to put this last code in dispatch , some times it works fine other not.

        DispatchQueue.main.async {
            self.wheelControl.rotate(toIndex: self.selectedIndex)
        }
    }

also i try to change code like this too....

self.wheelControl.slices[self.selectedIndex].backgroundColor = UIColor().colorWithHexString(hexString: self.sliceSelectedColorVarient)

can u check what im doing wrong?