0

この WWDC セッションとそのサンプル プロジェクトを見てきました: https://developer.apple.com/documentation/pencilkit/inspecting_modifying_and_constructing_pencilkit_drawings

ただし、描画キャンバスに CGPoints をプロットしようとすると、何も表示されません。

これが私のセットアップです:

var points: [CGPoint] = []
(500...1000).forEach { x in
    (500...1000).forEach { y in
        points.append(CGPoint(x: x, y: y))
    }
}
let strokePoints = points.map {
    PKStrokePoint(location: $0, timeOffset: 0, size: CGSize(uniform: 1), opacity: 2, force: 1, azimuth: 1, altitude: 1)
}
let strokePath = PKStrokePath(controlPoints: strokePoints, creationDate: Date())
let stroke = PKStroke(ink: PKInk(.pen, color: .systemGreen), path: strokePath)
canvasView.drawing = PKDrawing(strokes: [ stroke ])
4

1 に答える 1

0

問題はストロークの大きさにあると考えました。これはうまくいきます:

PKStrokePoint(location: point, timeOffset: 0, size: CGSize(uniform: 3), opacity: 1, force: 0, azimuth: 0, altitude: 0)

少なくとも 3 である必要があることに注意してください。1 の場合は非表示、2 の場合は半透明です。これは画面のスケール (私の iPad Pro の ) とは関係ないように見えるUIScreen.main.scale = 2.0ので、1 つのピクセルを表すために 3 にハードコーディングしました。


この結果を得るために、鉛筆を使用して画面上に 1 つのピクセルを描画し、その内容をログに記録しました。これにより、次のパラメーターが示されました。

▿ PencilKit.PKStrokePoint
  - strokePoint: <PKStrokePoint: 0x600001ad8f60 location={445, 333.5} timeOffset=0.000000 size={3.084399938583374, 3.084399938583374} opacity=0.999985 azimuth=-3.141593 force=0.000000 altitude=1.570796> #0
    - super: NSObject

そこで、これらの値 (サイズ、不透明度、方位角、力、高度) をいじってみたところ、サイズと不透明度以外は重要ではないことがわかりました。そのため、コードでそれらをすべてゼロ値として設定しました。

于 2021-12-08T11:35:33.403 に答える