w 88%$Ͱొͨ͠ϑϨʔϜϫʔΫ
w "QQMF1FODJMPSࢦͰͷखॻ͖ೖྗΛఆͯͭ͘͠ΒΕ͍ͯΔ
w ؆୯ʹ"QQMF७ਖ਼ͷϝϞΞϓϦ-JLFͳڍಈ͕࣮ݱͰ͖Δ
w J04͔Β৽ػೳ͕Ճ͞ΕɺࠓҰ൪ΛूΊΔϥΠϒϥϦ
ɹʢ৽ػೳʣɹ˞ຊηογϣϯͰ࣌ؒͷؔͰѻ͑ͣ
ɹ4DSJCCMFςΩετϑΟʔϧυʹखॻ͖ͰจࣈΛॻ͘ͱɺςΩετσʔλͱͯ͠ೝࣝ͞ΕΔ
ɹ1,4USPLFखॻ͖ͷيಓ͕औಘͰ͖Δ
Slide 22
Slide 22 text
ࠓҰ൪ΛूΊΔϥΠϒϥϦ
Slide 23
Slide 23 text
1FODJM,JUͰ
Ͱ͖Δ͜ͱͰ͖ͳ͍͜ͱ
Slide 24
Slide 24 text
Ͱ͖Δ͜ͱ
w "QQMF७ਖ਼ͷϝϞΞϓϦͷ6*Λ࣮ݱ͢Δ
w $BOWBT
w 5PPM1JDLFSVOEPSFEP
ϖϯফ͠ΰϜఆن
৭มߋ
w 1,%SBXJOHͱ6**NBHF%BUBܕͷ૬ޓมΛ͢Δ
w ࢦͱ"QQMF1FODJMͷλονΛࣝผ͢Δ
ɹʢͨͩ͠BMMPXT'JOHFS%SBXJOH͕J04͔Β%FQSFDBUFEʹͳ͍ͬͯΔʣ
w %FMFHBUFϝιουܦ༝ͰESBXJOHͷมߋɺ
5PPM1JDLFSͷ༻ͷTUBSUFOEΛݕ͢Δ
Slide 25
Slide 25 text
Ͱ͖ͳ͍͜ͱ
w 6*ͷΧελϚΠζ
w 5PPM1JDLFS Ͱݻఆ
w "QQMF७ਖ਼ϝϞʹͳ͍ػೳͷՃ
w ͨͱ͑ʮృΓ௵͕ͭ͘͠Γ͍ͨʯͱࢥͬͯɺ
ɹ֦ுੑͳ͍ͷͰɺશʹผݸͰͭ͘Δඞཁ͕͋Δ
ͨͬͨ3ߦͷίʔυͰ PencilKit Λಋೖͯ͠ Apple Pencil ରԠ(https://qiita.com/niwasawa/items/d8e239cd23666c750a2f)
Slide 32
Slide 32 text
&BTZUPVTF
Slide 33
Slide 33 text
1,%SBXJOHͷѻ͍ํ
Slide 34
Slide 34 text
1,%SBXJOHͷجຊ
w ෦ߏṖ
w 1,$BOWBT7JFXͷΠϯϓοτΞτϓοτશͯ1,%SBXJOHܕܦ༝ͱͳΔ
w 6**NBHFʹϝιουҰൃͰมՄೳ
ɹˠނʹଞΞϓϦͱͷڞ༗ҙ֎ͱָͩͬͨ
w EBUB3FQSFTFOUBUJPO
Ͱ%BUBܕʹҰൃͰมՄೳ
w CPVOETΛ͍࣋ͬͯͯɺ$BOWBT7JFXͷαΠζͱผݸʹࣗͷαΠζΛ࣋ͭ
Slide 35
Slide 35 text
%BUBͰͦͷ··อଘ͢Δͷѱख
w 1,%SBXJOH͕ෳʹͳΔͱɺ%BUBͩͱϝλσʔλΛѻ͍Εͳ͍
ʢFYʣॱংɺඳ͍ͨ࣌ɺछྨͳͲ
w ެࣜαϯϓϧͩͱҰݸט·͍ͤͯͨͷͰɺͦΕʹͳΒͬͨ
struct DataModel: Codable {
/// Names of the drawing assets to be used to initialize the data model the first time.
static let defaultDrawingNames: [String] = ["Notes"]
/// The width used for drawing canvases.
static let canvasWidth: CGFloat = 768
/// The drawings that make up the current data model.
var drawings: [PKDrawing] = []
var signature = PKDrawing()
}
Slide 36
Slide 36 text
J04ΞϓϦؒͳΒ1,%SBXJOHͤΔʁ
ʢະ֬ೝʣ
w ݁ہڞ༗͢Δࡍ6**NBHFͰ࿈ܞ͍ͯ͠Δ
w ͠ڞ༗ઌͷΞϓϦ1FODJM,JU͍ͬͯͨΒɺ
ɹ1,%SBXJOHΛͯ͠ɺڞ༗ઌͷΞϓϦͰฤूΛܧଓͰ͖Δʁ
w 6*"DUJWJUZ7JFX$POUSPMMFSͷBDUJWJUZ*UFN"OZͳͷͰɺ
ɹޓ͍ͷΞϓϦͷܕೝ͕ࣝ߹͍ͬͯΕड͚͠Ͱ͖ͦ͏ͳؾ͕͢Δ
w ͠ࢼͨ͠ํ͕͍ͨΒใ͍ͩ͘͞ʂ
w 1FODJM,JUJ04͔Βొͨ͠ϑϨʔϜϫʔΫ
w J04ͱ͍͑μʔΫϞʔυॳొ
w 1FODJM,JUࣗମ͕μʔΫϞʔυΛߟྀͯ͠ઃܭ͞Ε͍ͯΔ
w ނʹಛʹࢦఆ͠ͳͯ͘ͳΜ্͔ख͍͜ͱͬͯ͘ΕΔ
Slide 43
Slide 43 text
͔͠͠໌ࣔతʹࢦఆ͍ͯ͠ͳ͍ͨΊɺ
։ൃऀͷҙਤ͠ͳ͍ڍಈʹͳΔʢͳͬͨʣ
Slide 44
Slide 44 text
ʂʁ
Slide 45
Slide 45 text
Կ͕ى͖ͨʁ
w $PMMFDUJPO7JFXʹԼهͷΑ͏ʹϊʔτΛද͍ࣔͯͨ͠
let drawing = drawings[indexPath.row]
let image = drawing.image(from: drawing.bounds, scale: 1.0)
w දࣔޙʹϥΠτϞʔυμʔΫϞʔυͷΓସ͕͑ى͜Δͱɺ
ɹ৭స͕ߦ͑ͣɺݟ͑ͳ͘ͳͬͯ͠·͏
Slide 46
Slide 46 text
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
if previousTraitCollection?.userInterfaceStyle != traitCollection.userInterfaceStyle {
reload()
}
}
w ରࡦˣ
w ͳ͓ڞ༗ػೳͰόά͕·͍ͩͬͯΔʜʜ
w 1FODJM,JUʹμʔΫϞʔυରԠ͓ͤͰ͖ΔΑ͏Ͱ
ɹ࣮Βͳ͖Ό͍͚ͳ͍͜ͱ͕͋Δ
// MARK: Canvas View Delegate
/// Delegate method: Note that the drawing has changed.
func canvasViewDrawingDidChange(_ canvasView: PKCanvasView) {
hasModifiedDrawing = true
updateContentSizeForDrawing()
}
/// Helper method to set a suitable content size for the canvas view.
func updateContentSizeForDrawing() {
// Update the content size to match the drawing.
let drawing = canvasView.drawing
let contentHeight: CGFloat
// Adjust the content size to always be bigger than the drawing height.
if !drawing.bounds.isNull {
contentHeight = max(canvasView.bounds.height, (drawing.bounds.maxY +
DrawingViewController.canvasOverscrollHeight) * canvasView.zoomScale)
} else {
contentHeight = canvasView.bounds.height
}
canvasView.contentSize = CGSize(width: DataModel.canvasWidth * canvasView.zoomScale, height: contentHeight)
}
˞88%$ͷαϯϓϧΑΓ