Saya mencoba menggambar bayangan di bawah tepi bawah UIView
di Cocoa Touch. Saya mengerti bahwa saya harus menggunakan CGContextSetShadow()
untuk menggambar bayangan, tetapi panduan pemrograman Quartz 2D sedikit kabur:
- Simpan status gambar.
- Panggil fungsi
CGContextSetShadow
, melewati nilai yang sesuai. - Lakukan semua gambar yang ingin Anda terapkan bayangan.
- Kembalikan keadaan grafis
Saya sudah mencoba yang berikut ini dalam UIView
subkelas:
- (void)drawRect:(CGRect)rect {
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(currentContext);
CGContextSetShadow(currentContext, CGSizeMake(-15, 20), 5);
CGContextRestoreGState(currentContext);
[super drawRect: rect];
}
..tapi ini tidak bekerja untuk saya dan saya agak bingung tentang (a) ke mana harus pergi berikutnya dan (b) jika ada sesuatu yang perlu saya lakukan UIView
untuk membuat pekerjaan ini?
sumber
#import <QuartzCore/QuartzCore.h>"
ke file .h.masksToBounds
untukNO
akan meniadakancornerRadius
, bukan?self.layer.backgroundColor = [[UIColor whiteColor] CGColor];
tetapi tidak berhasil. Pandangan mana yang perlu transparan?Ini akan memperlambat aplikasi. Menambahkan baris berikut dapat meningkatkan kinerja selama tampilan Anda terlihat persegi panjang:
sumber
Solusi yang sama, tetapi hanya untuk mengingatkan Anda: Anda dapat menentukan bayangan langsung di storyboard.
Ex:
sumber
UIView
atauCGLayer
yang merupakanUIColor
pembungkus untukCGColor
properti;)Anda dapat mencoba ini .... Anda bisa bermain dengan nilainya. Yang
shadowRadius
menentukan jumlah blur.shadowOffset
menentukan kemana bayangan pergi.sumber
Solusi sederhana dan bersih menggunakan Interface Builder
Tambahkan file bernama UIView.swift di proyek Anda (atau cukup tempel ini di file apa pun):
Maka ini akan tersedia di Interface Builder untuk setiap tampilan di Utilities Panel> Attributes Inspector:
Anda dapat dengan mudah mengatur bayangan sekarang.
Catatan:
- Bayangan tidak akan muncul di IB, hanya saat runtime.
- Seperti yang dikatakan Mazen Kasser
sumber
Failed to set (shadowColor) user defined inspected property on (UICollectionViewCell): [<UICollectionViewCell> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key shadowColor.
UIKit
untuk membuatnya berfungsi,Foundation
impor dasar yang dibuat oleh XCode tidak cukup, tetapi mengkompilasi dengan baik. Saya seharusnya menyalin seluruh kode sumber. Terima kasih Axel untuk solusi yang bagus ini.Saya menggunakan ini sebagai bagian dari utils saya. Dengan ini kita tidak hanya dapat mengatur bayangan tetapi juga bisa mendapatkan sudut bulat untuk apa saja
UIView
. Anda juga dapat mengatur bayangan warna apa yang Anda inginkan. Biasanya hitam lebih disukai tetapi kadang-kadang, ketika latar belakang non-putih Anda mungkin menginginkan yang lain. Inilah yang saya gunakan -Untuk menggunakan ini kita perlu menyebutnya -
[utils roundedLayer:yourview.layer radius:5.0f shadow:YES];
sumber
Cepat 3
sumber
installShadow()
tidak dipanggil dariviewDidLoad()
atauviewWillAppear()
draw
metode tampilan yang terlalu banyak. Bayangan datang dengan benar tetapi sudut bulat tidak.UIStackView
tata letak yang hanya melakukan dan tidak memiliki tampilan. Anda mungkin harus memasukkan biasaUIView
sebagai wadah untuk semuanya.Jika Anda ingin menggunakan StoryBoard dan tidak ingin terus mengetik atribut runtime, Anda dapat dengan mudah membuat ekstensi untuk dilihat dan membuatnya dapat digunakan di storyboard.
Langkah 1. buat ekstensi
langkah 2. Anda sekarang dapat menggunakan atribut ini di storyboard
sumber
Bagi mereka yang gagal membuat ini berfungsi (Seperti saya!) Setelah mencoba semua jawaban di sini, pastikan Klip Subviews tidak diaktifkan di inspektur Atribut ...
sumber
Cepat 3
sumber
Anda dapat menggunakan fungsi utilitas saya yang dibuat untuk radius bayangan dan sudut seperti di bawah ini:
Semoga ini bisa membantu Anda !!!
sumber
Semua Jawab dengan baik, tetapi saya ingin menambahkan satu poin lagi
Jika Anda mengalami masalah ketika Anda memiliki sel tabel, Deque sel baru ada ketidakcocokan dalam bayangan sehingga dalam kasus ini, Anda perlu menempatkan kode bayangan Anda dalam metode layoutSubviews sehingga akan berperilaku baik di semua kondisi.
atau di ViewControllers untuk kode tempat bayangan tampilan tertentu di dalam metode berikut ini sehingga berfungsi dengan baik
Saya telah memodifikasi implementasi bayangan saya untuk pengembang baru untuk formulir yang lebih umum:
sumber
Untuk sesama Xamaria, jawaban versi Xamarin.iOS / C # akan terlihat seperti berikut:
Perbedaan utama adalah bahwa Anda memperoleh contoh
CGContext
di mana Anda secara langsung memanggil metode yang sesuai.sumber
Anda dapat menggunakan ini
Extension
untuk menambahkan bayanganAnda bisa menyebutnya seperti
sumber
Sketch Shadow Menggunakan IBDesignable dan IBInspectable di Swift 4
sumber