Saya ingin melakukan transformasi perspektif pada UIView (seperti terlihat pada coverflow)
Adakah yang baru tahu jika ini mungkin?
Saya telah diselidiki menggunakan CALayer
dan telah menjalankan semua programmer podcast Core Animation yang pragmatis, tapi saya masih belum jelas tentang cara membuat transformasi semacam ini pada iPhone.
Bantuan, petunjuk atau contoh cuplikan kode akan sangat dihargai!
ios
cocoa-touch
uiview
core-animation
calayer
Nick Cartwright
sumber
sumber
Jawaban:
Seperti kata Ben, Anda harus bekerja dengan
UIView's
layer, menggunakan aCATransform3D
untuk melakukanlayer's
rotation
. Trik untuk mendapatkan perspektif kerja, seperti yang dijelaskan di sini , adalah untuk langsung akses salah satu matrikscells
dariCATransform3D
(m34). Matriks matematika tidak pernah menjadi tujuan saya, jadi saya tidak dapat menjelaskan dengan tepat mengapa ini berhasil, tetapi ternyata demikian. Anda harus mengatur nilai ini ke fraksi negatif untuk transformasi awal Anda, lalu menerapkan transformasi rotasi layer Anda ke sana. Anda juga harus dapat melakukan hal berikut:Objektif-C
Swift 5.0
yang membangun kembali transformasi lapisan dari awal untuk setiap rotasi.
Contoh lengkap dari ini (dengan kode) dapat ditemukan di sini , di mana saya telah menerapkan rotasi berbasis sentuhan dan penskalaan pada beberapa
CALayers
, berdasarkan contoh oleh Bill Dudney. Versi terbaru dari program, di bagian paling bawah halaman, mengimplementasikan operasi perspektif semacam ini. Kode harus cukup sederhana untuk dibaca.Yang
sublayerTransform
Anda rujuk dalam respons Anda adalah transformasi yang diterapkan ke sublapisan AndaUIView's
CALayer
. Jika Anda tidak memiliki sublayer, jangan khawatir tentang hal itu. Saya menggunakan sublayerTransform dalam contoh saya hanya karena ada dua yangCALayers
terkandung dalam satu lapisan yang saya putar.sumber
Anda hanya dapat menggunakan transformasi Core Graphics (Quartz, 2D saja) yang diterapkan langsung ke properti transformasi UIView. Untuk mendapatkan efek dalam aliran balik, Anda harus menggunakan CATransform3D, yang diterapkan dalam ruang 3-D, sehingga dapat memberikan Anda tampilan perspektif yang Anda inginkan. Anda hanya dapat menerapkan CATransform3Ds ke lapisan, bukan tampilan, jadi Anda harus beralih ke lapisan untuk ini.
Lihat sampel "CovertFlow" yang disertakan dengan Xcode. Ini mac-only (yaitu bukan untuk iPhone), tetapi banyak konsep yang ditransfer dengan baik.
sumber
Untuk menambah jawaban Brad dan untuk memberikan contoh nyata, saya meminjam dari jawaban saya sendiri di posting lain pada topik yang sama. Dalam jawaban saya, saya membuat taman bermain Swift sederhana yang dapat Anda unduh dan mainkan , di mana saya mendemonstrasikan cara membuat efek perspektif dari UIView dengan hierarki lapisan sederhana, dan saya menunjukkan hasil yang berbeda antara menggunakan
transform
dansublayerTransform
. Saksikan berikut ini.Berikut adalah beberapa gambar dari pos:
sumber
Anda bisa mendapatkan efek Carousel yang akurat menggunakan iCarousel SDK.
Anda bisa mendapatkan efek Cover Flow instan di iOS dengan menggunakan perpustakaan iCarousel yang luar biasa dan gratis. Anda dapat mengunduhnya dari https://github.com/nicklockwood/iCarousel dan memasukkannya ke proyek Xcode Anda dengan cukup mudah dengan menambahkan header penghubung (ditulis dalam Objective-C).
Jika Anda belum menambahkan kode Objective-C ke proyek Swift sebelumnya, ikuti langkah-langkah ini:
Kode Sampel Swift 3:
sumber