Как обрабатывать несколько значений UISlider в iOS Swift? - PullRequest
0 голосов
/ 21 марта 2019

У меня есть три UISlider, а именно slider 1: для масштабирования, slider 2: для регулировки влево / вправо и slider 3: для регулировки верхнего / нижнего положения.

Когда slider 1 (масштаб), при настройке slider 2 (влево / вправо) scnnode не настраивается то же значение шкалы, оно уменьшается до исходного значения шкалы.

вот мой код из трех значений ползунка:

 @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)")

    }
  }
}

вот мой скриншот

enter image description here

Моя проблема заключается в том, что пользователь изменяет любое значение ползунка, и оно не меняется с последней позиции отрегулированного ползунка.Значение ползунка следует отрегулировать из уже отрегулированного положения.

1 Ответ

1 голос
/ 21 марта 2019

Копирование / вставка и сохранение в Xcode этого файла https://gist.github.com/jeremyconkin/a3909b2d3276d1b6fbff02cefecd561a

При использовании Vector Math в ползунках (я перезаписываю только 1-й):

@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)")
}

}

...