NSDev
NSDev

Reputation: 73

how to handle multiple UISlider value in iOS Swift?

I have three UISlider namely slider 1: to scale, slider 2: to adjust left/right and slider 3: to adjust top/bottom position.

When slider 1 (scale) is adjusted, when adjusting slider 2(left/right) scnnode is not adjusted same scale value, it reduces to original scale value.

here is my code of three slider value:

 @IBAction func didChangedSlider(_ sender: Any) {

    switch slider.value {

    case 0 ... 25 :
        earsNode1.scale    = SCNVector3(0.0011, 0.0011, 0.0011)
        earsNode.scale     = SCNVector3(0.0010, 0.0010, 0.0010)

        earsNode.position  = SCNVector3(-0.08, -0.035, -0.12)
        earsNode1.position = SCNVector3(0.077, -0.035, -0.12)

        isSizeIncreased = false

    case 25 ... 50 :
        earsNode1.scale    = SCNVector3(0.0014, 0.0014, 0.0014)
        earsNode.scale     = SCNVector3(0.0014, 0.0014, 0.0014)

        earsNode.position  = SCNVector3(-0.08, -0.040, -0.12)
        earsNode1.position = SCNVector3(0.077, -0.040, -0.12)

        isSizeIncreased = true

    case 50 ... 75 :

        earsNode1.scale    = SCNVector3(0.002, 0.002, 0.002)
        earsNode.scale     = SCNVector3(0.002, 0.002, 0.002)

        earsNode.position  = SCNVector3(-0.08, -0.050, -0.12)
        earsNode1.position = SCNVector3(0.077, -0.050, -0.12)

        isSizeIncreased = true

    case 75 ... 100 :
        earsNode1.scale    = SCNVector3(0.003, 0.003, 0.003)
        earsNode.scale     = SCNVector3(0.003, 0.003, 0.003)

        earsNode.position  = SCNVector3(-0.08, -0.064, -0.12)
        earsNode1.position = SCNVector3(0.077, -0.064, -0.12)

        isSizeIncreased = true

    default:
        print("slider value \(slider.value)")
    }
}

// slider2 - left/right

@IBAction func didChangedSliderLeftOrRight(_ sender: Any) {

    switch slider2.value {
    case 0 ... 25:

        earsNode.position = SCNVector3(-0.083, -0.035, -0.099)
        earsNode1.position = SCNVector3(0.083, -0.035, -0.099)

    case 25 ... 50:

        earsNode.position = SCNVector3(-0.081, -0.035, -0.099)
        earsNode1.position = SCNVector3(0.081, -0.035, -0.099)

    case 50 ... 75:

        earsNode.position = SCNVector3(-0.077, -0.035, -0.099)
        earsNode1.position = SCNVector3(0.077, -0.035, -0.099)

    case 75 ... 100:

        earsNode.position = SCNVector3(-0.073, -0.035, -0.099)
        earsNode1.position = SCNVector3(0.073, -0.035, -0.099)

    default:
        print("slider2 value \(slider2.value)")

    }
}

// slider3 - top/bottom

@IBAction func didChangedSliderTopOrBottom(_ sender: Any) {

    switch slider3.value {
    case 0 ... 25:


        earsNode.position = SCNVector3(-0.079, -0.027, -0.099)
        earsNode1.position = SCNVector3(0.079, -0.027, -0.099)

    case 25 ... 50:


        earsNode.position = SCNVector3(-0.079, -0.031, -0.099)
        earsNode1.position = SCNVector3(0.079, -0.031, -0.099)

        if isSizeIncreased {

            earsNode.position  = SCNVector3(-0.08, -0.040, -0.12)
            earsNode1.position = SCNVector3(0.077, -0.040, -0.12)
        }

    case 50 ... 75:


        earsNode.position = SCNVector3(-0.079, -0.035, -0.099)
        earsNode1.position = SCNVector3(0.079, -0.035, -0.099)

        if isSizeIncreased {

            earsNode.position  = SCNVector3(-0.08, -0.054, -0.12)
            earsNode1.position = SCNVector3(0.077, -0.054, -0.12)
        }

    case 75 ... 100:


        earsNode.position = SCNVector3(-0.079, -0.039, -0.099)
        earsNode1.position = SCNVector3(0.079, -0.039, -0.099)

        if isSizeIncreased {

            earsNode.position  = SCNVector3(-0.08, -0.060, -0.12)
            earsNode1.position = SCNVector3(0.077, -0.060, -0.12)
        }

    default:
        print("slider3 value \(slider3.value)")

    }
  }
}

here is my screenshot

enter image description here

My issue is when user change any slider value, its not changing from last position of slider adjusted. Slider value should be adjusted from already adjusted position.

Upvotes: 0

Views: 652

Answers (1)

maslovsa
maslovsa

Reputation: 1639

Copy/Paste and Save in Xcode this file https://gist.github.com/jeremyconkin/a3909b2d3276d1b6fbff02cefecd561a

When use Vector Math in your sliders (I rewrite only 1st):

@IBAction func didChangedSlider(_ sender: Any) {

switch slider.value {

case 0 ... 25 :
    earsNode1.scale    += SCNVector3(0.0011, 0.0011, 0.0011)
    earsNode.scale     += SCNVector3(0.0010, 0.0010, 0.0010)

    earsNode.position  += SCNVector3(-0.08, -0.035, -0.12)
    earsNode1.position += SCNVector3(0.077, -0.035, -0.12)

    isSizeIncreased = false

case 25 ... 50 :
    earsNode1.scale    += SCNVector3(0.0014, 0.0014, 0.0014)
    earsNode.scale     += SCNVector3(0.0014, 0.0014, 0.0014)

    earsNode.position  += SCNVector3(-0.08, -0.040, -0.12)
    earsNode1.position += SCNVector3(0.077, -0.040, -0.12)

    isSizeIncreased = true

case 50 ... 75 :

    earsNode1.scale    += SCNVector3(0.002, 0.002, 0.002)
    earsNode.scale     += SCNVector3(0.002, 0.002, 0.002)

    earsNode.position  += SCNVector3(-0.08, -0.050, -0.12)
    earsNode1.position += SCNVector3(0.077, -0.050, -0.12)

    isSizeIncreased = true

case 75 ... 100 :
    earsNode1.scale    += SCNVector3(0.003, 0.003, 0.003)
    earsNode.scale     += SCNVector3(0.003, 0.003, 0.003)

    earsNode.position  += SCNVector3(-0.08, -0.064, -0.12)
    earsNode1.position += SCNVector3(0.077, -0.064, -0.12)

    isSizeIncreased = true

default:
    print("slider value \(slider.value)")
}

}

Upvotes: 1

Related Questions