Каков окончательный радиус угла iPhone X?


10

Я экспериментировал и не нашел убедительного угла поворота для iPhone X.

Используя XCode, я создал круг шириной и длиной 80 (таким образом, радиус 40), и поместил его в верхний левый угол iPhone X (таким образом, x и y равны нулю), между кружком есть крошечный белый зазор и край экрана, который вы можете увидеть здесь:

Я также попробовал другой метод, делая это с помощью кнопки:

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

С этим у меня осталось:

Итак, вопрос в том, каков реальный угловой радиус? Или что происходит с Xcode?

Ответы:


16

Углы iPhone X не имеют убедительного углового радиуса. Они не нормальные дуги, они « сплошные углы ».

Вы не можете скопировать их с помощью простого .cornerRadius, а также не можете использовать собственные непрерывные углы Apple, поскольку это частный API.

CALayer на iOS 11 обладает частным свойством «Continuous Corners», которое является основой многих закругленных углов в SpringBoard - и, вероятно, больше! Теперь я ревную.

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

Самым близким, что вы можете получить без собственной реализации, является округленный прямоугольный рисунок UIBezierPath, который использует _continuousRoundedRectBezierPath.



1

Брэд Эллис имеет статью с подробным описанием кривых на iPhone X .

[..] Закругленные углы экрана iPhone X не используют классический метод округления, при котором вы перемещаетесь по прямой линии, а затем сгибаете дугу, используя один квадрант круга. Вместо этого математика немного сложнее. Обычно называемый сквирлом, склон начинается раньше, но он более пологий.

Вы можете увидеть разницу здесь:

введите описание изображения здесь


1

Следующая строка Objective-C

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

Выполненный в симуляторе iOS 11.0.1 на iPhone X выдает следующий вывод:

<UITraitCollection: ... _UITraitNameDisplayCornerRadius = 39.000000>

Похоже, в какой-то момент кто-то из Apple подумал, что радиус угла равен 39 точкам. Я думаю, это самый официальный ответ, который мы получим. :-) Но, как объясняют другие ответы, эта информация не очень полезна ...

Еще больше бесполезной информации: некоторые другие симуляторы iOS 11.0 и 11.1 сообщают _UITraitNameDisplayCornerRadius = 0.000000для iPhone без закругленных углов (например, см. Этот вопрос SO ), но симулятор для iOS 12.2 не включает _UITraitNameDisplayCornerRadiusсвойство в вывод журнала для UITraitCollection, как и настоящий iPhone X под управлением iOS 11.2.1. Я предполагаю, что они удалили это свойство из вывода журнала в iOS 11.2 или около того.

PS: я думаю, это не имеет значения, но я получил эти результаты на Xcode 10.1.


1

Форма углов не может быть описана как дуга. Однако его можно воспроизвести с помощью общедоступного API, поскольку iOS 11. UIBezierPath.init(roundedRect:cornerRadius:)создаст прямоугольник с непрерывными закругленными углами.

Источник: https://medium.com/fueled-engineering/continuous-ounded-corners-with-uikit-b575d50ab232

iOS 13 представила явное cornerCurveсвойство на CALayer: https://developer.apple.com/documentation/quartzcore/calayercornercurve

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.