Slide 1

Slide 1 text

Re:valua t ion https://fril.jp/ L ead & Delight User F irst Ownership Fail Smart J047JFXΫϥεઃܭجຊ .BZ BU4XJGUѪ޷ձWPM

Slide 2

Slide 2 text

.PCJMF&OHJOFFS 3BLVUFO JOD "CPVU.F EBSRVSP :VLJ,VSPEB !EBSRVSP !EBSRVSP

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

ࠓ೔ͷςʔϚΛߟ͑ͨཧ༝

Slide 5

Slide 5 text

5BCMFPG$POUFOUT w 7JFXͷΫϥεઃܭʹ͓͚Δجຊ w ΧελϜ7JFXΛ࡞Δ্Ͱͷ5JQT

Slide 6

Slide 6 text

Slide 7

Slide 7 text

࣮૷ํ๏ " 4UPSZCPBSE7JFX$POUSPMMFS

Slide 8

Slide 8 text

࣮૷ํ๏ " 4UPSZCPBSE7JFX$POUSPMMFS 'BU7JFX$POUSPMMFS # 4UPSZCPBSE7JFX$POUSPMMFS 9*#7JFX

Slide 9

Slide 9 text

"UPNJD%FTJHO

Slide 10

Slide 10 text

"UPNJD%FTJHO w 6*σβΠϯʹ͓͚Δߟ͑ํ w ύʔπɺίϯϙʔωϯτΛ ࠷খ୯Ґ ݪࢠʣ͔Βߟ͑Δ IUUQBUPNJDEFTJHOCSBEGSPTUDPN

Slide 11

Slide 11 text

"UPNJD%FTJHO IUUQBUPNJDEFTJHOCSBEGSPTUDPN ݪࢠ ෼ࢠ ༗ػ෺ ςϯϓϨʔτ ϖʔδ

Slide 12

Slide 12 text

"UPNJD%FTJHO 8BOUFEMZ5FDI#PPL ୈষJ04Ͱ࣮૷͢Δ"UPNJD%FTJHO IUUQTXXXXBOUFEMZDPNDPNQBOJFTXBOUFEMZQPTU@BSUJDMFT

Slide 13

Slide 13 text

"UPNJD%FTJHO

Slide 14

Slide 14 text

"UPNJD%FTJHO "UPNT ʢݪࢠʣ .PMFDVMFT ʢ෼ࢠʣ 0SHBOJTNT ʢ༗ػ෺ʣ ૹྉࠐΈ

Slide 15

Slide 15 text

"UPNJD%FTJHO 1BHFT ʢϖʔδʣ 5FNQMBUFT ʢςϯϓϨʔτʣ YYYY YYYY YYYY YYYY YYYY YYYY YYYY YYYY = YYY YYYYYYYYYYYYYYY YYY YYY YYYYYYYYYYYYYYY

Slide 16

Slide 16 text

.PMFDVMFTʢ෼ࢠʣ .PMFDVMFTʢ෼ࢠʣ w 6**NBHF7JFX ݪࢠ ͱ
 6*-BCFM ݪࢠ ͕ਫฏʹฒͼɺ
 ؙ֯ͷ࿮ઢ ݪࢠ Λ࣋ͭ7JFX
 
 3PVOEFE$PSOFS8JUI*DPO-BCFM

Slide 17

Slide 17 text

0SHBOJTNTʢ༗ػ෺ʣ 0SHBOJTNTʢ༗ػ෺ʣ w ෳ਺ͷ 3PVOEFE$PSOFS8JUI*DPO-BC FM ෼ࢠ Λ
 ഑ஔ͢Δ͜ͱ͕Ͱ͖Δ7JFX

Slide 18

Slide 18 text

5FNQMBUFTʢςϯϓϨʔτʣ 5FNQMBUFTʢςϯϓϨʔτʣ w Ͳ͜ΛมߋՄೳͱͳΔͷ͔ w ΞΠίϯදࣔඇදࣔɺ৭ w ςΩετ৭ɺαΠζ w ࿮ઢ༗ແɺଠ͞ɺ৭ w എܠ৭ YYY YYY YYY

Slide 19

Slide 19 text

͜͜·Ͱͷ·ͱΊ

Slide 20

Slide 20 text

͜͜·Ͱͷ·ͱΊ w 'BU7JFX$POUSPMMFSΛͳͨ͘ΊʹɺΧελϜ7JFXͰ ίʔυ෼཭͠Α͏ w "UPNJD%FTJHOΛࢀߟʹ͠ͳ͕Βɺ7JFXΫϥεઃܭ Λߟ͑Α͏

Slide 21

Slide 21 text

͜͜·Ͱͷ·ͱΊ w ΞϓϦέʔγϣϯΛ࡞Δ্ͰͷҰൠతͳઃܭཧ࿦ w ΞʔΩςΫνϟʔ .7$ .71 .77. $MFBO "SDIJUFDUVSF 3FEVY FUDʜ w σβΠϯύλʔϯ 'BDUPSZ 1SPUPUZQF 4JOHMFUPO 0CTFSWFS FUDʜ

Slide 22

Slide 22 text

͜͜·Ͱͷ·ͱΊ w ΞϓϦέʔγϣϯΛ࡞Δ্ͰͷҰൠతͳઃܭཧ࿦ w ΞʔΩςΫνϟʔ .7$ .71 .77. $MFBO "SDIJUFDUVSF 3FEVY FUDʜ w σβΠϯύλʔϯ 'BDUPSZ 1SPUPUZQF 4JOHMFUPO 0CTFSWFS FUDʜ ੹຿ͷ෼཭

Slide 23

Slide 23 text

ΧελϜ7JFXΛ࡞Δ্Ͱͷ5JQT

Slide 24

Slide 24 text

ᶃ9*#ͰσβΠϯ͢Δ7JFX

Slide 25

Slide 25 text

ᶃ9*#ͰσβΠϯ͢Δ7JFX extension NibLoadable where Self: UIView { static var nibName: String { return String(describing: self) } static func loadNib(_ bundle: Bundle? = nil) -> UINib { let bundle = bundle ?? Bundle.main return UINib(nibName: nibName, bundle: bundle) } func loadSubviewFromNib() { let nib = Self.loadNib(Bundle(for: type(of: self))) guard let subview = nib.instantiate(withOwner: self, options: nil).first as? UIView else { return } subviews.forEach { $0.removeFromSuperview() } addSubview(subview) setNeedsUpdateConstraints() } func fitConstraintsSubview() { if let contentView = subviews.first { contentView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ contentView.topAnchor.constraint(equalTo: self.topAnchor), contentView.leftAnchor.constraint(equalTo: self.leftAnchor), contentView.rightAnchor.constraint(equalTo: self.rightAnchor), contentView.bottomAnchor.constraint(equalTo: self.bottomAnchor) ]) } } }

Slide 26

Slide 26 text

ᶃ9*#ͰσβΠϯ͢Δ7JFX required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) setup() } override init(frame: CGRect) { super.init(frame: frame) setup() } override func prepareForInterfaceBuilder() { super.prepareForInterfaceBuilder() setup() } private func setup() { loadSubviewFromNib() } override func updateConstraints() { fitConstraintsContentView() super.updateConstraints() }

Slide 27

Slide 27 text

ᶄ!*#%FTJHOBCMFɺ!*#*OTQFDUBCMFΛ࢖͏ @IBDesignable final class RoundedCornerWithIconLabel: UIView { @IBInspectable var cornerRadius: CGFloat = -1 @IBInspectable var borderColor: UIColor = ColorPalette.textGray @IBInspectable var borderWidth: CGFloat = 1 @IBInspectable var text: String = "Label" @IBInspectable var textColor: UIColor = ColorPalette.textGray @IBInspectable var isImageShown: Bool = false @IBInspectable var image: UIImage? @IBInspectable var imageTintColor: UIColor = ColorPalette.textGray

Slide 28

Slide 28 text

ᶄ!*#%FTJHOBCMFɺ!*#*OTQFDUBCMFΛ࢖͏ @IBInspectable var text: String = "Label" { didSet { setText(text) } } private func setText(_ value: String) { label.text = value label.sizeToFit() }

Slide 29

Slide 29 text

ᶅQSFQBSF'PS*OUFSGBDF#VJMEFSΛ࢖͏ required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) setup() } override init(frame: CGRect) { super.init(frame: frame) setup() } override func prepareForInterfaceBuilder() { super.prepareForInterfaceBuilder() setup() } private func setup() { loadSubviewFromNib() setCornerRadius(cornerRadius) setBorderColor(borderColor) setBorderWidth(borderWidth) setImageShown(isImageShown) setImage(image) setImageTintColor(imageTintColor) setTextColor(textColor) setText(text) setTextFontSize(textFontSize) }

Slide 30

Slide 30 text

ᶆMB[ZWBS*OJUJBMJ[BUJPO$MPTVSFΛ࢖͏ @IBDesignable final class ItemDetailItemSalesLabelsContainer: UIView { private lazy var includeCarriageLabel: UIView = { let label = RoundedCornerWithIconLabel(frame: CGRect(x: 0, y: 0, width: 100, height: 20)) label.labelType = ItemDetailItemSalesLabelType.includeCarriage label.backgroundColor = ColorPalette.lightOrange label.borderWidth = 0 label.isImageShown = true label.image = FLFrilIcon.tagIcon(withSize: 14.0) .image(with: CGSize(width: 14.0, height: 14.0)) .withRenderingMode(.alwaysTemplate) label.imageTintColor = ColorPalette.textWhite label.text = "ૹྉࠐΈ" label.textColor = ColorPalette.textWhite label.setContentHuggingPriority(.defaultHigh, for: .horizontal) return label }()

Slide 31

Slide 31 text

ᶇ0QUJPO4FUΛ࢖͏ struct ItemDetailItemSalesLabelOptionSet: OptionSet { let rawValue: UInt8 static let includeCarriage = ItemDetailItemSalesLabelOptionSet(rawValue: 1 << 0) static let excludeCarriage = ItemDetailItemSalesLabelOptionSet(rawValue: 1 << 1) static let anonymousCarriage = ItemDetailItemSalesLabelOptionSet(rawValue: 1 << 2) static let nowAvailable = ItemDetailItemSalesLabelOptionSet(rawValue: 1 << 3) } @IBDesignable final class ItemDetailItemSalesLabelsContainer: UIView { var labelSet: ItemDetailItemSalesLabelOptionSet = [] }

Slide 32

Slide 32 text

͍͞͝ʹ ੹຿ͷ෼཭Λҙࣝͨ͠ઃܭͰɺݎ࿚ͳιʔείʔυΛ໨ ࢦ͠·͠ΐ͏

Slide 33

Slide 33 text

5IBOLZPVGPSMJTUFOJOH