Apakah ada cara untuk menetapkan cornerRadius
hanya sudut kiri atas dan kanan atas UIView
?
Saya mencoba yang berikut, tetapi akhirnya tidak melihat pemandangan lagi.
UIView *view = [[UIView alloc] initWithFrame:frame];
CALayer *layer = [CALayer layer];
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRoundedRect:frame byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight) cornerRadii:CGSizeMake(3.0, 3.0)];
layer.shadowPath = shadowPath.CGPath;
view.layer.mask = layer;
view.bounds
, bukanframe
, (2) layer harus aCAShapeLayer
, bukanCALayer
; (3) mengatur layerpath
, bukanshadowPath
.Jawaban:
Perhatikan fakta bahwa jika Anda memiliki batasan tata letak yang melekat padanya, Anda harus menyegarkan ini sebagai berikut di subkelas UIView Anda:
Jika Anda tidak melakukannya, itu tidak akan muncul.
Dan ke sudut-sudut, gunakan ekstensi:
Kasing pengontrol tampilan tambahan : Apakah Anda tidak bisa atau tidak ingin membuat subklas tampilan, Anda masih bisa mengitari tampilan. Lakukan dari pengontrol tampilan dengan mengabaikan
viewWillLayoutSubviews()
fungsi, sebagai berikut:sumber
Saya tidak yakin mengapa solusi Anda tidak berhasil tetapi kode berikut ini berfungsi untuk saya. Buat topeng bezier dan terapkan ke tampilan Anda. Dalam kode saya di bawah ini saya membulatkan sudut-sudut bawah
_backgroundView
dengan jari-jari 3 piksel.self
adalah kebiasaanUITableViewCell
:Versi cepat dengan beberapa peningkatan:
Versi Swift 3.0:
Ekstensi cepat di sini
sumber
viewDidLoad
metode, memindahkannya keviewDidAppear
dan itu berhasil.simulator
ukuran di storyboard.ex: if the simulator size is 6s it works fine for 6s, but not of others.
bagaimana saya bisa mengatasinya.path.CGPath
seharusnyapath.cgPath
viewWillAppear
. Ini juga berfungsi.Ini adalah versi Swift dari jawaban @JohnnyRockex
Catatan
Jika Anda menggunakan Tata Letak Otomatis , Anda harus mensubklasifikasikan Anda
UIView
dan memanggilroundCorners
tampilanlayoutSubviews
untuk efek optimal.sumber
.TopRight
dan.BottomRight
sepertinya tidak bekerja untuk saya.view.roundCorners([.TopLeft , .BottomLeft], radius: 10)
.layoutIfNeeded()
, maka metode ini.Dan akhirnya ... ada CACornerMask di iOS11! Dengan
CACornerMask
itu bisa dilakukan dengan cukup mudah:sumber
Contoh kode cepat di sini: https://stackoverflow.com/a/35621736/308315
Tidak secara langsung. Kamu harus:
CAShapeLayer
path
agar menjadiCGPathRef
berdasarkanview.bounds
tetapi dengan hanya dua sudut bulat (mungkin dengan menggunakan+[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:]
)view.layer.mask
untuk menjadiCAShapeLayer
sumber
Berikut adalah metode singkat yang diimplementasikan seperti ini:
sumber
Dalam cepat 4.1 dan Xcode 9.4.1
Di iOS 11 baris tunggal ini sudah cukup:
Lihat kode lengkap:
Tetapi untuk versi yang lebih rendah
Kode lengkapnya adalah.
Jika Anda menggunakan AutoResizing di storyboard, tulis kode ini di viewDidLayoutSubviews () .
sumber
iOS 11, Swift 4
Dan Anda dapat mencoba kode ini:
Dan Anda bisa menggunakan ini di sel tampilan tabel.
sumber
Ini akan menjadi jawaban paling sederhana:
sumber
Coba kode ini,
sumber
Emma:
.TopRight
dan.BottomRight
tidak bekerja untuk Anda mungkin karena panggilan untukview.roundCorners
dilakukan SEBELUM akhirview bounds
dihitung. Perhatikan bahwaBezier Path
turunan berasal dari tampilan terikat pada saat dipanggil. Misalnya, jika tata letak otomatis akan mempersempit tampilan, sudut bundar di sisi kanan mungkin berada di luar tampilan. Coba sebutkan, diviewDidLayoutSubviews
mana batas tampilan adalah final.sumber
Swift 4 Swift 5 cara mudah dalam 1 baris
Pemakaian:
Fungsi:
Dalam Objective-C
Pemakaian:
[self.verticalSeparatorView roundCorners:UIRectCornerTopLeft radius:10.0];
Fungsi yang digunakan dalam Kategori (hanya satu sudut):
sumber
Solusi saya untuk membulatkan sudut-sudut tertentu dari UIView dan UITextFiels dengan cepat adalah menggunakan
dan
UIView atau UITextFields aktual.
Contoh:
Dan dengan menggunakan
dan
, Saya dapat menentukan sudut kanan atas dan kanan bawah UITextField yang akan dibulatkan.
Anda dapat melihat hasilnya di sini:
sumber
Cepat 4
sumber
Cara untuk melakukan ini secara terprogram adalah dengan membuat
UIView
bagian atasUIView
yang memiliki sudut bulat. Atau Anda bisa menyembunyikan bagian atas di bawah sesuatu.sumber
sumber
Cara termudah adalah membuat topeng dengan lapisan sudut bundar.
Dan jangan lupa untuk:
sumber
Semua jawaban yang sudah diberikan benar-benar bagus dan valid (terutama ide Yunus menggunakan
mask
properti).Namun saya membutuhkan sesuatu yang sedikit lebih rumit karena layer saya sering dapat mengubah ukuran yang berarti saya perlu memanggil logika masking itu setiap waktu dan ini sedikit mengganggu.
Saya menggunakan
extensions
properti cepat dan terkomputasi untuk membangun yang nyatacornerRadii
properti yang menangani pembaruan otomatis topeng ketika lapisan diletakkan.Ini dicapai dengan menggunakan Peter Steinberg Great Aspects pustaka untuk bertele-tele.
Kode lengkap ada di sini:
Saya menulis posting blog sederhana yang menjelaskan hal ini.
sumber
Jika Anda mencari solusi pembangun antarmuka saja ada satu untuk iOS 11 dan lebih tinggi . Lihat jawaban saya di sini: https://stackoverflow.com/a/58626264
sumber
Ini adalah bagaimana Anda dapat mengatur radius sudut untuk setiap sudut tombol dengan Xamarin di C # :
sumber
Ekstensi yang bagus untuk menggunakan kembali solusi Yunus Nedim Mehel
Cepat 2.3
Pemakaian
sumber
Setelah mengubah sedikit kode @apinho In swift 4.3 berfungsi dengan baik
Untuk menggunakan fungsi ini untuk Anda lihat
sumber
Versi lain dari jawaban Stephane .
sumber
Di Swift 4.2, Buat melalui
@IBDesignable
seperti ini:sumber
Ekstensi sederhana
Pemakaian:
sumber