2009-07-10 12 views
7

Birden çok bileşenle bir UIPickerView sahibim. Bazı değerler grileştirilmiş ve pickerView:didSelectRow:inComponent benim buna "Seçici" seçildiğinde, UIDatePickerUIDatePicker "30" den "28" 'e geçerek söz konusu seçici bileşenini en yakın geçerli değere kaydırarak onurlandırır. Ardından ayarlanan değeri bildirmek için bir temsilci yöntemini çağırır.UIPickerView selectedRowInComponent: kod ayarlandıktan sonra eski verileri döndürür

zaman ayarlayıcı yöntem, benim UIPickerView sitesindeki selectRow:inComponent:animated:YES ekranda değer doğru aradığında, ancak selectedRowInComponent: elde edilen değerler (gri değerler için ayarlama önce gelen) bayat. Ancak, selectRow:inComponent:animated:NO'u çağırırsam, döndürülen değerler doğrudur, ancak animasyonun olmaması sarsıntıdır.

Ben beginAnimations:/commitAnimations bloğunda ayarlama sarma ve UIView 'ın +animationDidStopSelector değerleri yakalamak denedim ama hâlâ eski değerleri olsun. Daha önce birisi bunun üzerinde çalıştı mı?

Sorun, çoğaltılması kolaydır.

[picker selectRow:newValue inComponent:i+offset animated:YES]; 

retValue = [picker selectedRowInComponent:i+offset]; 

bunu animasyonlu EVET varsa, o retValue aklında 0'dır (eğer bayat diyoruz). NO olarak değiştirilirse, retValue yeniValue ile aynı olacaktır.

cevap

1

Bunu fark etmedim, ancak animasyonu işlemek için kolay bir saldırı olabilir, daha sonra animasyon tamamlandıktan sonra, yalnızca animasyon olmadan yeniden gerçekleştirin. Daha sonra selectedRowInComponent sonuçlarının doğru olması gerekir. Bununla birlikte, test kodunuzdan doğru sonuçları döndürdüğü görülüyor. Seçiciden animasyonlu satırı seçmesini isterseniz, animasyon tamamlanana kadar yeni değer ayarlanmaz, bu yüzden hemen animasyonu başlattıktan sonra seçili satırı hemen soruyorsanız (ki yine de sonraki runloop'a kadar başlamaz)), o zaman eski sonucu alacaksın.

Animasyonun sonunu tam olarak nasıl yakalıyorsunuz, kullandığınız kodu gösterebilir misiniz?

Ve başka bir soru, neden hemen düzeltilmesi için buna ihtiyacınız var? Seçiciyi açık bir şekilde ayarlıyorsanız, tam olarak hangi değerin ayarlandığını zaten biliyorsunuz, bu yüzden neden tekrar sormanız gerekiyor?

İlgili konular