Slide 1

Slide 1 text

4UPSZCPBSE೿͕ ίʔυͰॻ͘ͱ͜͏ͳΔ גࣜձࣾ"NB[JB೔޲ڧ

Slide 2

Slide 2 text

ࣗݾ঺հ w ೔޲ڧʢ5TVZPTIJ)ZVHBʣ w J1IPOF04ʙ w "OESPJE%POVUʙ w UW04ʙ

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

4UPSZCPBSE೿Ͱ͢

Slide 5

Slide 5 text

͚ͲɺίʔυͰ͔ॻ͔ͳ͍ͱ ͍͚ͳ͍࣌ͬͯ͋Γ·͢ΑͶ

Slide 6

Slide 6 text

ίʔυͰॻ͘

Slide 7

Slide 7 text

class TmpViewController: UIViewController { let label = UILabel() let button = UIButton() override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white label.text = "Hello World" button.setTitle("button", for: .normal) view.addSubview(label) view.addSubview(button) } }

Slide 8

Slide 8 text

͜ͷॻ͖ํͩͱɺ 4UPSZCPBSEͰग़དྷͨ ࢖͍ํ͕Ͱ͖ͳ͍

Slide 9

Slide 9 text

ྫɿ஍ҬΛλοϓͯ͠ ৘ใΛදࣔ͢Δ ೔ຊ஍ਤΞϓϦͷ৔߹

Slide 10

Slide 10 text

/BWJHBUJPO

Slide 11

Slide 11 text

.PEBM ด͡ΔϘλϯ͕ඞཁʂ

Slide 12

Slide 12 text

'PSN4IFFU ਖ਼ํܗͳͷͰɺ ԭೄΛผ࿮ʹͨ͠ σβΠϯʹ͍ͨ͠ʂ

Slide 13

Slide 13 text

UW04 Ϙλϯʹ͸57$BQUJPO#VUUPO7JFXΛ࢖͍͍ͨʂ

Slide 14

Slide 14 text

4UPSZCPBSEͷ৔߹ w ͜ΕΒશͯͷ7JFXʹରͯ͠ಉ Ұͷ7JFX$POUSPMMFSΛׂΓ౰ ͯΔ͜ͱͰɺ7JFX$POUSPMMFS ͸ॲཧ͚ͩʹઐ೦͢Δ͜ͱ͕ Ͱ͖Δ

Slide 15

Slide 15 text

͜Ε͕ࠔΔΑίʔυϕʔε w 7JFX$POUSPMMFSʹ7JFXͷσβΠϯΛ͍ͯ͠Δ w ʮσβΠϯ͕ҧ͏͚ͩͰɺ΍Δ͜ͱ͸ಉ͡ʯͳ 7JFX$POUSPMMFSΛԿݸ΋༻ҙͨ͠Γɺϝϯςφϯε͠ ͍͔ͯͳ͍ͱ͍͚ͳ͍ w ͍ͨ΁Μ

Slide 16

Slide 16 text

4UPSZCPBSEͱಉ༷ͷ͜ͱ͕ Ͱ͖Δ 7JFX$POUSPMMFSΛ࡞Δ

Slide 17

Slide 17 text

7JFX'BDUPSZύλʔϯ ʢԾশʣ

Slide 18

Slide 18 text

protocol CodeViewFactoryOwner: class { var titleLabel: UILabel! { get set } var captionLabel: UILabel! { get set } var imageView: UIImageView! { get set } } class CodeViewFactory: CodeViewFactoryType { func create(owner:CodeViewFactoryOwner) -> UIView { return MyCodeView(owner: owner, frame: .zero) } } class MyCodeView: UIView { init(owner:CodeViewFactoryOwner, frame: CGRect) { super.init(frame: frame) self.backgroundColor = .white let imageView = UIImageView() let titleLabel = UILabel() let captionLabel = UILabel() let button = UIButton(type: .system) button.setTitle("Play", for: .normal) button.addTarget(owner, action: Selector(("clickPlay:")), for: .touchUpInside) self.addSubview(imageView) self.addSubview(titleLabel) self.addSubview(captionLabel) self.addSubview(button) owner.imageView = imageView owner.captionLabel = captionLabel owner.titleLabel = titleLabel } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } }

Slide 19

Slide 19 text

7JFX'BDUPSZύλʔϯ w ֤छ6*ύʔπΛ࣋ͬͨ0XOFSϓϩτίϧΛ࡞੒͢Δ w 7JFX'BDUPSZ͸0XOFSϓϩτίϧΛड͚औΓɺ7JFXͷ࡞੒ Λߦ͏ w 0XOFSʹ֤छ6*ύʔπΛ౉͢ w #VUUPOͳͲͷBEE5BSHFUઌʹ0XOFSΛ౉͢ w μʔΫϞʔυ΍4J[FDMBTTFTʹରԠ͢Δ৔߹ɺద౰ͳ6*7JFX ܧঝΫϥεΛ࡞ΓɺUSBJU$PMMFDUJPO%JE$IBOHF౳Ͱௐ੔

Slide 20

Slide 20 text

class CodeViewController: UIViewController,CodeViewFactoryOwner { @IBOutlet weak var titleLabel: UILabel! @IBOutlet weak var captionLabel: UILabel! @IBOutlet weak var imageView: UIImageView! private let viewFactory:CodeViewFactoryType? init(viewFactory:CodeViewFactoryType) { self.viewFactory = viewFactory super.init(nibName: nil, bundle: nil) } required init?(coder aDecoder: NSCoder) { viewFactory = nil super.init(coder: aDecoder) } override func loadView() { if let viewFactory = viewFactory { view = viewFactory.create(owner: self) } else { super.loadView() } } @IBAction func clickPlay(_ sender: Any) { } }

Slide 21

Slide 21 text

7JFX'BDUPSZύλʔϯ 7JFX$POUSPMMFSฤ w 7JFX$POUSPMMFSΛ0XOFSϓϩτίϧʹద߹ͤ͞Δ w 7JFX$POUSPMMFSͰૢ࡞͍ͨ͠7JFXΛXFBLWBSͰϓϩύςΟఆٛ w ͔ͤͬ͘ͳͷͰɺ!*#0VUMFU΋͚ͭΔ w 7JFX͔Βड͚औΔΞΫγϣϯΛGVODఆٛ w ͔ͤͬ͘ͳͷͰɺ!*#"DUJPO΋͚ͭΔ w JOJU࣌ʹ೚ҙͷ7JFX'BDUPSZΛड͚औΔ w MPBE7JFX ͰɺTFMGWJFXʹ7JFX'BDUPSZ͔Β࡞ͬͨ7JFXΛׂΓ౰ͯΔ

Slide 22

Slide 22 text

7JFX'BDUPSZύλʔϯ ϝϦοτ w 7JFX$POUSPMMFS͕7JFXͷίʔυͰ๲Β·ͳ͍ w ෼ذͱ͔JT)JEEFOͱ͔࡞Βͳ͍͍ͯ͘ w 7JFX$POUSPMMFSΛ৭ʑͳγʔϯͰ࢖͍·ΘͤΔ w 7JFX$POUSPMMFS͕ɺͲ͏͍͏7JFXσβΠϯʹͳ͍ͬͯΔ͔ؾʹ͠ͳͯ͘ ͍͍ w 6*#VUUPOͩΖ͏ͱɺ57$BQUJPO#VUUPO7JFXͩΖ͏ͱɺΠϯλϥΫ γϣϯΛॲཧ͢Δ͚ͩ w ίʔυϕʔεͱ9JCϕʔεͱ4UPSZCPBSEϕʔεΛ؆୯ʹ੾Γସ͑ΒΕΔ

Slide 23

Slide 23 text

9JCͷ৔߹ͷ7JFX'BDUPSZྫ class XibViewFactory: CodeViewFactoryType { func create(owner:CodeViewFactoryOwner) -> UIView { let nib = UINib(nibName: "CodeXibView", bundle: nil) let xibview = nib.instantiate(withOwner: owner, options: nil) return xibview.first as! UIView } } ˞YJCϑΝΠϧͷ'JMF`TPXOFSͷ$MBTTʹ7JFX$POUSPMMFSΛׂΓ౰͓ͯͯ͘͜ ͱ

Slide 24

Slide 24 text

4UPSZCPBSEͷ৔߹ override func loadView() { if let viewFactory = viewFactory { view = viewFactory.create(owner: self) } else { super.loadView()// ←͜͜ } } 4UPSZCPBSEͷ৔߹ɺWJFX'BDUPSZ͸OJMͳͨΊɺ4UPSZCPBSEͷઃఆͰ6*͕ ߏங͞ΕΔ

Slide 25

Slide 25 text

·ͱΊ w 4UPSZCPBSEͱಉ͡ײ͡Ͱ7JFX7JFX$POUSPMMFSΛ࡞Γͨ ͍৔߹ɺ w 7JFX$POUSPMMFSͷ֎͔Β7JFXΛJOKFDU͢Δ w ΧελϜ7JFX͸ɺMPBE7JFX ͰɺTVQFSMPBE7JFX Λݺ͹ͣʹTFMGWJFXʹઃఆ͢Δ w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPO VJLJUVJWJFXDPOUSPMMFSMPBEWJFX

Slide 26

Slide 26 text

if #available(iOS 13.0, *) { self.backgroundColor = .systemBackground } else { self.backgroundColor = .white } Ͱ΋ɺ͜͏͍͏04ؒͷΘͣΒΘ͠͞Λແͨ͘͢Ίʹ΋ɺ 4UPSZCPBSE༗ޮͰ͢Αɻ ʢ4UPSZCPBSE্Ͱ4ZTUFN#BDLHMPVE$PMPSΛઃఆ͢Δ͚ͩͰ શͯͷ04ʹରԠͰ͖Δʣ

Slide 27

Slide 27 text

גࣜձࣾ"NB[JBͰ͸ ΤϯδχΞΛืू͍ͯ͠·͢ IUUQTBNB[JBDPKQDBSFFS