Daripada membuat dua UIImageViews
, tampaknya logis untuk hanya mengubah image
pandangan satu. Jika saya melakukan itu, apakah ada pula yang memiliki fade / cross melarutkan antara dua gambar daripada saklar instan?
ios
objective-c
swift
cocoa-touch
uiimageview
Josh Kahane
sumber
sumber
Jawaban:
Sunting: ada solusi yang lebih baik dari @algal di bawah ini .
Cara lain untuk melakukan ini adalah dengan menggunakan transisi CAAnimation yang telah ditentukan:
Lihat proyek contoh Lihat Transisi dari Apple: https://developer.apple.com/library/content/samplecode/ViewTransitions/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007411
sumber
Ini bisa jauh lebih sederhana menggunakan berbasis blok baru,
UIKit animation
metode .Misalkan kode berikut ada di view controller, dan UIImageView yang ingin Anda belah silang adalah subview dari self.view dialamatkan melalui properti
self.imageView
Maka semua yang Anda butuhkan adalah:Selesai
Dan untuk melakukannya di Swift, seperti ini:
Swift 3, 4 & 5
sumber
Untuk Swift 3.0.1:
Referensi: https://gist.github.com/licvido/bc22343cacfa3a8ccf88
sumber
Ya apa yang Anda katakan benar-benar benar dan itulah cara untuk melakukannya. Saya menulis metode ini & selalu menggunakan ini untuk Fade dalam gambar saya. Saya berurusan dengan
CALayer
ini. Anda perlu mengimpor Core Animation untuk ini.Anda bisa melakukan yang sebaliknya untuk memudar gambar. Setelah itu memudar. Anda cukup menghapusnya dari superview (yang
UIImageView
).[imageView removeFromSuperview]
.sumber
Anda juga bisa mengemas fitur fade-in dalam subclass, sehingga Anda bisa menggunakannya sebagai UIImageView yang umum, seperti dalam contoh berikut:
Kemungkinan implementasi mengikuti.
Catatan: cara Anda benar-benar mengimplementasikan fade-in pada
setImage:
fungsi dapat berubah, dan bisa menjadi salah satu contoh bagus lainnya yang dijelaskan dalam jawaban lain untuk pertanyaan ini - membuat on-the-fly tambahanUIImageView
seperti yang saya lakukan di sini mungkin menjadi overhead yang tidak dapat diterima dalam situasi spesifik Anda .IMMFadeImageView.h :
IMMFadeImageView.m :
Kode di atas bergantung pada beberapa asumsi (termasuk ARC yang diaktifkan dalam proyek XCode Anda), hanya dimaksudkan sebagai bukti konsep, dan demi kejelasan dan fokus, kode tersebut tetap relevan dengan menghilangkan kode penting yang tidak terkait. Tolong jangan hanya copy-paste secara membabi buta.
sumber
Saya membutuhkan transisi untuk mengulang tanpa batas. Butuh BANYAK percobaan dan kesalahan untuk yang satu ini tetapi saya akhirnya mendapatkan hasil akhir yang saya cari. Ini adalah cuplikan kode untuk menambahkan animasi gambar ke UIImageView di UITableViewCell.
Ini kode yang relevan:
sumber
Setelah bermain-main dengan
UIView.transition()
dan mendapatkan masalah dengan.transitionCrossDissolve
opsi (saya mencoba untuk menganimasikan gambar berubah dalam satu UIImageView dan transisi terjadi secara instan tanpa animasi) Saya menemukan bahwa Anda hanya perlu menambahkan satu opsi lagi yang memungkinkan Anda menghidupkan properti yang berubah di dalam tampilan ( Swift 4.2 ):Selain itu: jika Anda memiliki subview pada imageView Anda, itu akan digambar ulang juga dan itu dapat mencegah animasi. Sebagai contoh, saya memiliki subview dengan blur pada imageView saya dan dalam hal ini animasi tidak berfungsi. Jadi saya baru saja mengubah hierarki tampilan saya dan memindahkan blur ke tampilan sendiri dan meletakkannya di atas imageView.
sumber
Ini saya pikir cara terpendek untuk melakukannya. Buat animasi UIView dan komit di imageView Anda.
sumber
Dengan menggunakan
highlightedImage
properti ini dapat dibuat sedikit lebih sederhana. Berikut ini contoh dalam Swift 3. Pertama-tama atur baik gambar normal maupun yang disorot:Dan ketika Anda ingin mengubah antara animasi tersebut:
sumber