2016-04-03 13 views
1

Uygulamamda, bir etiket kullanarak metnin görüntülenmesi gerekiyor. Kullanıcı tarafından bir değer sağlanır ve her bir metin değişikliği arasındaki gecikmeyi belirlemek için kullanılır. Etiket her güncellendiğinde, metin dizimde bir sonraki öğeye dönüşür. Ancak uygulamada kullanıldığında, etiket birkaç saniye sonra dizideki son öğeye dönüşür (gecikme süresi dizideki öğelerin miktarı ile çarpılır). Ayrıca öğeyi de yazdırıyorum, ancak tüm öğeleri birkaç saniye sonra bir kerede yazdırıyor (gecikme süresi dizideki öğelerin miktarı ile çarpılıyor). Yani, sonunda değişmek yerine etiketin her değişiklikten sonra güncellenmesi için bir yol var mı?Etiket metni, işlevde birden çok kez değiştiriliyor, ancak ekranda güncellenmiyor

sorunlara neden olan kod:

@IBAction func startEndTouch(sender: AnyObject) { 

    var wordsPerMinVal:Double = 60.0/sliderValueBen 

    for item in textEnterGo { 
     delay(wordsPerMinVal){ 
      self.yourWordsLabel.text = item 
      print(item) 
     } 
    } 
} 

cevap

0

Olay döngü UI güncellemek için kullanılır yolunu ve nasıl kod döngü takılan anlamamız gerekir.

Kodunuz denetimi aldığında, kodun yapmak için gereken güncelleştirmeleri yapmasına izin vermek için ekran görüntüsü durur. Kodunuz döndüğünde, Kakao, yönteminizde yapılan değişiklikleri analiz eder ve görselleri buna göre günceller.

Bu, sorununuzu çözmenin anahtarını sağlar: for döngüsü dahil, yönteminiz bitene kadar herhangi bir değişiklik göremez. Bu yüzden ara güncellemeler fark edilmeden sadece son güncellemeyi görüyorsunuz.

Bu sorunu gidermek için yaklaşımı yeniden düşünmeniz gerekir: bir döngü kullanmak yerine, durumunu üye değişkeninde tutan bir yöntem oluşturun. Olay işleyicisinden bu yöntemi çağırın, ilk ekranın durumunu ayarlayın, ilk öğeyi görüntüleyin, zamanlayıcıyı wordsPerMinVal'da uyandırmak ve döndürmek için ayarlayın. Bu, olay döngüsünün değişikliklerinizi oluşturmasına izin verir. Zamanlayıcı sizi geri çağırdığında, görselleri değiştirin, zamanlayıcıyı gerektiği gibi tekrar ayarlayın ve tekrar geri dönün. Güncellemelerden geçinceye kadar devam edin.

İlgili konular