Apakah mungkin untuk memodifikasi UIImage
's renderingMode
dari storyboard atau xib Editor?
Tujuannya adalah untuk diterapkan tintColor
pada UIImageView
objek tertentu .
ios
ios7
xcode-storyboard
Artem Stepanenko
sumber
sumber
Anda dapat menyetel mode rendering gambar tidak dalam
.xib
file, tetapi di.xcassets
perpustakaan.Setelah menambahkan gambar ke pustaka aset, pilih gambar dan buka inspektur atribut di sisi kanan Xcode. Temukan atribut 'Render As' dan setel ke 'template'.
Setelah mengatur mode rendering gambar, Anda dapat menambahkan warna tint ke
UIImageView
dalam file.xib
atau.storyboard
untuk menyesuaikan warna gambar.Ini menyetel properti pada gambar di mana pun itu digunakan, bukan hanya dalam satu file pembuat antarmuka, tetapi dalam hampir semua kasus (yang saya temui) ini adalah perilaku yang Anda inginkan.
Beberapa hal yang perlu diperhatikan:
UIImageView
. Saya belum memeriksanya secara mendalam.UIKitComponents
gambar lain seperti gambar dalamUIButton
danUIBarButtonItem
's.sumber
UIImageView
, jadi warna tint tidak selalu ditampilkan saat menjalankan aplikasi.Menggunakan mode rendering template dengan UIImageView di storyboard atau xib sangat bermasalah, baik di iOS 7 dan iOS 8.
Di iOS 7
UIImage tidak didekode dengan benar dari storyboard / xib. Jika Anda memeriksa
imageView.image.renderingMode
properti dalamviewDidLoad
metode ini, Anda akan melihat bahwa itu selaluUIImageRenderingModeAutomatic
, bahkan jika Anda menyetelnya ke Render As Gambar Template di file xcassets Anda.Untuk mengatasinya, Anda harus mengatur mode rendering secara manual:
Di iOS 8
UIImage didekodekan dengan benar dan
renderingMode
propertinya mencerminkan apa yang dipilih dalam file xcassets tetapi gambar tidak diwarnai.Untuk mengatasinya, Anda memiliki dua opsi:
tintColor
properti di Atribut Waktu Proses yang Ditentukan Pengguna, bukan di panel inspektur Atribut.atau
Anda dapat memilih opsi yang Anda sukai, keduanya mewarnai gambar dengan benar.
(Jika Anda mengkompilasi dengan Xcode 6.2, melakukan saja
self.imageView.tintColor = self.imageView.tintColor;
sudah cukup tetapi ini tidak berfungsi lagi jika Anda mengkompilasi dengan Xcode 6.3)Kesimpulan
Jika Anda perlu mendukung iOS 7 dan iOS 8, Anda memerlukan kedua solusi tersebut. Jika Anda hanya harus mendukung iOS 8, hanya satu solusi yang diperlukan.
sumber
Menyetel imageView RenderingMode untuk menggunakan warna tint di storyboard bisa dikurangi menjadi satu baris:
Kemudian gambar dan warna rona semuanya dapat diatur di Papan Cerita.
sumber
Anda dapat memperbaiki masalah .xib dengan ekstensi:
Sumber: https://gist.github.com/buechner/3b97000a6570a2bfbc99c005cb010bac
Luar biasa, bug ini sudah ada sekitar 4-5 tahun sekarang.
sumber
Anda tidak dapat menyetel
renderingMode
daristoryboard
atauxib
. Itu bisa diakses secara terprogram.ex:
sumber
UIImage *selectedImage = [unSeletedImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
Setel tintColor & Class di Storyboard.
sumber
Sangat mudah untuk memperbaikinya
Cukup buat kelas UIImageViewPDF dan gunakan di storyboard Anda
sumber
Solusi lain adalah membuat
UIImageView
subclass:Kemudian setel kelas dalam Interface Builder ke
TemplateImageView
.sumber
Cara sederhana untuk mengatur dari Storyboard:
Berfungsi dengan baik di iOS 10 dan Swift 3
sumber
Di iOS 9, pengaturan
tintColor
properti di Interface Builder masih bermasalah.Perhatikan bahwa solusi yang berfungsi selain menulis baris yang secara langsung memodifikasi
ImageView
properti adalah dengan menyetel Render As: Gambar Template dalam katalog aset, dan memanggil misalnya:sumber
Saya memperbaiki masalah ini dengan menambahkan atribut runtime
tintColor
di pembuat antarmuka.CATATAN: Anda masih perlu mengatur gambar Anda untuk ditampilkan sebagai gambar template di file Images.xcassets Anda.
sumber
Jika Anda membuat IBOutlet, Anda dapat mengubahnya dalam metode awakeFromNib seperti ...
Meskipun jawaban @ Moby lebih tepat - ini mungkin lebih ringkas.
sumber
Gila bug ini masih di iOS 12.1! Untuk storyboard / xibs: Menambahkan tag ke UIImageView bisa menjadi perbaikan cepat.
Swift 4.2.0
sumber
Di storyboard pilih UIImageView dan pilih inspector, set property
renderModeTemplate
=On
Di Storyboardsumber
Seperti yang juga disebutkan Rudolf di atas , saya akan mendefinisikan kelas sederhana, seperti ini:
Setelah definisi ini, cukup tambahkan Image View ke storyboard dan pilih kelas kustomnya sebagai
TintImage
. Ini akan mengaktifkan pilihan "Tint" di storyboard.sumber