問題タブ [uibezierpath]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - UIBezierPath の消しゴム
iPad アプリでのフリーハンド描画に UIBezierPath を使用しています。uibezierpathに消しゴムを適用したい。
ただし、パス内の図面のみを消去したいです。背景に他の要素があるため、パスの色を背景色として使用できません。
以下は、フリーハンドの図面を作成する方法です。
ios - UIBezierPathとCoreGraphicsを使用したフリーハンドのペイントと消去
私は多くのことを試みてきましたが、まだ解決策が見つかりません。iOSでペイントと消去を実装する必要があるため、を使用してペイントロジックを正常に実装しましたUIBezierPath
。問題は、消去の場合、を使用してペイントの場合と同じロジックを実装したkCGBlendModeClear
ことですが、問題は、消去された領域に再描画できないことです。これは、drawRectの各パスで、ペイントパスと消去パスの両方をストロークする必要があるためです。とにかく、描画パスから消去パスを差し引いて、結果のパスを取得し、それをストロークすることができます。私はCoreGraphicsを初めて使用し、返信とコメントを楽しみにしています。または、同じものを実装するための他のロジック。背景にテクスチャがあるため、消しゴムを背景色として使用できません。
ios - UIBezierPath配列レンダリングの問題(最適化のためにCGLayerRefを使用する方法)
友達、私はUIBezierPathsを使ってフリーハンドで描画していますが、すべてが正常に機能します。これにより、パスをパス配列に格納し、すべてが正常に機能します。レンダリング中は、配列全体をループしてパスをレンダリングしますが、すぐに配列数が増えると、描画中にラグが発生します。以下は私のdrawRectコードです。私がどこで間違っているのかを見つけるのを手伝ってください
@borrrdenによる以下の議論に従って更新されたコード
よろしくランジット
iphone - SVG ファイルから取得したベジエ曲線の整列
そのため、現在、 TBXMLを使用して SVG XML ファイルを解析し、「g」パス命令を取り除くUIView のサブクラスに取り組んでいます。次に、これらの一連の命令をSvgToBezier (入力としてパス命令を受け取り、UIBezierPath オブジェクトを返す単純なパーサー) に渡します。次に、drawRect メソッドでそれらを描画します。
パスは正常にレンダリングされますが、問題は、パスが想定どおりに整列していないことです (Google chrome、adobe illustrator などで表示される方法)。
SVGKit ライブラリを使用すると複雑な svg ファイルを解析できることは知っていますが、関連する概念の理解を深めるために、これを自分で作成したいと考えています。
まず、drawRect メソッドを示し、次に SVG ファイルの例を示します。これは予想される出力であり、iPhone で 300x300 の長方形に描画された実際の出力です。
これが生のSVGです
予想される描画結果は次のとおりです
そして、これが実際のiPhone出力です(iOSシミュレーターのスクリーンショット)
私はあらゆる種類の計算と CGAffineTransforms を試してきました.. 物事を混乱させるだけなので、コードからすべてを残しました。
助けてくれてありがとう!
乾杯
EDIT:問題の矛盾(一貫性?)を説明するために、別のケースを含めます。
iphone - UIBezierPath:ビューのスクリーンショットの誤った取得
次のようにスクリーンショットを撮っています。
UIViewでは、を使用してパスを描画していますUIBezierPath
。
私が取得しているスクリーンショットは、このように正しくありません
なぜ上部が空白にカットされているのか、何か考えはありますか?UIViewでは、すべての図面が正しく表示されます。
UIBezierPath
更新:これは、ブラシを離してスクリーンショットを取得するときに長いパスを描画すると、スクリーンショットが正しく取得されるときに発生します。
ios - ベジエ曲線を使用してらせんを描く
これは iPad アプリケーション用ですが、基本的には数学の問題です。
線幅が変化する (単調に増加する) 円弧を描く必要があります。曲線の始点では、最初の太さ (2 ポイントとしましょう) を持ち、弧の終点で最大の太さ (12 ポイントとしましょう) になるまで、太さは滑らかに増加します。
これを作成する最善の方法は、UIBezierPath を作成して形状を塗りつぶすことです。私の最初の試みは、2 つの円弧 (中心がずれている) を使用することでした。これは 90° までは問題なく動作しましたが、円弧は多くの場合 90° から 180° の間になるため、この方法ではうまくいきません。
私の現在のアプローチは、ベジェ クワッドまたはキュービック カーブを使用して、わずかならせん (円弧からわずかに成長し、もう 1 つがわずかに縮小する) を作成することです。問題は、円弧からの偏差 (別名、形状の「厚さ」) が必要な値になるように、コントロール ポイントをどこに配置するかです。
制約:
- 形状は、任意の角度 (互いに 180° 以内) で開始および終了できる必要があります。
- 形状の「厚さ」(円からの偏差) は、指定された値で開始および終了する必要があります
- 「厚さ」は単調に増加する必要があります(大きくなってから再び小さくなることはできません)
- 滑らかに見える必要があります。急な曲がりがあってはなりません。
私は他のソリューションにもオープンです。
ios - インタラクションを中断することなく、丸い角を UIView に追加します。
この回答はうまく機能します.UITableViewの上部のみに角丸を追加しますか? ただし、UIBarButtonItems はクリックできなくなりました。私の推測では、マスクがボタンの上に置かれ、インタラクションが壊れていると思います。
ビューの残りの部分に干渉することなくこれを実装するアイデアはありますか?
ios - コア データを使用した UIBezierPath の永続性
ユーザーが指で画面に描画できるアプリケーションに取り組んでいます。これには UIBezierPath を使用しています。複数の BezierPath オブジェクトを含む NSArray であるこのデータを保持する必要があります。これについて最善の方法は何ですか?coredata に保存し、NSData を使用してファイルに保存しますか? とても感謝しております。
core-animation - CALayer パスを使用した CABasicAnimation がアニメーション化されない
通常のコーナーから丸みを帯びたコーナーへの CALayer の遷移をアニメーション化しようとしています。上部の角だけを丸めたいので、UIBezierPath を使用しています。コードは次のとおりです。
しかし、これを実行すると、角が丸くなりますが、アニメーションはありません-それは即座に起こります. ここSOで同様の質問をいくつか見ましたが、問題は解決しませんでした。
CALayer の shadowPath プロパティをアニメーション化する
私は問題を引き起こしている小さなことを間違っているだけだと確信していますが、私の人生ではそれを理解することはできません.
解決:
実際に必要だったのは、アニメーションに適切な「from」値を設定することだけでした。
objective-c - UIBezierPath の独立したコピーを作成しますか?
複雑な UIBezierCurve があり、特定の線パラメーターを使用して一度描画し、他の線パラメーターを使用してオーバーレイとして再度描画する必要がありますが、曲線の最後の部分を前のものよりもわずかに短くする必要があります。
これを行うには、最後の部分までで曲線を作成しaddLineToPoint:
、moveToPoint:
この曲線のコピーを作成して、元の曲線とコピーされた曲線で異なる線の最終セグメントを追加します。次に、元のカーブとコピーしたカーブをストロークします。
問題は、期待どおりに機能しないことです。次の方法で曲線のコピーを作成します。
その後、originalCurve で行った描画が copyCurve にも適用されるため、この曲線を個別に描画することはできません。
オリジナルとコピーの間のこの接続の理由は何ですか?どうすればそれを取り除くことができますか?
EDIT 1:私が見つけた解決策は、次の方法でコピーを作成することです:
これは適切に機能するため、取得したコピーの不変性に問題がある可能性があります