2016-09-13 12 views
5

UISlider'un her bir değerini okumalıyım. Kaydırıcıdaki değeri hata ayıklama alanında yazdırdığımda, kaydırıcıyı yavaş-orta hızda hareket ettirirken her değerin 1 artırılacağını göreceksiniz. Aşağıda görüldüğü gibi kaydırıcı değerleri büyük adımlarla atlamak oruç taşıdığınızdaKaydırıcının ne kadar hızlı hareket ettiğine bakılmaksızın UISlider'in her değeri nasıl okunur?

Slider values at slow-medium pace

Ancak:

Slider values at fast pace

Ben ne olursa olsun her adımda bir kaydırıcı değerini okuyabilir yine de var mı hangi hızda hareket ediyor?

kodu (tercihen hızlı olarak): Buraya sizin algoritmayı takip etmek istiyorsanız

@IBAction func didMoveFeedbackSlider(sender: UISlider) { 

    let currentValue = sender.value 
    var currentValueInt = Int(ceil(currentValue)) 

    print("slider value: \(currentValueInt)") 

} 
+1

Afaik, sürgü varsayılan olarak sürekli ('isContinuous' özelliği), bu nedenle bu, kaydırıcının bir özelliği olduğunu varsaydığımız için garip bir davranış gibi görünüyor. Örneğin, farenizi (fare güncelleme oranını?) Çok hızlı bir şekilde hareket ettirdiğinizde, kaydırıcıdan ziyade kontrol cihazı bir özellik olabilir mi? Gerçek dokunmatik cihaz üzerinde test yaptınız mı? Ayrıca, bu davranışı farklı "UIControlEvents" için denediniz mi? (E.g. OpenOffice.addTarget (..., forControlEvents: UIControlEvents.ValueChanged) ''. – dfri

+0

Bir iPhone üzerinde test ettim ve hızlı bir şekilde hareket ettirildiğinde değer tekrar adım atıyor. Kaydırıcıya, bir 'IBAction' öğesini storyboard üzerinden bağlamak yerine programlı olarak bir hedef eklemeyi de denedim ve bu hiç farketmedi. – Meurig

+0

Bir sürgü kullanmak zorunda mısınız? Kaydırıcılara aşina değilim, ama bir UIScrollView ile bildiğim şeyi tam olarak yapabiliyorum, ancak UI kurulumunuzu nasıl yapacağınızı bilmiyorum. – impression7vx

cevap

6

Tamam, olası bir çözüm

var value:Int = 0 
func readSliderValue(val:Int) { 
    while(value != val) { 
     value = value + (val < value ? -1 : 1) // or use += 
     print(value) 
    } 
} 

Ama Muhtemelen Matt sağ ve olduğu problem tasarım ve/veya algoritmadadır.

Değerler neden sıralı değil: Kaydırıcı, farenin/parmak konumunuzun kaydırıcının gerçek değerini temsil eder. Parmağınızı video/gifinizdeki gibi hızlı bir şekilde hareket ettirdiğinizde, parmak pozisyonunuz/hareketiniz için tarayan iç süreç parmağınızdan daha yavaştır. Yani, parmak pozisyonu için dahili algoritmaların iki kontrolü arasında (parmağınız) kaydırıcının bir konumundan daha fazla geçmiştir. Bu yüzden, kaydırıcı fikri, parmağınızın oraya nasıl geldiğini göstermek değil, şimdi olduğu yerde. Bu nedenle, kaydırıcı doğru şekilde çalışıyor, içerik oluşturucunun bakış açısından :)

+0

Mükemmel, tam ihtiyacım olan şey bu! – Meurig

İlgili konular