Zaprojektowałem elementy interfejsu użytkownika w szkicu, a jeden z nich ma cień z rozmyciem 1 i rozłożeniem 0. Spojrzałem na dokument pod kątem właściwości warstwy widoków, a warstwa nie ma nic o nazwie rozprzestrzenianie się lub rozmycie, ani nic równoważnego (jedyną kontrolką było Tylko shadowOpacity) Jak można kontrolować takie rzeczy, jak rozmycie i rozprzestrzenianie się?
EDYTOWAĆ:
Oto moje ustawienia w Sketch:
A oto, jak powinien wyglądać mój cień:
A oto jak to wygląda w tej chwili: Uwaga, aby zobaczyć cień, musisz kliknąć zdjęcie.
Mój kod wygląda następująco:
func setupLayer(){
view.layer.cornerRadius = 2
view.layer.shadowColor = Colors.Shadow.CGColor
view.layer.shadowOffset = CGSize(width: 0, height: 1)
view.layer.shadowOpacity = 0.9
view.layer.shadowRadius = 5
}
ios
swift
uiview
core-graphics
Quantaliinuxite
źródło
źródło
Odpowiedzi:
Oto jak zastosować wszystkie 6 właściwości cienia szkicu do warstwy UIView z niemal idealną dokładnością:
Powiedzmy, że chcemy reprezentować:
Możesz to łatwo zrobić poprzez:
lub bardziej zwięźle:
Przykład:
Uwaga:
spread
, koduje ścieżkę na stałe w oparciu obounds
CALayer. Jeśli granice warstwy kiedykolwiek się zmienią, zechcesz ponownie wywołaćapplySketchShadow()
metodę.źródło
maskToBounds = false
.maskToBounds = false
. Przykładem niepowodzenia jest zastosowanie tego cienia do plikuUIButton
.shadowRadius = blur / UIScreen.main.scale
przeciwieństwem twardego kodowaniablur / 2.0
? A może jest jeszcze jeden powód, aby podzielić przez 2? @matchifang Czy już to rozgryzłeś?Możesz spróbować ... możesz bawić się wartościami. W
shadowRadius
dyktuje ilość rozmycia.shadowOffset
dyktuje, dokąd idzie cień.źródło
Szkicuj cień za pomocą IBDesignable i IBInspectable w Swift 4
źródło
layer.shadowRadius * 2
po shadowBlur getterTen kod działał dla mnie bardzo dobrze:
źródło
Dla tych, którzy próbują zastosować cień do wstępnie zdefiniowanej ścieżki (na przykład w przypadku widoku kołowego), oto co otrzymałem:
Później opublikuję kilka przykładów, ale to zadziałało w przypadku widoków kołowych.
źródło
1
zx
iy
0
shapeLayer.applyShadow(color: .black, alpha: 1, x: 0, y: 0, blur: 0, spread: 1, path: path)
. W tym przypadku cień ma przesunięcie, a nie powinien. Tutaj trójkąt powinien mieć rozrzut cienia 1 pikselMoje rozwiązanie oparte na tym poście odpowiada: (Swift 3)
źródło
Bardzo podoba mi się zamieszczona tutaj odpowiedź i sugestie w komentarzach. Tak zmodyfikowałem to rozwiązanie:
STOSOWANIE:
źródło
Może to trochę zagłębić się w historię, ale może niektórzy mieli ten sam problem. Użyłem przykładowego kodu z zaakceptowanej odpowiedzi. Jednak efekty są zupełnie inne: - wartość y musi być około połowy w porównaniu z tą samą wartością w szkicu - próbowałem nałożyć cień na pasek nawigacyjny i efekt jest strasznie inny - ledwo widoczny przy tych samych wartościach, które miał szkic.
Wydaje się więc, że metoda całkowicie nie odzwierciedla parametrów szkicu. Jakieś wskazówki?
źródło