Saya memiliki subkelas saya sendiri dari UIButton
. Saya menambahkannya UIImageView
dan menambahkan gambar. Saya ingin mengecatnya di atas gambar dengan warna tint tetapi tidak berhasil.
Sejauh ini saya memiliki:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
self.clipsToBounds = YES;
self.circleView = [[UIView alloc]init];
self.circleView.backgroundColor = [UIColor whiteColor];
self.circleView.layer.borderColor = [[Color getGraySeparatorColor]CGColor];
self.circleView.layer.borderWidth = 1;
self.circleView.userInteractionEnabled = NO;
self.circleView.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview:self.circleView];
self.iconView = [[UIImageView alloc]init];
[self.iconView setContentMode:UIViewContentModeScaleAspectFit];
UIImage * image = [UIImage imageNamed:@"more"];
[image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
self.iconView.image = image;
self.iconView.translatesAutoresizingMaskIntoConstraints = NO;
[self.circleView addSubview:self.iconView];
...
dan dalam seleksi:
- (void) setSelected:(BOOL)selected
{
if (selected) {
[self.iconView setTintColor:[UIColor redColor]];
[self.circleView setTintColor:[UIColor redColor]];
}
else{
[self.iconView setTintColor:[UIColor blueColor]];
[self.circleView setTintColor:[UIColor blueColor]];
}
}
Apa kesalahan yang telah aku perbuat? (Warna gambar selalu tetap sama seperti aslinya.)
setTintColor
saat membuat iconView ?Jawaban:
Alih-alih kode ini:
Kamu harus punya:
Gunakan ini di Swift 4.1
sumber
Anda juga dapat menyetelnya di aset Anda. Pastikan gambar Anda berisi semua piksel putih + transparan.
sumber
(Tidak dapat mengedit postingan @Zhaolong Zhong)
Di swift 3.0 , Anda dapat melakukan:
sumber
Di 2.0+ cepat, Anda dapat melakukan:
sumber
Versi Swift: 5.2.0
Tujuan C
Atau
Anda juga dapat menyetelnya di aset Anda.
sumber
Satu langkah kedepan. Ini adalah subclass drop-in dari UIImageView. (Bukan solusi tepat untuk pertanyaan awal.) Gunakan di Interface Builder dengan menyetel nama kelas ke TintedImageView. Pembaruan secara real-time di dalam desainer saat warna tint berubah.
(Swift 3.1, Xcode 8.3)
sumber
Buat imageView tersebut
Buat gambarnya
Hubungkan mereka
Tampilkan itu
sumber
semua yang dikatakan benar. kontribusi saya Jika Anda tidak dapat / tidak ingin menerapkan ke setiap UiImageView, ATAU untuk efisiensi Anda perlu merender SEKALI (atau contoh untuk sel tampilan tabel)
Dan atur ke semua elemen UI UIImage ini.
sumber
Jawaban @odemolliens seharusnya berfungsi.
Namun jika Anda masih mengalami masalah, pastikan bahwa warna tint yang Anda terapkan ke UIImageView berbeda dari yang ditentukan dalam Interface Builder.
sumber