0
나는 데이터가있는 레이더 차트가 있습니다. 슬라이더의 인덱스를 제공하고 싶습니다. 데이터 개수를 기반으로합니다. 슬라이더를 움직이면 그래프 값이 움직여야합니다. 중간 값 슬라이더의 엄지 손가락으로 이동한다고 가정하십시오. 가까운 지수에.UIslider에서 색인 얻기
for _ in 0..<3 {
let mind = arc4random_uniform(mult) + min
let bre = arc4random_uniform(mult) + min
let rel = arc4random_uniform(mult) + min
dataPoints.append(GraphDataPoints(mindfulness: Double(mind), breathing: Double(bre), relaxation: Double(rel)))
}
self.setChartData(mindfulness: dataPoints[0].mindfulness, breathing: dataPoints[0].breathing, relaxation: dataPoints[0].relaxation)
numberofPointsOnSlider = Float(100/(dataPoints.count - 1))
numberofPointsOnSlider 내가 인덱스가 value.pointIndex 슬라이더를 기억하고 move.In lastSliderValue 퍼센트이다.
@objc func sliderTouchEvents(slider:UISlider,event: UIEvent){
slider.isContinuous = true
if let touchEvent = event.allTouches?.first{
switch touchEvent.phase{
case .began:
lastSliderValue = slider.value
break
case .moved:
if slider.value.truncatingRemainder(dividingBy: numberofPointsOnSlider) == 0{
if lastSliderValue < slider.value || lastSliderValue > slider.value{
pointIndex = Int(slider.value/numberofPointsOnSlider)
self.isIncrement = false
}
lastSliderValue = slider.value
}
if !animation {
if pointIndex >= 0 && pointIndex < dataPoints.count {
var percentToMove:Float = 0
if lastSliderValue > slider.value && pointIndex > 0 {
percentToMove = (100 * (numberofPointsOnSlider - (slider.value.truncatingRemainder(dividingBy: numberofPointsOnSlider))))/numberofPointsOnSlider
mindfulDiff = Float(dataPoints[pointIndex].mindfulness - dataPoints[pointIndex - 1].mindfulness)
relaxationDiff = Float(dataPoints[pointIndex].relaxation - dataPoints[pointIndex - 1].relaxation)
breathingDiff = Float(dataPoints[pointIndex].breathing - dataPoints[pointIndex - 1].breathing)
}else if lastSliderValue < slider.value && pointIndex < dataPoints.count - 1 {
percentToMove = (100 * (slider.value.truncatingRemainder(dividingBy: numberofPointsOnSlider)))/numberofPointsOnSlider
mindfulDiff = Float(dataPoints[pointIndex].mindfulness - dataPoints[pointIndex + 1].mindfulness)
relaxationDiff = Float(dataPoints[pointIndex].relaxation - dataPoints[pointIndex + 1].relaxation)
breathingDiff = Float(dataPoints[pointIndex].breathing - dataPoints[pointIndex + 1].breathing)
}
mp = Float(dataPoints[pointIndex].mindfulness) - (mindfulDiff/100) * percentToMove
rp = Float(dataPoints[pointIndex].relaxation) - (relaxationDiff/100) * percentToMove
bp = Float(dataPoints[pointIndex].breathing) - (breathingDiff/100) * percentToMove
UIView.animate(withDuration: 10, animations: {
self.setChartData(mindfulness: Double(self.mp) , breathing: Double(self.bp) , relaxation: Double(self.rp))
})
}
else {
if (pointIndex < 0) {
pointIndex = 0
}
}
}
break
case .ended:
let progDiff = lastSliderValue - slider.value
print("End movie, \(pointIndex) , \(slider.value) ,progDiff: \(progDiff)")
if progDiff < 0{
if (progDiff * -1) >= numberofPointsOnSlider/2 {
animation = true
UIView.animate(withDuration: 10, animations: {
slider.value += self.numberofPointsOnSlider + progDiff
})
pointIndex = Int(slider.value/numberofPointsOnSlider)+1
// if isIncrement {
// pointIndex += pointIndex
// }else {
// isIncrement = true
//
// }
mindfulDiff = Float(dataPoints[pointIndex].mindfulness - Double(mp))
relaxationDiff = Float(dataPoints[pointIndex].relaxation - Double(rp))
breathingDiff = Float(dataPoints[pointIndex].breathing - Double(bp))
doGraphAnimate()
}else {
animation = true
UIView.animate(withDuration: 10, animations: {
slider.value = self.lastSliderValue
})
mindfulDiff = Float(dataPoints[pointIndex].mindfulness - Double(mp))
relaxationDiff = Float(dataPoints[pointIndex].relaxation - Double(rp))
breathingDiff = Float(dataPoints[pointIndex].breathing - Double(bp))
doGraphAnimate()
}
}else if progDiff > 0{
if progDiff >= numberofPointsOnSlider/2 {
animation = true
// if isIncrement {
// print("pointIndex : \(pointIndex)")
// pointIndex += pointIndex
// print("pointIndex Incremented : \(pointIndex)")
// }else{
// isIncrement = true
// }
pointIndex = Int(slider.value/numberofPointsOnSlider)
UIView.animate(withDuration: 10, animations: {
slider.value -= self.numberofPointsOnSlider - (self.lastSliderValue - slider.value)
})
mindfulDiff = Float(dataPoints[pointIndex].mindfulness - Double(mp))
relaxationDiff = Float(dataPoints[pointIndex].relaxation - Double(rp))
breathingDiff = Float(dataPoints[pointIndex].breathing - Double(bp))
doGraphAnimate()
}
else {
animation = true
UIView.animate(withDuration: 10, animations: {
slider.value = self.lastSliderValue
})
mindfulDiff = Float(dataPoints[pointIndex].mindfulness - Double(mp))
relaxationDiff = Float(dataPoints[pointIndex].relaxation - Double(rp))
breathingDiff = Float(dataPoints[pointIndex].breathing - Double(bp))
doGraphAnimate()
}
}
default :
break
}
}
}
도와주세요, 감사합니다.
이것은 언어/통신 문제 일 가능성이 있지만 * 정확히 * 문제입니까? * 재현 할 수 있도록 무엇을 줄 수 있습니까? 나는 코드를 읽었고 괜찮은 것처럼 보였습니다.하지만 UISlider가 최소/최대 값을 설정하고 값이있는 것이 무엇인지 말해 줄 수 있습니까? 값을 프로그래밍 방식으로 * 설정하려는 것입니까? 사용자가 값을 변경하고 있지만 업데이트하지 않았습니까? 다시 말하지만 아마 저의 투표 일 것입니다. 그러나 실제 문제가 무엇인지 알기가 어렵습니다. – dfd
사실 나는 최소 = 0 및 최대 = 100 슬라이더가 있습니다. 슬라이더에 내가 3 인덱스 (1,2,3) 있다고 가정하면. slider.value = 14, 슬라이더 엄지 이미지는 1로 이동해야합니다 (slidervalue가 있어야합니다 0 번째 위치). 슬라이더. 값 = 85 슬라이더 썸 이미지는 t0 인덱스 3으로 이동해야합니다. 슬라이더 값은 100 번째 위치에 있어야합니다. – Malleswari
일반 슬라이더는이를 수행 할 수 없습니다. 제 생각에는 제 3 자 슬라이더가 있습니다. 당신은 아마 당신이 당신의 질문에 이것을 원한다는 것을 강조해야합니다. 'UISlider'에 최소/최대 1-3이 있고 슬라이더 트랙에서 * relative * 거리를 가져 와서 말하자면 1에서 2 사이의 거리를 구별하는 것이 쉽습니다. 다시, * 문제는 무엇입니까? – dfd