Jaki jest ostateczny promień narożny iPhone'a X?

10

Eksperymentowałem i nie znalazłem żadnego rozstrzygającego promienia narożnika dla iPhone'a X.

Korzystając z Xcode, utworzyłem okrąg o szerokości i długości 80 (więc promień 40) i umieściłem go w lewym górnym rogu iPhone'a X (tak, aby x iy wynosiły zero), między kółkiem jest mała biała szczelina i krawędź ekranu, którą możesz zobaczyć tutaj:

Próbowałem też innej metody, robiąc to za pomocą przycisku:

button.frame.size.height = 812
button.frame.size.width = 375
button.layer.cornerRadius = 40
button.center = self.view.center

Pozostają mi przy tym:

Pytanie brzmi: jaki jest prawdziwy promień narożnika? A co się dzieje z Xcode?

chriscrutt
źródło

Odpowiedzi:

16

Narożniki iPhone'a X nie mają jednoznacznego promienia naroża. Nie są normalnymi łukami, są „ ciągłymi narożnikami ”.

Nie można ich replikować za pomocą prostego pliku .cornerRadius, a także nie można używać ciągłych narożników Apple, ponieważ jest to prywatny interfejs API.

CALayer na iOS 11 ma prywatną właściwość „ContinuCorners”, która napędza wiele zaokrąglonych rogów w SpringBoard - i prawdopodobnie więcej! Teraz jestem zazdrosna.

https://twitter.com/argentumko/status/955773459463790592

Najbliższe, jakie możesz uzyskać bez własnej implementacji, to zaokrąglony rysunek prostokątny UIBezierPath, który wykorzystuje _continuousRoundedRectBezierPath.

grg
źródło
dziękuję bardzo, to ma teraz o wiele większy sens
chriscrutt
1

Brad Ellis ma artykuł szczegółowo krzywe na iPhone X .

[..] Zaokrąglone narożniki ekranu iPhone'a X nie używają klasycznej metody zaokrąglania, w której poruszasz się po linii prostej, a następnie wykonujesz łuk za pomocą jednej ćwiartki koła. Zamiast tego matematyka jest nieco bardziej skomplikowana. Stok, nazywany zwykle squircle, zaczyna się wcześniej, ale jest łagodniejszy.

Różnicę możesz zobaczyć tutaj:

wprowadź opis zdjęcia tutaj

Molomby
źródło
1

Następująca linia Celu-C

NSLog(@"%@", [self traitCollection]);

wykonywane w symulatorze iOS 11.0.1 na iPhonie X daje następujące wyniki:

<UITraitCollection: ... _UITraitNameDisplayCornerRadius = 39.000000>

Wygląda więc na to w pewnym momencie w czasie, ktoś w Apple myśli promień rogu było 39 punktów. To chyba najbardziej oficjalna odpowiedź, jaką otrzymamy. :-) Ale jak wyjaśniają inne odpowiedzi, informacja ta nie jest zbyt przydatna ...

Jeszcze bardziej bezużyteczne informacje: niektóre inne symulatory iOS 11.0 i 11.1 raportują _UITraitNameDisplayCornerRadius = 0.000000dla iPhone'ów bez zaokrąglonych rogów (np. Patrz to pytanie SO ), ale symulator dla iOS 12.2 nie zawiera _UITraitNameDisplayCornerRadiuswłaściwości w danych wyjściowych dziennika UITraitCollection, podobnie jak prawdziwy iPhone X z systemem iOS 11.2.1. Myślę, że usunęli tę właściwość z danych wyjściowych dziennika w iOS 11.2 lub mniej więcej.

PS: Myślę, że to nie ma znaczenia, ale mam te wyniki na Xcode 10.1.

jcsahnwaldt mówi GoFundMonica
źródło
1

Kształt narożników nie może być opisany jako łuk. Można go jednak odtworzyć za pomocą publicznego interfejsu API, ponieważ iOS 11. UIBezierPath.init(roundedRect:cornerRadius:)utworzy prostokąt z ciągłymi zaokrąglonymi narożnikami.

Źródło: https://medium.com/fueled-engineering/continuous-rounded-corners-with-uikit-b575d50ab232

iOS 13 wprowadził jawną cornerCurvewłaściwość CALayer: https://developer.apple.com/documentation/quartzcore/calayercornercurve

Leon Deriglazov
źródło