UIImagetidak memiliki -initWithSize:andColor:metode, tetapi NSImagetidak pada OS X. Apakah Anda menggunakan perpustakaan khusus atau kategori untuk ini?
ttarik
Maaf, memang benar saya menggunakannya melalui kategori (melihat proyek lama). Cukup edit pertanyaan saya.
Henry Pham
Jawaban:
194
Solusi bagus lainnya, Swift 2.2 kompatibel, adalah membuat konstruktor lain di UIImage, dengan cara ini:
Bagaimana kita bisa membuat sudut-sudut gambar ini lebih bulat?
Umair Afzal
Kenapa kita tidak bisa kembali begitu saja image? Mengapa perlu melakukan ini? self.init(cgImage: cgImage)
Andrey Gagan
@AndreyGagan AFAIK, Anda tidak dapat "mengganti" diri dengan yang baru dibuat UIImagedalam sebuah konstruktor, tetapi Anda dapat berantai melalui UIImage.init(cgImage: )konstruktor sebagai gantinya.
Alnitak
2
Gambar tidak dibuat dengan skala yang tepat. Misal ketika ukurannya 1x1, gambar 2x2 dikembalikan ketika skala layar utama 2.0. Anda harus meneleponself.init(cgImage: cgImage, scale: image!.scale, orientation: image!.imageOrientation)
Marián Černý
92
Ini pilihan lain. Saya yakin Anda menginginkan objek UIImage yang tepat.
Saya pikir tidak ada metode UIRectMake(0, 0, size.width, size.height), ini tampaknya menjadi yang benar: CGRectMake(0, 0, size.width, size.height).
Henry Pham
1
Secara umum, cobalah untuk menggunakan letalih-alih varuntuk variabel yang tidak dapat diubah; di sini sepertinya tidak rectjuga imageharus menggunakan vardeklarasi.
Zorayr
1
Bagaimana kita bisa membuat sudut-sudut gambar ini lebih bulat?
Ini mungkin mencapai efek yang diinginkan OP tetapi tidak ada artinya bahwa mereka memiliki metode untuk membuat UIImage, bukan untuk menetapkan UIImageView.
ttarik
Metode kedua Anda masih membuat tampilan gambar, bukan gambar, yang ditunjukkan oleh @ ev0lution.
rdelmar
sunting 3 terlampir. Sekarang kita punya banyak cara. Final dengan UIImageView.
Steve Rosenberg
1
Metode getImageWithColor(color: UIColor, size: CGSize) -> UIImageini cukup sebagai jawabannya, karena saya pikir tidak semua orang akan menggunakan ini bersama-sama dengan UIImageView
Henry Pham
Bagaimana kita bisa membuat sudut-sudut gambar ini lebih bulat?
Umair Afzal
9
Tweak kecil untuk jawaban luar biasa @ neoneye, memungkinkan kode panggilan untuk tidak perlu membuat CGSize, dan mengubah nama agar tidak bertabrakan dengan banyak orang lain:
Saya pikir beberapa jawaban di sini sedikit menyesatkan. Sebagian besar waktu Anda perlu menentukan ukuran gambar, bukan kasus tertentu (seperti 1x1). Tapi ini pendekatan yang bagus.
Henry Pham
4
Versi Swift 3 dari @anthonyliao Jawaban yang diterima:
UIImage
tidak memiliki-initWithSize:andColor:
metode, tetapiNSImage
tidak pada OS X. Apakah Anda menggunakan perpustakaan khusus atau kategori untuk ini?Jawaban:
Solusi bagus lainnya, Swift 2.2 kompatibel, adalah membuat konstruktor lain di UIImage, dengan cara ini:
Dengan cara ini Anda dapat membuat gambar berwarna khusus dengan cara ini:
Atau, secara opsional, buat gambar dengan ukuran khusus:
Swift 3.0
sumber
UIGraphicsBeginImageContextWithOptions(rect.size, true, 1.0)
ref: developer.apple.com/library/ios/documentation/UIKit/Reference/…image
? Mengapa perlu melakukan ini?self.init(cgImage: cgImage)
UIImage
dalam sebuah konstruktor, tetapi Anda dapat berantai melaluiUIImage.init(cgImage: )
konstruktor sebagai gantinya.self.init(cgImage: cgImage, scale: image!.scale, orientation: image!.imageOrientation)
Ini pilihan lain. Saya yakin Anda menginginkan objek UIImage yang tepat.
Masukkan ini ke dalam kode Swift Anda dan panggil saja
Swift 3.1:
sumber
UIRectMake(0, 0, size.width, size.height)
, ini tampaknya menjadi yang benar:CGRectMake(0, 0, size.width, size.height)
.let
alih-alihvar
untuk variabel yang tidak dapat diubah; di sini sepertinya tidakrect
jugaimage
harus menggunakanvar
deklarasi.Versi Swift 4:
Pemakaian:
sumber
Pendekatan yang lebih bersih adalah merangkum logika di dalam
UIImage
ekstensi:Sekarang konsumen dapat menelepon,
UIImage.imageWithColor(UIColor.blackColor())
untuk membuat gambar dengan latar belakang hitam.sumber
Metode serupa jika Anda ingin menggambar gambar sendiri vs menghubungkan satu melalui IBOutlet.
Metode ketiga meminjam dari anthonyliao. Sedikit lebih rumit:
sumber
UIImage
, bukan untuk menetapkanUIImageView
.getImageWithColor(color: UIColor, size: CGSize) -> UIImage
ini cukup sebagai jawabannya, karena saya pikir tidak semua orang akan menggunakan ini bersama-sama dengan UIImageViewTweak kecil untuk jawaban luar biasa @ neoneye, memungkinkan kode panggilan untuk tidak perlu membuat CGSize, dan mengubah nama agar tidak bertabrakan dengan banyak orang lain:
Cepat 4
sumber
Anda dapat menggunakan iOS 10 UIGraphicsImageRenderer API baru.
Berikut ini adalah ekstensi pada UIColor di Swift 3.1
sumber
Cara yang bagus adalah memiliki properti yang dihitung seperti ini:
Pemakaian:
sumber
Versi Swift 3 dari @anthonyliao Jawaban yang diterima:
sumber
Persegi dengan sudut bulat
}
sumber