Czy można ustawić cornerRadius
tylko lewy górny i prawy górny róg UIView
?
Próbowałem następujących, ale ostatecznie nie zobaczyłem widoku.
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;
ios
cocoa-touch
uiview
cornerradius
Tomek
źródło
źródło
view.bounds
, nieframe
, (2) warstwa powinna być, aCAShapeLayer
nieCALayer
; (3) ustaw warstwypath
, a nieshadowPath
.Odpowiedzi:
Zwróć uwagę na fakt, że jeśli masz dołączone ograniczenia układu, musisz odświeżyć to w podklasie UIView w następujący sposób:
Jeśli tego nie zrobisz, nie pojawi się.
Aby zaokrąglać rogi, użyj rozszerzenia:
źródło
Nie jestem pewien, dlaczego twoje rozwiązanie nie działało, ale poniższy kod działa dla mnie. Utwórz maskę Beziera i zastosuj ją do swojego widoku. W poniższym kodzie zaokrąglałem dolne rogi o
_backgroundView
promieniu 3 pikseli.self
to zwyczajUITableViewCell
:Wersja szybka z pewnymi ulepszeniami:
Wersja Swift 3.0:
Szybkie rozszerzenie tutaj
źródło
viewDidLoad
metodzie, przenieśliłemviewDidAppear
i działało.simulator
rozmiaru int storyboardu.ex: if the simulator size is 6s it works fine for 6s, but not of others.
jak mogę to przezwyciężyć.path.CGPath
powinien byćpath.cgPath
viewWillAppear
. To też działa.Oto Swift wersja @JohnnyRockex odpowiedź
Uwaga
Jeśli używasz automatycznego układu , musisz podklasować
UIView
i wywoływaćroundCorners
widok,layoutSubviews
aby uzyskać optymalny efekt.źródło
.TopRight
i.BottomRight
wydaje mi się, że nie działa dla mnie.view.roundCorners([.TopLeft , .BottomLeft], radius: 10)
.layoutIfNeeded()
tę metodę.I wreszcie ... jest CACornerMask w iOS11! Dzięki
CACornerMask
temu można to zrobić całkiem łatwo:źródło
Przykład szybkiego kodu tutaj: https://stackoverflow.com/a/35621736/308315
Nie bezpośrednio. Będziesz musiał:
CAShapeLayer
path
jakoCGPathRef
oparty na,view.bounds
ale z tylko dwoma zaokrąglonymi narożnikami (prawdopodobnie przy użyciu+[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:]
)view.layer.mask
aby byćCAShapeLayer
źródło
Oto krótka metoda zaimplementowana w ten sposób:
źródło
W wersji szybkiej 4.1 i Xcode 9.4.1
W iOS 11 ta pojedyncza linia wystarczy:
Zobacz pełny kod:
Ale dla niższych wersji
Pełny kod to.
Jeśli używasz AutoResizing w scenorysie, napisz ten kod w viewDidLayoutSubviews () .
źródło
iOS 11, Swift 4
I możesz wypróbować ten kod:
I możesz użyć tego w komórce widoku tabeli.
źródło
To byłaby najprostsza odpowiedź:
źródło
Wypróbuj ten kod,
źródło
Emma:
.TopRight
i.BottomRight
nie pracują dla ciebie, być może dlatego, że wezwanie doview.roundCorners
zostało wykonane PRZED końcowymview bounds
obliczeniem. Zauważ, żeBezier Path
wywodzi się z granic widoku w momencie jego wywołania. Na przykład jeśli automatyczny układ zawęzi widok, zaokrąglone rogi po prawej stronie mogą znajdować się poza widokiem. Spróbuj to nazwaćviewDidLayoutSubviews
, gdzie granica widoku jest ostateczna.źródło
Swift 4 Swift 5 łatwa droga w 1 linii
Stosowanie:
Funkcjonować:
W celu C
Stosowanie:
[self.verticalSeparatorView roundCorners:UIRectCornerTopLeft radius:10.0];
Funkcja używana w kategorii (tylko jeden róg):
źródło
Moim rozwiązaniem do zaokrąglania określonych narożników UIView i UITextFiels w swift jest użycie
i
rzeczywistych UIView lub UITextFields.
Przykład:
I za pomocą
i
, Mogę określić prawy górny i prawy dolny róg pola UITextField do zaokrąglenia.
Możesz zobaczyć wynik tutaj:
źródło
Szybki 4
źródło
Sposobem na zrobienie tego programowo byłoby utworzenie
UIView
górnej części zUIView
zaokrąglonymi narożnikami. Lub możesz ukryć górę pod czymś.źródło
źródło
Najprostszym sposobem byłoby zrobienie maski z zaokrągloną warstwą narożną.
I nie zapomnij:
źródło
Wszystkie podane już odpowiedzi są naprawdę dobre i poprawne (szczególnie pomysł Yunusa na użycie
mask
właściwości).Potrzebowałem jednak czegoś nieco bardziej złożonego, ponieważ moja warstwa często zmieniała rozmiary, co oznacza, że musiałem nazywać tę logikę maskowania za każdym razem, a to było trochę denerwujące.
Użyłem szybkich
extensions
i obliczonych właściwości, aby zbudować prawdziwycornerRadii
właściwość, która zajmuje się automatyczną aktualizacją maski po ułożeniu warstwy.Zostało to osiągnięte dzięki doskonałym aspektom Petera Steinberga biblioteki do zamiatania.
Pełny kod jest tutaj:
Wyjaśniłem prosty post na blogu .
źródło
Jeśli szukasz rozwiązania tylko dla konstruktora interfejsów, istnieje jedno dla iOS 11 i nowszych . Zobacz moją odpowiedź tutaj: https://stackoverflow.com/a/58626264
źródło
W ten sposób możesz ustawić promień narożnika dla każdego rogu przycisku za pomocą Xamarin w C # :
źródło
Piękne rozszerzenie do ponownego wykorzystania rozwiązania Yunus Nedim Mehel
Swift 2.3
Stosowanie
źródło
Po zmianie bit kodu @apinho W swift 4.3 działa dobrze
Aby użyć tej funkcji do przeglądania
źródło
Inna wersja odpowiedzi Stephane'a .
źródło
W Swift 4.2 utwórz go w
@IBDesignable
następujący sposób:źródło
Proste rozszerzenie
Stosowanie:
źródło