Qual é o raio de canto definitivo do iPhone X?

10

Venho experimentando e não encontrei raio de canto conclusivo para o iPhone X.

Usando o Xcode, criei um círculo com largura e comprimento de 80 (portanto, raio 40) e o coloquei no canto superior esquerdo do iPhone X (para que xey sejam zero), existe uma pequena lacuna branca entre o círculo e a borda da tela, que você pode ver aqui:

Eu também tentei outro método, fazendo isso com um botão:

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

Com isso, fico com:

Então a pergunta é: qual é o raio real dos cantos? Ou o que está acontecendo com o Xcode?

chriscrutt
fonte

Respostas:

15

Os cantos do iPhone X não têm um raio conclusivo. Eles não são arcos normais, são ' cantos contínuos '.

Você não pode replicá-los com um simples .cornerRadius e também não pode usar os cantos contínuos da Apple, pois é uma API privada.

O CALayer no iOS 11 possui uma propriedade privada "contínuoCorners", que é o que alimenta muitos cantos arredondados no SpringBoard - e provavelmente mais! Agora estou com ciúmes.

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

O mais próximo que você pode chegar sem sua própria implementação é o desenho de retângulo arredondado do UIBezierPath, que é usado _continuousRoundedRectBezierPath.

grg
fonte
muito obrigado isso faz muito mais sentido agora
chriscrutt
1

Brad Ellis tem um artigo detalhando as curvas no iPhone X .

[..] Os cantos arredondados da tela do iPhone X não usam o método clássico de arredondamento, onde você se move em uma linha reta e depois faz arco usando um único quadrante de um círculo. Em vez disso, a matemática é um pouco mais complicada. Geralmente chamado de esquilo, a inclinação começa mais cedo, mas é mais suave.

Você pode ver a diferença aqui:

insira a descrição da imagem aqui

Molomby
fonte
1

A seguinte linha Objective-C

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

executado no simulador iOS 11.0.1 no iPhone X produz a seguinte saída:

<UITraitCollection: ... _UITraitNameDisplayCornerRadius = 39.000000>

Parece que em algum momento alguém da Apple pensou que o raio do canto era de 39 pontos. Acho que essa é a resposta mais oficial que teremos. :-) Mas, como as outras respostas explicam, essa informação não é muito útil ...

Informações ainda mais inúteis: Alguns outros simuladores do iOS 11.0 e 11.1 relatam _UITraitNameDisplayCornerRadius = 0.000000para iPhones sem cantos arredondados (por exemplo, consulte esta pergunta do SO ), mas o simulador para o iOS 12.2 não inclui a _UITraitNameDisplayCornerRadiuspropriedade na saída de log UITraitCollectione nem um iPhone X real executando o iOS 11.2.1. Eu acho que eles removeram essa propriedade da saída de log no iOS 11.2 ou mais.

PS: Acho que não importa, mas obtive esses resultados no Xcode 10.1.

jcsahnwaldt disse GoFundMonica
fonte
1

A forma dos cantos não pode ser descrita como um arco. No entanto, ele pode ser reproduzido usando a API pública, pois o iOS 11. UIBezierPath.init(roundedRect:cornerRadius:)criará um retângulo com cantos arredondados contínuos.

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

O iOS 13 introduziu uma cornerCurvepropriedade explícita no CALayer: https://developer.apple.com/documentation/quartzcore/calayercornercurve

Leon Deriglazov
fonte