58. import PencilKit
extension PKStroke {
func createNewStroke(with transform: CGAffineTransform) -> PKStroke {
let dx = transform.tx
let dy = transform.ty
let resultPoint: [PKStrokePoint] = path.map { p in
return PKStrokePoint(
location: CGPoint(x: (p.location.x + dx), y: (p.location.y + dy)),
timeOffset: p.timeOffset,
size: p.size,
opacity: p.opacity,
force: p.force,
azimuth: p.azimuth,
altitude: p.altitude
)
}
let resultPath = PKStrokePath(controlPoints: resultPoint, creationDate: Date())
var resultStroke = PKStroke(ink: PKInk(ink.inkType, color: ink.color), path: resultPath, transform: .identity)
if let mask = mask {
mask.apply(transform)
resultStroke.mask = mask
}
return resultStroke
}
}
59. 올가미로 잡은 PKStroke에 transform 적용
transform 된 PKStroke 생성
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke을
PKDrawing에서 분리
Changed
Ended
새로운 PKStroke을 PKCanvasView의
PKDrawing에 반영
61. UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke에 transform 적용
transform 된 PKStroke 생성
올가미로 잡은 PKStroke을
PKDrawing에서 분리
⚠ 랜더링 병목 발생!
새로운 PKStroke을 PKCanvasView의
PKDrawing에 반영
Changed
Ended
64. UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke을 PKDrawing에서 분리
Changed
분리한 PKStroke로 새로운 PKDrawing을 생성
새로운 PKDrawing을 이미지로 변환 / 이미지 뷰 생성 (Snapshot)
이미지 뷰를 transform 시킴
transform 된 PKStroke 생성
이미지 뷰 제거
새로운 PKStroke을 PKCansvasView의 PKDrawing에 반영
Ended
65.
66. dragging ?
UIPanGestureRecognizer
Began
Changed
Ended
true false
reset lasso points
append lasso point
draw bezier path
append lasso point
draw bezier path
append lasso point
draw bezier path
captured?
false
reset lasso points
detach captured strokes
Ray casting algorithm
move uiviews
move image view (strokes)
attach captured strokes
detach image view
Ray casting algorithm
attach image view
67. attach image view
false
detach captured strokes
move uiviews
move image view (strokes)
attach captured strokes
detach image view
dragging ?
UIPanGestureRecognizer
Began
Changed
Ended
true
reset lasso points
append lasso point
draw bezier path
append lasso point
draw bezier path
captured?
false
reset lasso points
Ray casting algorithm
Ray casting algorithm
append lasso point
draw bezier path
68. append lasso point
draw bezier path
Ray casting algorithm
true
reset lasso points
append lasso point
draw bezier path
append lasso point
draw bezier path
captured?
false
reset lasso points
false
detach captured strokes
move uiviews
move image view (strokes)
attach captured strokes
detach image view
dragging ?
UIPanGestureRecognizer
Began
Changed
Ended
Ray casting algorithm
attach image view