Saya beralih tab secara terprogram dalam aplikasi yang digerakkan bilah tab menggunakan UITabBarController.selectedIndex
. Masalah yang saya coba selesaikan adalah bagaimana menganimasikan transisi antar tampilan. yaitu. dari tampilan tab saat ini ke tampilan tab yang dipilih.
Pikiran pertama adalah memanfaatkan UITabBarControllerDelegate
, tetapi tampaknya ini tidak dipanggil saat berpindah tab secara terprogram. Saya sekarang sedang mempertimbangkan UITabBarDelegate.didSelectItem
: sebagai pengait yang mungkin untuk mengatur animasi transisi.
Adakah yang berhasil menghidupkan transisi? Jika ya, bagaimana caranya?
ios4
uitabbarcontroller
uitabbar
drekka
sumber
sumber
Jawaban:
Pembaruan 04/2016: Justed ingin memperbarui ini untuk mengucapkan terima kasih kepada semua orang untuk semua suara. Harap perhatikan juga bahwa ini awalnya ditulis jauh kembali ketika ... sebelum ARC, sebelum kendala, sebelumnya ... banyak hal! Jadi harap pertimbangkan hal ini saat memutuskan apakah akan menggunakan teknik ini. Mungkin ada pendekatan yang lebih modern. Oh, dan jika Anda menemukannya. Harap tambahkan tanggapan agar semua orang dapat melihat. Terima kasih.
Suatu saat nanti ...
Setelah banyak penelitian, saya menemukan dua solusi yang berfungsi. Keduanya bekerja dan melakukan animasi antar tab.
Solusi 1: Transisi dari tampilan (sederhana)
Ini adalah yang termudah dan menggunakan metode transisi UIView yang telah ditentukan sebelumnya. Dengan solusi ini, kami tidak perlu mengelola tampilan karena metode yang berfungsi untuk kami.
Solusi 2: Gulir (lebih kompleks)
Solusi yang lebih kompleks, tetapi memberi Anda lebih banyak kontrol atas animasi. Dalam contoh ini kita mendapatkan tampilan untuk meluncur dan mematikan. Dengan yang satu ini kita perlu mengatur sendiri pandangannya.
Solusi ini di Swift:
sumber
shouldSelectViewController
dan TIDAK mengembalikannya ke sanaberikut ini adalah percobaan saya untuk menggunakan formulir kode drekka ke dalam metode delegasi (UITabBarControllerDelegate)
sumber
Solusi saya untuk iOS7.0 atau lebih tinggi.
Anda dapat menentukan pengontrol animasi khusus di delegasi bilah tab.
Terapkan pengontrol animasi seperti ini:
Kemudian gunakan di UITabBarControllerDelegate Anda:
sumber
Daripada digunakan
tabBarController:shouldSelectViewController:
lebih baik diimplementasikantabBarController:animationControllerForTransitionFromViewController:toViewController:
TransitioningObject.swift
TabBarViewController.swift
sumber
Saya pikir Anda dapat dengan mudah mencapai transisi untuk UITabBarControlelr menggunakan CATransition; Ini juga akan menyelesaikan semua efek samping dari penggunaan transisiFromView: toView:
Gunakan ini di dalam kelas TabBarController kustom Anda yang diperluas dari UITabBarController.
Semoga ini membantu :)
sumber
Saya menulis postingan setelah mencoba berbagai jawaban di sini.
Kode ada di Swift, dan Anda dapat mengubah tab secara terprogram dengan animasi dengan memanggil
animateToTab
.Jika Anda ingin semua perubahan tab memiliki animasi, kaitkan
UITabBarControllerDelegate
seperti ini:sumber
Solusi saya di Swift:
Buat kelas TabBar kustom dan setel di TabBar storyboard Anda
sumber
finished
akan salah). Saya tidak tahu mengapa itu terjadi, tapi saya pikir itu ada hubungannya dengan transformasi CA yang menganggap "tidak ada yang dianimasikan". Saya beralih ke animasi dengan bingkai, dan itu berhasil.Saya menggunakan solusi @ Mofumofu dan memutakhirkannya ke Swift 1.2 dan juga menerapkan animasi naik / turun. Artinya, ViewController baru akan muncul dan mendorong yang lama jika indeks viewcontroller baru lebih besar dari yang lama. Jika tidak, arahnya turun.
Di Container ViewController:
sumber
Ini solusi Swift 3 saya:
Saya mengganti selectedIndex dari UITabBarViewController saya seperti ini:
Kemudian saya menggunakan fungsi ini yang meniru animasi push / pop asli:
Saya harap ini membantu :)
sumber
perbaikan untuk animasi gelisah ...
UIView * fromView = self.view.superview;
sumber
ini dapat diselesaikan dengan dua cara
1 - Tulis ini di file AppDelegate.m Anda sekali. Ingatlah untuk menyertakan UITabBarControllerDelegate menggunakan <> setelah titik dua (:) di AppDelegate.h Anda
2 - Tuliskan ini di setiap file ViewController.m Anda
semoga bantuan ini ...!
sumber
Anda dapat menganimasikan bergantung pada Item yang disadap - Dalam contoh ini, kita flipFromLeft jika indeks yang disadap> dari indeks yang dipilih sebelumnya dan kita flipFromRight jika indeks yang disadap <dari indeks yang dipilih sebelumnya. Ini adalah Swift 4: Implementasikan metode UITabBarControllerDelegate
sumber
jawaban drekka sangat bagus. Saya mengubah transisi scroll sedikit sehingga animasinya lebih terlihat seperti animasi push Apple. Saya menambahkan animasi tambahan setelah menyelesaikan animasi pertama agar efek geser terlihat benar.
sumber
Saya ingin menggunakan transisi balik antara dua pengontrol tampilan anak dengan menekan tombol dan mencapainya sebagai berikut:
Saya juga menyetel warna latar belakang menjadi hitam, dalam kasus saya, saya melakukannya dengan menyetel navigationController.view.backgroundColor tetapi dalam kasus Anda mungkin window.backgroundColor yang dapat dengan mudah disetel di delegasi aplikasi.
sumber
Inilah kode kerja saya ( untuk 3 tab , belum mencobanya lebih !!) untuk menganimasikan transisi antar tab. Ini terutama didasarkan pada solusi drekka, tetapi sudah diimplementasikan dalam metode delegasi tabbar, jadi itu harus melakukan pekerjaan jika Anda hanya menyalin / menempelkannya .. (Anda tidak pernah tahu!)
}
sumber
Ini berfungsi untuk saya di Swift 3:
sumber
@samwize Jawaban diterjemahkan ke Swift 3 - 2 jempol yang satu ini, menciptakan efek halaman kiri ke wright:
sumber
Jawaban @ samwize diperbarui untuk Swift 5:
Jika Anda ingin semua perubahan tab memiliki animasi, gunakan UITabBarControllerDelegate dan terapkan metode ini:
Ubah tab secara terprogram dengan animasi dengan memanggil
animateToTab
:sumber
Cepat 4+
UITabBarControllerDelegate
Metode Anda harus seperti ini,Dan metodenya adalah,
sumber