決定的な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で何が起こっているのですか?

回答:


15

iPhone Xのコーナーには決定的なコーナー半径ありません。それらは通常の弧ではなく、「連続した角」です。

単純な.cornerRadiusを使用してこれらを複製することはできません。また、プライベートAPIであるため、Apple独自の連続コーナーを使用することもできません。

iOS 11のCALayerには、プライベートな "continuousCorners"プロパティがあります。これは、SpringBoardの多くの丸みを帯びた角を強化するもので、おそらくそれ以上です。今私は嫉妬しています。

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

独自の実装なしで取得できる最も近いものは、を使用するUIBezierPathの角丸長方形の描画_continuousRoundedRectBezierPathです。


本当にありがとうございました。これは今では非常に理にかなっています
chriscrutt

1

Brad EllisiPhone Xの曲線を詳しく説明した記事を公開しています。

[..] iPhone Xの丸みを帯びた画面の角は、直線で移動し、円の1つの四分円を使用して円弧を描く従来の丸み付け方法を使用しません。代わりに、数学はもう少し複雑です。一般的にはリスと呼ばれ、スロープはより早く始まりますが、より緩やかです。

あなたはここで違いを見ることができます:

ここに画像の説明を入力してください


1

次のObjective-C行

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

iPhone XのiOS 11.0.1シミュレーターで実行すると、次の出力が生成されます。

<UITraitCollection: ... _UITraitNameDisplayCornerRadius = 39.000000>

したがって、ある時点で、Appleの誰かが角の半径が39ポイントだと思ったようです。それが私たちが得る最も公式な答えだと思います。:-)しかし、他の回答が説明するように、その情報はあまり役に立ちません...

さらに役に立たない情報:他のいくつかのiOS 11.0および11.1シミュレーターは_UITraitNameDisplayCornerRadius = 0.000000、角の丸いiPhone についてレポートします(たとえば、このSO質問を参照)。ただし、iOS 12.2のシミュレーターは、のログ出力にプロパティを含ま、実際のiPhone Xも含みません。 iOS 11.2.1を実行している。彼らはこのプロパティをiOS 11.2のログ出力から削除したと思います。_UITraitNameDisplayCornerRadiusUITraitCollection

PS:それは問題ではないと思いますが、Xcode 10.1でこれらの結果を得ました。


1

角の形状は円弧として記述できません。ただし、iOS 11 UIBezierPath.init(roundedRect:cornerRadius:)は角が連続的に丸い長方形を作成するため、パブリックAPIを使用して再現できます。

ソース:https : //medium.com/fueled-engineering/continuous-rounded-corners-with-uikit-b575d50ab232

iOS 13 cornerCurveはCALayerに明示的なプロパティを導入しました:https : //developer.apple.com/documentation/quartzcore/calayercornercurve

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.