Swift 4でCAShapeLayerとBezierPathを使用して、2つのポイント(ポイントAとポイントB)が与えられた場合、下の図に示すような曲線をどのようにレンダリングできるのか疑問に思いました。
func drawCurvedLine(start: CGPoint, end: CGPoint) {
//insert code here
}
関連した質問
- [CALayer表示]:偽のレイヤーサイズ(8681000000、35080000000)、contentsScale 3000000、バッキングストアサイズ(26043000000、10524000000)を無視します
- swift 4でGoogleプレイスピッカーに都市名を入力した後、関数が実行されない
- ダイナミックテーブルビューを備えたioSスクロールビュー
- スタック内のView Controllerにデータを戻す方法は?
- SpriteKit Swift:SKViewがnilを返す
- テキスト入力中のテキストフィールドの検証
- ユーザーがログインした後にメニュー項目を変更する
- dateformatで `hh:mm:ss`を設定すると、まれに` 22 - 42:31 am`になります。 「am」は予想外です。どうすれば修正できますか?
- Swift:アイテムを追加するときにUICollectionViewのセルレイアウトの幅を変更する
数学を適用する必要があります。私の見方では、これは異なる半径の2つの円弧で構成されています。 2つのポイントからそれらを計算するのは非常に難しいかもしれませんが、幸いなことに、すでにこれを行うためのarc用のツールがあります。メソッド
addQuadCurve
UIBezierPath
で これにぴったりのようです。2点を入力する必要があります。これは、弧がどの程度バインドされているかと、線の太さの要因です。ベンドファクターを使用して、ケースの2つのポイントの中心からコントロールポイントをどれだけ下に移動するかを決定します。下向きは2つのポイントに関連する可能性があるので、むしろ
normal
を使用しましょう 。私が得たのは次のとおりです:あなたのリクエストに似た形状を取得するために私が使用したデータは(
drawRect
をオーバーライドする 最速でした):負のベンド係数は下向きに曲がることを意味し、残りはかなり直感的です。
編集 4つの曲線から形状を構成することにより、さらに多くの制御を実現できます。
4つの曲線を使用すると、より良い形状を作成できますが、コードは非常に複雑になります。これは私があなたが望むものに近い形を取得しようとしたものです:
CGPoint
を拡張しました 読みやすさのためだけに。これらのメソッドの一部は一般的に意味をなさない可能性があるため、fileprivate
を公開することはありません。 。メソッドの開始時に形状を適切に制御できる2つの要素があり、それらを試すことができます(値
[0.0, 2.0]
の2つのスライダーを追加しました それをスタイルする)。また、デバッグポイントを残しました。これは、コントロールポイントを配置するときに非常に役立ちます。角を丸くすることも非常に良いことですが、現在のコードからはそれを達成できるかどうかわかりません。