Apakah ada cara untuk menentukan durasi animasi baris UITableView, atau untuk mendapatkan callback saat animasi selesai?
Yang ingin saya lakukan adalah mem-flash indikator gulir setelah animasi selesai. Melakukan flash sebelum itu tidak melakukan apa-apa. Sejauh ini solusi yang saya miliki adalah menunda setengah detik (yang tampaknya merupakan durasi animasi default), yaitu:
[self.tableView insertRowsAtIndexPaths:newRows
withRowAnimation:UITableViewRowAnimationFade];
[self.tableView performSelector:@selector(flashScrollIndicators)
withObject:nil
afterDelay:0.5];
ios
iphone
uitableview
animation
cocoa-touch
Daniel Dickison
sumber
sumber
- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath
Jawaban:
Saat ini jika Anda ingin melakukan ini, ada fungsi baru mulai dari iOS 11 :
Dalam penutupan pembaruan, Anda menempatkan kode yang sama seperti di bagian beginUpdates () / endUpdates. Dan penyelesaiannya dilakukan setelah semua animasi.
sumber
Baru saja menemukan ini. Berikut cara melakukannya:
Objective-C
Cepat
sumber
setAnimationDuration
sepertinya tidak memengaruhi durasi penyisipan / penghapusan. iOS 6Memperluas jawaban karwag yang bagus , perhatikan bahwa pada iOS 7, seputar CATransaction dengan UIView Animation menawarkan kontrol durasi animasi tabel.
Durasi animasi UIView tidak berpengaruh pada iOS 6. Mungkin animasi tabel iOS 7 diimplementasikan secara berbeda, di level UIView.
sumber
Itu salah satu trik yang sangat berguna! Saya menulis ekstensi UITableView untuk menghindari menulis hal-hal CATransaction sepanjang waktu.
Ini digunakan seperti ini:
sumber
setCompletionBlock
yang iOS 4+Mempersingkat jawaban bagus Brent , untuk setidaknya iOS 7 Anda dapat menggabungkan semua ini dengan singkat dalam panggilan [UIView animateWithDuration: delay: options: animations: complete:]:
meskipun, saya tidak bisa menimpa kurva animasi default dari apa pun selain EaseInOut.
sumber
Inilah jawaban karwag versi Swift
sumber
Bagi saya, saya membutuhkan ini untuk collectionView. Saya telah membuat ekstensi sederhana untuk menyelesaikan ini:
sumber
Karena
performBatch
metode tableView tersedia mulai dari iOS 11 saja, Anda dapat menggunakan ekstensi berikut:sumber
Anda dapat mencoba menggabungkan insertRowsAtIndexPath dalam file
transaksi, lalu lakukan flash setelahnya.
sumber