56.
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke을
PKDrawing에서 분리
Changed
Ended
올가미로 잡은 PKStroke에 transform 적용
transform 된 PKStroke 생성
57.
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
}
}
58.
올가미로 잡은 PKStroke에 transform 적용
transform 된 PKStroke 생성
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke을
PKDrawing에서 분리
Changed
Ended
새로운 PKStroke을 PKCanvasView의
PKDrawing에 반영
60.
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke에 transform 적용
transform 된 PKStroke 생성
올가미로 잡은 PKStroke을
PKDrawing에서 분리
⚠ 랜더링 병목 발생!
새로운 PKStroke을 PKCanvasView의
PKDrawing에 반영
Changed
Ended
61.
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke을 PKDrawing에서 분리
분리한 PKStroke로 새로운 PKDrawing을 생성
새로운 PKDrawing을 이미지로 변환 / 이미지 뷰 생성 (Snapshot)
63.
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke을 PKDrawing에서 분리
Changed
분리한 PKStroke로 새로운 PKDrawing을 생성
새로운 PKDrawing을 이미지로 변환 / 이미지 뷰 생성 (Snapshot)
이미지 뷰를 transform 시킴
transform 된 PKStroke 생성
이미지 뷰 제거
새로운 PKStroke을 PKCansvasView의 PKDrawing에 반영
Ended
64.
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
65.
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
66.
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
Los recortes son una forma práctica de recopilar diapositivas importantes para volver a ellas más tarde. Ahora puedes personalizar el nombre de un tablero de recortes para guardar tus recortes.
Crear un tablero de recortes
Compartir esta SlideShare
¿Odia los anuncios?
Consiga SlideShare sin anuncios
Acceda a millones de presentaciones, documentos, libros electrónicos, audiolibros, revistas y mucho más. Todos ellos sin anuncios.
Oferta especial para lectores de SlideShare
Solo para ti: Prueba exclusiva de 60 días con acceso a la mayor biblioteca digital del mundo.
La familia SlideShare crece. Disfruta de acceso a millones de libros electrónicos, audiolibros, revistas y mucho más de Scribd.
Parece que tiene un bloqueador de anuncios ejecutándose. Poniendo SlideShare en la lista blanca de su bloqueador de anuncios, está apoyando a nuestra comunidad de creadores de contenidos.
¿Odia los anuncios?
Hemos actualizado nuestra política de privacidad.
Hemos actualizado su política de privacidad para cumplir con las cambiantes normativas de privacidad internacionales y para ofrecerle información sobre las limitadas formas en las que utilizamos sus datos.
Puede leer los detalles a continuación. Al aceptar, usted acepta la política de privacidad actualizada.