Saya ingin memeriksa pengaturan warna untuk latar belakang pada UIImageView. Saya sudah mencoba:
if(myimage.backgroundColor == [UIColor greenColor]){
...}
else{
...}
tapi itu tidak berhasil, bahkan ketika saya tahu warnanya hijau, selalu jatuh ke bagian lain.
Juga, apakah ada cara untuk menampilkan warna saat ini di konsol debug.
p [myimage backgroundColor]
dan
po [myimage backgroundColor]
tidak bekerja
ios
objective-c
cocoa-touch
uiimageview
uicolor
4thSpace
sumber
sumber
ffffff
tidak sama[UIColor whiteColor]
.Seperti yang ditunjukkan zoul di komentar,
isEqual:
akan kembaliNO
ketika membandingkan warna yang ada dalam model / spasi yang berbeda (misalnya#FFF
dengan[UIColor whiteColor]
). Saya menulis ekstensi UIColor ini yang mengubah kedua warna ke ruang warna yang sama sebelum membandingkannya:sumber
UIColor *(^convertColorToRGBSpace)(UIColor*) = ^(UIColor *color) ...
mendeklarasikan ablock
. Dia menggunakannya nanti denganconvertColorToRGBSpace(self)
. Untuk pengantar blok di iOS, lihat raywenderlich.com/9328/creating-a-diner-app-using-blocks-part-1Ini mungkin agak terlambat, tetapi CoreGraphics memiliki API yang lebih mudah untuk mencapai ini:
Seperti dokumentasi mengatakan:
Ini memecahkan banyak masalah dan kebocoran / algoritma kustom.
sumber
[UIColor isEqual:]
apakah hal yang sama seperti ini, bukan? Jawaban Mark masih satu-satunya yang memeriksa kesetaraan meskipun ruang warna dengan baik.UIColor isEqual:
jika warna berada dalam ruang warna yang berbeda.solusi samvermette diterjemahkan ke swift:
sumber
sumber
Ekstensi UIColor ini berfungsi dengan baik asalkan warna yang dibandingkan dapat dikonversi ke format RGB, yang seharusnya merupakan sebagian besar kasus.
Setidaknya dengan ekstensi ini:
Kedua perbandingan akan menghasilkan false jika dibandingkan dengan menggunakan UColor asli. IsEqual (...)
sumber
Saya menulis kategori ini. Jika
isEqual:
tidak mengembalikan NO, itu akan menguji apakah perbandingan lebih lanjut dari komponen yang berbeda mungkin masih cocok. Jika memungkinkan, model yang berbeda masih dibandingkan.sumber
Saya memiliki masalah yang sama dalam permainan warna saya dan saya menyelesaikannya dengan menggunakan persamaan perbedaan sederhana dalam warna RGB, Anda dapat dengan cepat melihat contoh kode pendek ColorProcess dari sini
jawabannya seperti pemenang
Alih-alih contoh kode yang dapat Anda gunakan
dan tentu saja jika mengembalikan 0 yang berarti Anda membandingkan warna yang terlalu mirip. rentang kembali adalah sesuatu seperti (0,0f - 1,5f) ..
sumber
Beberapa kesalahan pembulatan yang aneh dapat terjadi. Itu bisa menjadi alasan objek diatur ke warna dan warna yang Anda atur tidak sesuai persis.
Inilah cara saya menyelesaikannya:
Kode ini dapat ditingkatkan dengan tidak hanya membandingkan 1 tetapi membandingkan semua komponen. Misal merah + hijau + biru + alpha == red2 + green2 + blue2 + alpha2
sumber
Saya menggunakan ekstensi ini yang berfungsi untuk saya dalam semua kasus.
Harapan membantu seseorang.
Catatan:
#ffffff
apakah sama[UIColor whiteColor]
dengan ekstensi inisumber
Bagaimana dengan:
sumber
-1
dan jika ada yang masih memiliki nilai ini setelah menelepongetRed:green:blue:alpha:
, Anda tahu perbandingannya gagal. (atau jangan hilangkan boolean yang dikembalikan karena akan memberi tahu Anda jika berhasil dipanggil.)getRed:free:blue:alpha:
tidak akan berhasil pada warna monokrom. Jadi kode Anda tidak akan menghasilkan hasil selain dariis equal:
. tolong lihat jawaban saya bagaimana menghadapinya.Berikut ini adalah ekstensi untuk beralih ke Warna Ruang RGC di Swift:
}
sumber
Ekstensi ke UIColor, menggunakan fitur Swift 2.2. Namun perlu dicatat bahwa karena nilai-nilai RGBA dibandingkan, dan ini adalah CGFloat, kesalahan pembulatan dapat membuat warna-warna tersebut tidak dikembalikan sama dengan jika warna-warna tersebut tidak persis sama (mis. Warna-warna tersebut awalnya tidak dibuat menggunakan properti yang persis sama di init. (...)!).
sumber
Ekstensi UIColor
sumber
Saya telah mengonversi jawaban raf ke Swift 4 (banyak perubahan di
CGColor
API), menghapus pembongkaran paksa dan mengurangi indentasi berkat penggunaan yang murah hati dariguard
:sumber
Mengapa tidak menambahkan ekstensi dengan protokol yang setara? Jawaban ini menggunakan solusi dari Nicolas Miari. Jadi, jika Anda menyukai jawaban ini, silakan menyukai jawabannya (kedua dari atas)
Komentar Zoul: Hati-hati ketika membandingkan warna dengan cara ini, karena mereka harus berada dalam model warna yang sama agar dianggap setara. Misalnya, #ffffff tidak sama dengan [UIColor whiteColor]
sumber
Sementara jawaban @ samvermette sangat baik, saya menemukan bahwa kadang-kadang dapat menyebabkan negatif palsu ketika membandingkan berbagai jenis warna (dalam kasus saya
UIDeviceRGBColor
keUICachedDeviceWhiteColor
). Saya memperbaikinya dengan secara eksplisit membuat warna di `else 'juga:sumber
Anda harus menggunakan
Dokumentasi di sini .
sumber
sumber