Qual è il raggio d'angolo definitivo di iPhone X?


10

Ho sperimentato e non ho trovato un raggio d'angolo conclusivo per l'iPhone X.

Usando Xcode, ho creato un cerchio con una larghezza e una lunghezza di 80 (quindi raggio 40) e l'ho messo nell'angolo in alto a sinistra di iPhone X (quindi xey sono zero), c'è un piccolo spazio bianco tra il cerchio e il bordo dello schermo, che puoi vedere qui:

Ho anche provato un altro metodo, facendo questo con un pulsante:

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

Con questo mi rimane:

Quindi la domanda è: qual è il raggio d'angolo reale? O cosa sta succedendo con Xcode?

Risposte:


15

Gli angoli di iPhone X non hanno un raggio d'angolo conclusivo. Non sono archi normali, sono " angoli continui ".

Non puoi replicarli con un semplice .cornerRadius e non puoi nemmeno usare gli angoli continui di Apple, poiché si tratta di un'API privata.

CALayer su iOS 11 ha una proprietà privata "continueCorners", che è ciò che alimenta molti angoli arrotondati in SpringBoard - e probabilmente di più! Ora sono geloso.

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

Il più vicino che puoi ottenere senza la tua implementazione è il disegno rettangolo arrotondato di UIBezierPath, che utilizza _continuousRoundedRectBezierPath.


grazie mille questo ha molto più senso ora
chriscrutt,

1

Brad Ellis ha un articolo in dettaglio le curve su iPhone X .

[..] Gli angoli arrotondati dello schermo dell'iPhone X non usano il classico metodo di arrotondamento in cui ti sposti in linea retta e poi arco utilizzando un solo quadrante di un cerchio. Invece, la matematica è un po 'più complicata. Comunemente chiamato scoiattolo, la pendenza inizia prima, ma è più dolce.

Puoi vedere la differenza qui:

inserisci qui la descrizione dell'immagine


1

La seguente riga Objective-C

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

eseguito nel simulatore iOS 11.0.1 su iPhone X produce il seguente output:

<UITraitCollection: ... _UITraitNameDisplayCornerRadius = 39.000000>

Quindi sembra che ad un certo punto nel tempo, qualcuno alla Apple pensato che il raggio d'angolo è stata di 39 punti. Immagino sia la risposta più ufficiale che avremo. :-) Ma come spiegano le altre risposte, quell'informazione non è molto utile ...

Ancora più informazioni inutili: alcuni altri simulatori iOS 11.0 e 11.1 riportano _UITraitNameDisplayCornerRadius = 0.000000per iPhone senza angoli arrotondati (ad esempio, vedi questa domanda SO ), ma il simulatore per iOS 12.2 non include la _UITraitNameDisplayCornerRadiusproprietà nell'output del registro per UITraitCollection, e nemmeno un vero iPhone X con iOS 11.2.1. Immagino che abbiano rimosso questa proprietà dall'output del registro in iOS 11.2 o giù di lì.

PS: Suppongo che non abbia importanza, ma ho ottenuto questi risultati su Xcode 10.1.


1

La forma degli angoli non può essere descritta come un arco. Può tuttavia essere riprodotto utilizzando l'API pubblica poiché iOS 11. UIBezierPath.init(roundedRect:cornerRadius:)creerà un rettangolo con angoli arrotondati continui.

Fonte: https://medium.com/fueled-engineering/continuous-rounded-corners-with-uikit-b575d50ab232

iOS 13 ha introdotto una cornerCurveproprietà esplicita su CALayer: https://developer.apple.com/documentation/quartzcore/calayercornercurve

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.