From 73e0742a88636de5242b536744642e634d009305 Mon Sep 17 00:00:00 2001 From: loj Date: Sun, 17 Feb 2019 11:51:14 +0100 Subject: [PATCH] added review view --- ZWallet.xcodeproj/project.pbxproj | 28 ++ .../Infrastructure/de.lproj/InfoPlist.strings | 10 + .../Infrastructure/en.lproj/InfoPlist.strings | 10 + ZWallet/Services/ViewFactory.swift | 5 + ZWallet/Storyboards/Review.storyboard | 259 ++++++++++++++++++ .../ViewCoordinators/SendCoordinator.swift | 44 +++ .../Views/Review/ReviewTableViewCell.swift | 27 ++ ZWallet/Views/Review/ReviewVC.swift | 116 ++++++++ ZWallet/Views/Review/ReviewVCDelegate.swift | 19 ++ ZWallet/Views/Review/ReviewViewModel.swift | 17 ++ .../PenBlack.imageset/Contents.json | 16 ++ .../PenBlack.imageset/PenBlack.pdf | 148 ++++++++++ 12 files changed, 699 insertions(+) create mode 100644 ZWallet/Storyboards/Review.storyboard create mode 100644 ZWallet/Views/Review/ReviewTableViewCell.swift create mode 100644 ZWallet/Views/Review/ReviewVC.swift create mode 100644 ZWallet/Views/Review/ReviewVCDelegate.swift create mode 100644 ZWallet/Views/Review/ReviewViewModel.swift create mode 100644 ZWallet/_Assets/Assets.xcassets/PenBlack.imageset/Contents.json create mode 100644 ZWallet/_Assets/Assets.xcassets/PenBlack.imageset/PenBlack.pdf diff --git a/ZWallet.xcodeproj/project.pbxproj b/ZWallet.xcodeproj/project.pbxproj index f2877d2..8879bb0 100644 --- a/ZWallet.xcodeproj/project.pbxproj +++ b/ZWallet.xcodeproj/project.pbxproj @@ -16,6 +16,9 @@ EE07A46C21E29EA4006031C8 /* BaseCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE07A46B21E29EA4006031C8 /* BaseCoordinator.swift */; }; EE07A46E21E3E71B006031C8 /* OnboardingCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE07A46D21E3E71B006031C8 /* OnboardingCoordinator.swift */; }; EE07A47221E3EACE006031C8 /* OnboardingCoordinator.Delegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE07A47121E3EACE006031C8 /* OnboardingCoordinator.Delegate.swift */; }; + EE18769F221611E6004853A7 /* ReviewVCDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE18769E221611E6004853A7 /* ReviewVCDelegate.swift */; }; + EE1876A1221612AE004853A7 /* ReviewViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE1876A0221612AE004853A7 /* ReviewViewModel.swift */; }; + EE1876A322161632004853A7 /* ReviewTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE1876A222161632004853A7 /* ReviewTableViewCell.swift */; }; EE377EB321E5303E00138385 /* ViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE377EB221E5303D00138385 /* ViewFactory.swift */; }; EE377EB521E6821F00138385 /* CreateNewWalletCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE377EB421E6821F00138385 /* CreateNewWalletCoordinator.swift */; }; EE377EB721E6831E00138385 /* CreateNewWalletCoordinator.Delegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE377EB621E6831E00138385 /* CreateNewWalletCoordinator.Delegate.swift */; }; @@ -67,6 +70,8 @@ EE76B85E21D8D1930093571F /* SourceSansPro-ExtraLightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EE76B85121D8D1930093571F /* SourceSansPro-ExtraLightItalic.ttf */; }; EE76B85F21D8D1930093571F /* SourceSansPro-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EE76B85221D8D1930093571F /* SourceSansPro-Italic.ttf */; }; EE94A74C22135B7200882BB1 /* TrxDetailsVCDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE94A74B22135B7200882BB1 /* TrxDetailsVCDelegate.swift */; }; + EE94A7502214B52900882BB1 /* ReviewVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE94A74F2214B52900882BB1 /* ReviewVC.swift */; }; + EE94A7512214B6C500882BB1 /* Review.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EE94A74D2214AA2100882BB1 /* Review.storyboard */; }; EEBEBB7521FF8DC800A6BD18 /* RecipientAddressVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEBEBB7421FF8DC800A6BD18 /* RecipientAddressVC.swift */; }; EEBEBB7721FF91B700A6BD18 /* RecipientAddressDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEBEBB7621FF91B700A6BD18 /* RecipientAddressDelegate.swift */; }; EEBEBB7821FF97AC00A6BD18 /* RecipientAddress.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EEBEBB7221FF8B6D00A6BD18 /* RecipientAddress.storyboard */; }; @@ -111,6 +116,9 @@ EE07A46B21E29EA4006031C8 /* BaseCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseCoordinator.swift; sourceTree = ""; }; EE07A46D21E3E71B006031C8 /* OnboardingCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingCoordinator.swift; sourceTree = ""; }; EE07A47121E3EACE006031C8 /* OnboardingCoordinator.Delegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingCoordinator.Delegate.swift; sourceTree = ""; }; + EE18769E221611E6004853A7 /* ReviewVCDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewVCDelegate.swift; sourceTree = ""; }; + EE1876A0221612AE004853A7 /* ReviewViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewViewModel.swift; sourceTree = ""; }; + EE1876A222161632004853A7 /* ReviewTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewTableViewCell.swift; sourceTree = ""; }; EE377EB221E5303D00138385 /* ViewFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewFactory.swift; sourceTree = ""; }; EE377EB421E6821F00138385 /* CreateNewWalletCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateNewWalletCoordinator.swift; sourceTree = ""; }; EE377EB621E6831E00138385 /* CreateNewWalletCoordinator.Delegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateNewWalletCoordinator.Delegate.swift; sourceTree = ""; }; @@ -165,6 +173,8 @@ EE76B85121D8D1930093571F /* SourceSansPro-ExtraLightItalic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SourceSansPro-ExtraLightItalic.ttf"; sourceTree = ""; }; EE76B85221D8D1930093571F /* SourceSansPro-Italic.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SourceSansPro-Italic.ttf"; sourceTree = ""; }; EE94A74B22135B7200882BB1 /* TrxDetailsVCDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrxDetailsVCDelegate.swift; sourceTree = ""; }; + EE94A74D2214AA2100882BB1 /* Review.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Review.storyboard; sourceTree = ""; }; + EE94A74F2214B52900882BB1 /* ReviewVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewVC.swift; sourceTree = ""; }; EE96916F21D561BE00BE1289 /* Passphrase.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Passphrase.storyboard; sourceTree = ""; }; EEBEBB7221FF8B6D00A6BD18 /* RecipientAddress.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = RecipientAddress.storyboard; sourceTree = ""; }; EEBEBB7421FF8DC800A6BD18 /* RecipientAddressVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipientAddressVC.swift; sourceTree = ""; }; @@ -378,6 +388,7 @@ EE96916F21D561BE00BE1289 /* Passphrase.storyboard */, EE57702C21D38A8200433CAB /* Pin.storyboard */, EEBEBB7221FF8B6D00A6BD18 /* RecipientAddress.storyboard */, + EE94A74D2214AA2100882BB1 /* Review.storyboard */, EEBEBB7E2200E41D00A6BD18 /* Scan.storyboard */, EE07A44B21E206D7006031C8 /* TrxDetails.storyboard */, ); @@ -410,6 +421,7 @@ EE377EC321E8F44C00138385 /* Passphrase */, EE377EBA21E68A6600138385 /* Pin */, EEBEBB7321FF8D9C00A6BD18 /* RecipientAddress */, + EE94A74E2214B50A00882BB1 /* Review */, EEBEBB792200DF9900A6BD18 /* Scan */, EE377EE721F7A71A00138385 /* TrxDetails */, ); @@ -471,6 +483,17 @@ path = Source_Sans_Pro; sourceTree = ""; }; + EE94A74E2214B50A00882BB1 /* Review */ = { + isa = PBXGroup; + children = ( + EE1876A222161632004853A7 /* ReviewTableViewCell.swift */, + EE94A74F2214B52900882BB1 /* ReviewVC.swift */, + EE18769E221611E6004853A7 /* ReviewVCDelegate.swift */, + EE1876A0221612AE004853A7 /* ReviewViewModel.swift */, + ); + path = Review; + sourceTree = ""; + }; EEBEBB7321FF8D9C00A6BD18 /* RecipientAddress */ = { isa = PBXGroup; children = ( @@ -607,6 +630,7 @@ files = ( EE76B85421D8D1930093571F /* SourceSansPro-SemiBoldItalic.ttf in Resources */, EE76B85C21D8D1930093571F /* SourceSansPro-BoldItalic.ttf in Resources */, + EE94A7512214B6C500882BB1 /* Review.storyboard in Resources */, EE377ECC21EB4A6800138385 /* Passphrase.storyboard in Resources */, EEBEBB7821FF97AC00A6BD18 /* RecipientAddress.storyboard in Resources */, EE76B85321D8D1930093571F /* SourceSansPro-BlackItalic.ttf in Resources */, @@ -653,7 +677,10 @@ EE07A45221E23E92006031C8 /* MainVCDelegate.swift in Sources */, EE377EC521E8F47100138385 /* PassphraseVC.swift in Sources */, EEBEBB952207425500A6BD18 /* SendCoordinator.swift in Sources */, + EE1876A1221612AE004853A7 /* ReviewViewModel.swift in Sources */, + EE18769F221611E6004853A7 /* ReviewVCDelegate.swift in Sources */, EE57702621CFFDDB00433CAB /* ZWButtom.swift in Sources */, + EE1876A322161632004853A7 /* ReviewTableViewCell.swift in Sources */, EE377EEB21F7AF3C00138385 /* TrxDetailTableViewCell.swift in Sources */, EE377EDA21F4BE5500138385 /* TrxHistoryProvider.swift in Sources */, EE07A46E21E3E71B006031C8 /* OnboardingCoordinator.swift in Sources */, @@ -683,6 +710,7 @@ EE377ECF21EB56AD00138385 /* ZWKeyboardLayoutConstraint.swift in Sources */, EEBEBB7521FF8DC800A6BD18 /* RecipientAddressVC.swift in Sources */, EE377EBC21E68AB000138385 /* PinVC.swift in Sources */, + EE94A7502214B52900882BB1 /* ReviewVC.swift in Sources */, EE377EC221E7DFD200138385 /* Constants.swift in Sources */, EE377EC921E8F67000138385 /* PassphraseVCDelegate.swift in Sources */, EEBEBB9E2208D64C00A6BD18 /* AmountVC.swift in Sources */, diff --git a/ZWallet/Infrastructure/de.lproj/InfoPlist.strings b/ZWallet/Infrastructure/de.lproj/InfoPlist.strings index 5a09d05..9a3cf7e 100644 --- a/ZWallet/Infrastructure/de.lproj/InfoPlist.strings +++ b/ZWallet/Infrastructure/de.lproj/InfoPlist.strings @@ -84,3 +84,13 @@ "memo.next" = "Weiter"; +"review.title" = "Kontrolle & Bestätigung"; + +"review.amount" = "Betrag"; + +"review.receivingAddress" = "Empfängeradresse"; + +"review.memo" = "Memo"; + +"review.send" = "Sende"; + diff --git a/ZWallet/Infrastructure/en.lproj/InfoPlist.strings b/ZWallet/Infrastructure/en.lproj/InfoPlist.strings index 9b5302c..bfc3054 100644 --- a/ZWallet/Infrastructure/en.lproj/InfoPlist.strings +++ b/ZWallet/Infrastructure/en.lproj/InfoPlist.strings @@ -84,3 +84,13 @@ "memo.next" = "Next"; +"review.title" = "Review & Confirm"; + +"review.amount" = "Amount"; + +"review.receivingAddress" = "Receiving Address"; + +"review.memo" = "Memo"; + +"review.send" = "Send"; + diff --git a/ZWallet/Services/ViewFactory.swift b/ZWallet/Services/ViewFactory.swift index d983452..a6c7688 100644 --- a/ZWallet/Services/ViewFactory.swift +++ b/ZWallet/Services/ViewFactory.swift @@ -20,6 +20,7 @@ internal protocol ViewFactoryProtocol { func getScanView() -> ScanVC func getAmountView() -> AmountVC func getMemoVC() -> MemoVC + func getReviewVC() -> ReviewVC } @@ -61,6 +62,10 @@ internal class ViewFactory: ViewFactoryProtocol { return self.view(withName: "Memo", onStoryboard: "Memo") } + func getReviewVC() -> ReviewVC { + return self.view(withName: "Review", onStoryboard: "Review") + } + private func view(withName viewName: String, onStoryboard storyboardName: String) -> T { let sb = UIStoryboard(name: storyboardName, bundle: nil) let vc = sb.instantiateViewController(withIdentifier: viewName) as! T diff --git a/ZWallet/Storyboards/Review.storyboard b/ZWallet/Storyboards/Review.storyboard new file mode 100644 index 0000000..ac7d0fc --- /dev/null +++ b/ZWallet/Storyboards/Review.storyboard @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + SourceSansPro-Bold + + + SourceSansPro-Regular + + + SourceSansPro-SemiBold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ZWallet/ViewCoordinators/SendCoordinator.swift b/ZWallet/ViewCoordinators/SendCoordinator.swift index 5171b1e..b38f19f 100644 --- a/ZWallet/ViewCoordinators/SendCoordinator.swift +++ b/ZWallet/ViewCoordinators/SendCoordinator.swift @@ -120,6 +120,8 @@ extension SendCoordinator: MemoVCDelegate { func memoVCDelegateNextButtonTouched(sender: MemoVC, memo: String?) { #warning("implement") + + self.showReviewView() } func memoVCDelegateBackTouched(sender: MemoVC) { @@ -138,3 +140,45 @@ extension SendCoordinator: MemoVCDelegate { self.navigationController.pushViewController(vc, animated: true) } } + + +extension SendCoordinator: ReviewVCDelegate { + + func reviewVCDelegateBackTouched(sender: ReviewVC) { + self.navigationController.popViewController(animated: true) + } + + func reviewVCDelegateCancelTouched(sender: ReviewVC) { + self.delegate?.sendCoordinatorCancelled(coordinator: self) + } + + func reviewVCDelegateSendTouched(sender: ReviewVC) { + #warning("implement") + } + + func reviewVCDelegateChangeAmountTouched(sender: ReviewVC) { + #warning("implement") + } + + func reviewVCDelegateChangeReceivingAddressTouched(sender: ReviewVC) { + #warning("implement") + } + + func reviewVCDelegateChangeMemoTouched(sender: ReviewVC) { + #warning("implement") + } + + private func showReviewView() { + let vc = self.viewFactory.getReviewVC() + vc.delegate = self + vc.localizer = self.localizer + + #warning("set view model") + vc.viewModel = ReviewViewModel(amount: 2208_000_000_000_000, + fiatAmount: "22.08 CHF", + receivingAddress: "reveiver's address here", + memo: "some memo for this transaction comes here and may be longer") + + self.navigationController.pushViewController(vc, animated: true) + } +} diff --git a/ZWallet/Views/Review/ReviewTableViewCell.swift b/ZWallet/Views/Review/ReviewTableViewCell.swift new file mode 100644 index 0000000..3ee99f3 --- /dev/null +++ b/ZWallet/Views/Review/ReviewTableViewCell.swift @@ -0,0 +1,27 @@ +// +// ReviewTableViewCell.swift +// ZWallet +// +// Created by loj on 14.02.19. +// Copyright © 2019 XMR Systems LLC. All rights reserved. +// + +import UIKit + +class ReviewTableViewCell: UITableViewCell { + + @IBOutlet weak var titleLabel: UILabel! + @IBOutlet weak var descriptionLabel: UILabel! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + +} diff --git a/ZWallet/Views/Review/ReviewVC.swift b/ZWallet/Views/Review/ReviewVC.swift new file mode 100644 index 0000000..1a5c9e2 --- /dev/null +++ b/ZWallet/Views/Review/ReviewVC.swift @@ -0,0 +1,116 @@ +// +// ReviewVC.swift +// ZWallet +// +// Created by loj on 13.02.19. +// Copyright © 2019 XMR Systems LLC. All rights reserved. +// + +import UIKit + +class ReviewVC: UIViewController { + + @IBOutlet weak var backButton: UIButton! + @IBOutlet weak var cancelButton: UIButton! + @IBOutlet weak var progressBar: ZWProgressBar! + @IBOutlet weak var titleLabel: UILabel! + @IBOutlet weak var summaryTableView: UITableView! + @IBOutlet weak var sendButton: UIButton! + + public weak var delegate: ReviewVCDelegate? + public weak var localizer: Localizable? + public var viewModel: ReviewViewModel? + + @IBAction func backButtonTouched() { + self.delegate?.reviewVCDelegateBackTouched(sender: self) + } + + @IBAction func cancelButtonTouched() { + self.delegate?.reviewVCDelegateCancelTouched(sender: self) + } + + @IBAction func sendButtonTouched() { + self.delegate?.reviewVCDelegateSendTouched(sender: self) + } + + override func viewDidLoad() { + super.viewDidLoad() + self.setup() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.updateView() + } + + private func setup() { + self.progressBar.currentStep = 4 + self.summaryTableView.dataSource = self + self.summaryTableView.delegate = self + } + + private func updateView() { + guard let localizer = self.localizer else { + return + } + + self.titleLabel.text = localizer.localized("review.title") + } + + private var amountDescription: String { + #warning("implement") + return "22.08000 ZEC (22.80 CHF)" + } + + private enum CellIdentifier: String { + case review = "ReviewCell" + case memo = "ReviewMemoCell" + } + + private var cellDefinitions: [(cell: UITableViewCell, height: Int, action: ((ReviewVC) -> Void)?)] { + return [(self.amountCell, 100, self.delegate?.reviewVCDelegateChangeAmountTouched), + (self.receivingAddressCell, 100, self.delegate?.reviewVCDelegateChangeReceivingAddressTouched), + (self.memoCell, 120, self.delegate?.reviewVCDelegateChangeMemoTouched)] + } + + private var amountCell: UITableViewCell { + let cell = self.summaryTableView.dequeueReusableCell(withIdentifier: CellIdentifier.review.rawValue) as! ReviewTableViewCell + cell.titleLabel.text = self.localizer?.localized("review.amount") + cell.descriptionLabel.text = self.amountDescription + return cell + } + + private var receivingAddressCell: UITableViewCell { + let cell = self.summaryTableView.dequeueReusableCell(withIdentifier: CellIdentifier.review.rawValue) as! ReviewTableViewCell + cell.titleLabel.text = self.localizer?.localized("review.receivingAddress") + cell.descriptionLabel.text = self.viewModel?.receivingAddress + return cell + } + + private var memoCell: UITableViewCell { + let cell = self.summaryTableView.dequeueReusableCell(withIdentifier: CellIdentifier.memo.rawValue) as! ReviewTableViewCell + cell.titleLabel.text = self.localizer?.localized("review.memo") + cell.descriptionLabel.text = self.viewModel?.memo + return cell + } +} + + +extension ReviewVC: UITableViewDelegate { + + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + return CGFloat(self.cellDefinitions[indexPath.row].height) + } +} + + +extension ReviewVC: UITableViewDataSource { + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return self.cellDefinitions.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + return self.cellDefinitions[indexPath.row].cell + } +} diff --git a/ZWallet/Views/Review/ReviewVCDelegate.swift b/ZWallet/Views/Review/ReviewVCDelegate.swift new file mode 100644 index 0000000..688ba0c --- /dev/null +++ b/ZWallet/Views/Review/ReviewVCDelegate.swift @@ -0,0 +1,19 @@ +// +// ReviewVCDelegate.swift +// ZWallet +// +// Created by loj on 14.02.19. +// Copyright © 2019 XMR Systems LLC. All rights reserved. +// + +import Foundation + + +internal protocol ReviewVCDelegate: class { + func reviewVCDelegateBackTouched(sender: ReviewVC) + func reviewVCDelegateCancelTouched(sender: ReviewVC) + func reviewVCDelegateSendTouched(sender: ReviewVC) + func reviewVCDelegateChangeAmountTouched(sender: ReviewVC) + func reviewVCDelegateChangeReceivingAddressTouched(sender: ReviewVC) + func reviewVCDelegateChangeMemoTouched(sender: ReviewVC) +} diff --git a/ZWallet/Views/Review/ReviewViewModel.swift b/ZWallet/Views/Review/ReviewViewModel.swift new file mode 100644 index 0000000..34f24d4 --- /dev/null +++ b/ZWallet/Views/Review/ReviewViewModel.swift @@ -0,0 +1,17 @@ +// +// ReviewViewModel.swift +// ZWallet +// +// Created by loj on 14.02.19. +// Copyright © 2019 XMR Systems LLC. All rights reserved. +// + +import Foundation + + +internal struct ReviewViewModel { + let amount: ZecInAtomicUnits + let fiatAmount: String + let receivingAddress: String + let memo: String +} diff --git a/ZWallet/_Assets/Assets.xcassets/PenBlack.imageset/Contents.json b/ZWallet/_Assets/Assets.xcassets/PenBlack.imageset/Contents.json new file mode 100644 index 0000000..38c4847 --- /dev/null +++ b/ZWallet/_Assets/Assets.xcassets/PenBlack.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "PenBlack.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "preserves-vector-representation" : true, + "auto-scaling" : "auto" + } +} \ No newline at end of file diff --git a/ZWallet/_Assets/Assets.xcassets/PenBlack.imageset/PenBlack.pdf b/ZWallet/_Assets/Assets.xcassets/PenBlack.imageset/PenBlack.pdf new file mode 100644 index 0000000..86332df --- /dev/null +++ b/ZWallet/_Assets/Assets.xcassets/PenBlack.imageset/PenBlack.pdf @@ -0,0 +1,148 @@ +%PDF-1.7 + +1 0 obj + << /BBox [ 0.000000 0.000000 24.000000 24.000000 ] + /Resources << >> + /Subtype /Form + /Length 2 0 R + /Group << /Type /Group + /S /Transparency + >> + /Type /XObject + >> +stream +/DeviceRGB CS +/DeviceRGB cs +q +1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm +0.000000 24.000000 m +24.000000 24.000000 l +24.000000 0.000000 l +0.000000 0.000000 l +0.000000 24.000000 l +h +0.188235 0.192157 0.200000 scn +f* +n +Q + +endstream +endobj + +2 0 obj + 233 +endobj + +3 0 obj + << /BBox [ 0.000000 0.000000 24.000000 24.000000 ] + /Resources << >> + /Subtype /Form + /Length 4 0 R + /Group << /Type /Group + /S /Transparency + >> + /Type /XObject + >> +stream +/DeviceRGB CS +/DeviceRGB cs +q +1.000000 0.000000 -0.000000 1.000000 3.000000 2.902344 cm +17.710007 15.467621 m +18.100006 15.077606 18.100006 14.447601 17.710007 14.057587 c +15.880005 12.227509 l +12.130005 15.977509 l +13.960007 17.807587 l +14.350006 18.197601 14.980011 18.197601 15.370010 17.807587 c +17.710007 15.467621 l +h +0.000000 0.097504 m +0.000000 3.847504 l +11.059998 14.907562 l +14.809998 11.157562 l +3.750000 0.097504 l +0.000000 0.097504 l +h +0.000000 0.000000 0.000000 scn +f* +n +Q + +endstream +endobj + +4 0 obj + 488 +endobj + +5 0 obj + << /XObject << /X1 1 0 R >> + /ExtGState << /E1 << /SMask << /Type /Mask + /G 3 0 R + /S /Alpha + >> + /Type /ExtGState + >> >> + >> +endobj + +6 0 obj + << /Length 7 0 R >> +stream +/DeviceRGB CS +/DeviceRGB cs +q +/E1 gs +/X1 Do +Q + +endstream +endobj + +7 0 obj + 46 +endobj + +8 0 obj + << /MediaBox [ 0.000000 0.000000 24.000000 24.000000 ] + /Resources 5 0 R + /Contents 6 0 R + /Parent 9 0 R + /Type /Page + >> +endobj + +9 0 obj + << /Kids [ 8 0 R ] + /Count 1 + /Type /Pages + >> +endobj + +10 0 obj + << /Type /Catalog + /Pages 9 0 R + >> +endobj + +xref +0 11 +0000000000 65535 f +0000000010 00000 n +0000000491 00000 n +0000000513 00000 n +0000001249 00000 n +0000001271 00000 n +0000001569 00000 n +0000001671 00000 n +0000001692 00000 n +0000001849 00000 n +0000001923 00000 n +trailer +<< /ID [ (some) (id) ] + /Root 10 0 R + /Size 11 +>> +startxref +1983 +%%EOF \ No newline at end of file