Próbuję narysować cień pod dolną krawędzią UIView
w Cocoa Touch. Rozumiem, że powinienem CGContextSetShadow()
narysować cień, ale przewodnik po programowaniu Quartz 2D jest trochę niejasny:
- Zapisz stan grafiki.
- Wywołaj funkcję
CGContextSetShadow
, przekazując odpowiednie wartości. - Wykonaj cały rysunek, do którego chcesz zastosować cienie.
- Przywróć stan grafiki
Próbowałem następujące w UIView
podklasie:
- (void)drawRect:(CGRect)rect {
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(currentContext);
CGContextSetShadow(currentContext, CGSizeMake(-15, 20), 5);
CGContextRestoreGState(currentContext);
[super drawRect: rect];
}
.. ale to nie działa dla mnie i trochę utknąłem w (a) gdzie dalej i (b) jeśli jest coś, co muszę zrobić, UIView
aby to zadziałało?
źródło
#import <QuartzCore/QuartzCore.h>"
do pliku .h.masksToBounds
sięNO
będą negowaćcornerRadius
, nie?self.layer.backgroundColor = [[UIColor whiteColor] CGColor];
ale bez powodzenia. Który widok musi być przejrzysty?Spowolni to działanie aplikacji. Dodanie następującego wiersza może poprawić wydajność, o ile widok jest wyraźnie prostokątny:
źródło
To samo rozwiązanie, ale tylko dla przypomnienia: cień można zdefiniować bezpośrednio w serii ujęć.
Dawny:
źródło
UIView
lubCGLayer
który jestUIColor
wrapper dlaCGColor
mienia;)Możesz spróbować tego ... możesz grać z wartościami. To
shadowRadius
decyduje o stopniu rozmycia.shadowOffset
decyduje, dokąd idzie cień.źródło
Proste i czyste rozwiązanie za pomocą Konstruktora interfejsów
Dodaj plik o nazwie UIView.swift do swojego projektu (lub po prostu wklej go w dowolnym pliku):
Będzie to dostępne w Konstruktorze interfejsów dla każdego widoku w panelu Narzędzia> Inspektor atrybutów:
Teraz możesz łatwo ustawić cień.
Uwagi:
- Cień nie pojawi się w IB, tylko w czasie wykonywania.
- Jak powiedział Mazen Kasser
źródło
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
aby działało, podstawowyFoundation
import utworzony przez XCode nie wystarczy, ale dobrze się kompiluje. Powinienem był skopiować cały kod źródłowy. Dziękuję Axel za to miłe rozwiązanie.Używam tego jako części moich narzędzi. Dzięki temu możemy nie tylko ustawić cień, ale także uzyskać zaokrąglony narożnik dla dowolnego
UIView
. Możesz także ustawić preferowany cień. Zwykle czarny jest preferowany, ale czasami, gdy tło nie jest białe, możesz chcieć czegoś innego. Oto, czego używam -Aby tego użyć, musimy nazwać to -
[utils roundedLayer:yourview.layer radius:5.0f shadow:YES];
źródło
Szybki 3
źródło
installShadow()
nie jest wywoływana zviewDidLoad()
lubviewWillAppear()
draw
metody widzenia. Cień nadchodzi poprawnie, ale zaokrąglony róg nie.UIStackView
układem i nie ma widoku. Być może będziesz musiał wstawić zwykłyUIView
jako pojemnik na wszystko.Jeśli chcesz korzystać z StoryBoard i nie chcesz nadal wpisywać atrybutów środowiska wykonawczego, możesz łatwo utworzyć rozszerzenie widoków i umożliwić ich użycie w scenorysie.
Krok 1. Utwórz rozszerzenie
krok 2. teraz możesz używać tych atrybutów w serii ujęć
źródło
Do tych, którym nie udało się uzyskać tego (jak ja!) Po wypróbowaniu wszystkich odpowiedzi tutaj, upewnij się, że Inspekcja atrybutów nie jest włączona w Inspektorze atrybutów ...
źródło
Szybki 3
źródło
Możesz użyć mojej funkcji narzędzia utworzonej dla cienia i promienia narożnika, jak poniżej:
Mam nadzieję, że ci to pomoże !!!
źródło
Wszystko Odpowiedz dobrze, ale chcę dodać jeszcze jeden punkt
Jeśli napotkasz problem, gdy masz komórki tabeli, Deque nowej komórki ma niezgodność w cieniu, więc w tym przypadku musisz umieścić kod cienia w metodzie layoutSubviews, aby działał ładnie we wszystkich warunkach.
lub w ViewControllers dla określonego widoku umieść kod cienia wewnątrz następującej metody, aby działał dobrze
Zmodyfikowałem moją implementację cienia dla nowych programistów, aby uzyskać bardziej uogólnioną formę, np .:
źródło
Dla innych Xamarian wersja Xamarin.iOS / C # wygląda następująco:
Główną różnicą jest to, że nabywasz instancję,
CGContext
w której bezpośrednio wywołujesz odpowiednie metody.źródło
Możesz użyć tego,
Extension
aby dodać cieńmożesz to tak nazwać
źródło
Szkicuj cień za pomocą IBDesignable i IBInspectable w Swift 4
źródło