簡體   English   中英

如何從 CGPoints 以編程方式創建 PKDrawing?

[英]How do I create a PKDrawing programmatically, from CGPoints?

我看過這個 WWDC session 及其示例項目: https://developer.apple.com/documentation/pencilkit/inspecting_modifying_and_constructing_pencilkit_drawings

但是,當我嘗試在我的繪圖 canvas 上使用 plot 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 ])

我認為問題出在我的筆畫大小上。 這將起作用:

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 )所以我只是將它硬編碼為 3,以表示單個像素。


為了達到這個結果,我用鉛筆在屏幕上畫了一個像素並記錄了它的內容,它顯示了這些參數:

▿ 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

因此,我使用了這些值(大小、不透明度、方位角、力和高度),並認為除了大小和不透明度之外,這些都無關緊要。 這就是為什么我在我的代碼中將它們全部設置為零值的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM