diff --git a/ios/Podfile b/ios/Podfile
index d75bb32..ae4d19c 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -1,6 +1,5 @@
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'
-pod 'ZXingObjC', '~> 3.2.2'
if ENV['FLUTTER_FRAMEWORK_DIR'] == nil
abort('Please set FLUTTER_FRAMEWORK_DIR to the directory containing Flutter.framework')
@@ -9,6 +8,9 @@ end
target ‘Runner’ do
# Pods for Runner
pod 'Firebase'
+ pod 'DropDown'
+ pod 'ZXingObjC'
+ use_frameworks!
# Flutter Pods
pod 'Flutter', :path => ENV['FLUTTER_FRAMEWORK_DIR']
@@ -31,6 +33,9 @@ end
target ‘Dinect’ do
# Pods for Dinect
pod 'Firebase'
+ pod 'DropDown'
+ pod 'ZXingObjC'
+ use_frameworks!
# Flutter Pods
pod 'Flutter', :path => ENV['FLUTTER_FRAMEWORK_DIR']
@@ -53,6 +58,9 @@ end
target ‘Crypto’ do
# Pods for Crypto
pod 'Firebase'
+ pod 'DropDown'
+ pod 'ZXingObjC'
+ use_frameworks!
# Flutter Pods
pod 'Flutter', :path => ENV['FLUTTER_FRAMEWORK_DIR']
diff --git a/ios/Runner.xcodeproj/xcuserdata/kifio.xcuserdatad/xcschemes/xcschememanagement.plist b/ios/Runner.xcodeproj/xcuserdata/kifio.xcuserdatad/xcschemes/xcschememanagement.plist
index dc16213..35d5e91 100644
--- a/ios/Runner.xcodeproj/xcuserdata/kifio.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/ios/Runner.xcodeproj/xcuserdata/kifio.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -7,7 +7,7 @@
BioChecker.xcscheme
orderHint
- 14
+ 15
Dinect INT.xcscheme_^#shared#^_
@@ -17,7 +17,7 @@
Dinect-Crypto.xcscheme_^#shared#^_
orderHint
- 5
+ 3
Dinect.xcscheme
@@ -27,7 +27,7 @@
Dinect.xcscheme_^#shared#^_
orderHint
- 13
+ 12
Runner.xcscheme_^#shared#^_
diff --git a/ios/Runner.xcworkspace/xcuserdata/kifio.xcuserdatad/UserInterfaceState.xcuserstate b/ios/Runner.xcworkspace/xcuserdata/kifio.xcuserdatad/UserInterfaceState.xcuserstate
index bd32376..900e845 100644
Binary files a/ios/Runner.xcworkspace/xcuserdata/kifio.xcuserdatad/UserInterfaceState.xcuserstate and b/ios/Runner.xcworkspace/xcuserdata/kifio.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/ios/Runner/Assets.xcassets/more.imageset/Contents.json b/ios/Runner/Assets.xcassets/more.imageset/Contents.json
new file mode 100644
index 0000000..e5fe489
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/more.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "filename" : "more.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "iphone",
+ "filename" : "more@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "filename" : "more@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/ios/Runner/Assets.xcassets/more.imageset/more.png b/ios/Runner/Assets.xcassets/more.imageset/more.png
new file mode 100644
index 0000000..4bd79cd
Binary files /dev/null and b/ios/Runner/Assets.xcassets/more.imageset/more.png differ
diff --git a/ios/Runner/Assets.xcassets/more.imageset/more@2x.png b/ios/Runner/Assets.xcassets/more.imageset/more@2x.png
new file mode 100644
index 0000000..0f314bb
Binary files /dev/null and b/ios/Runner/Assets.xcassets/more.imageset/more@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/more.imageset/more@3x.png b/ios/Runner/Assets.xcassets/more.imageset/more@3x.png
new file mode 100644
index 0000000..90a0ca1
Binary files /dev/null and b/ios/Runner/Assets.xcassets/more.imageset/more@3x.png differ
diff --git a/ios/Runner/ScannerViewController.swift b/ios/Runner/ScannerViewController.swift
index 0b9cee5..e4b1b97 100644
--- a/ios/Runner/ScannerViewController.swift
+++ b/ios/Runner/ScannerViewController.swift
@@ -1,5 +1,7 @@
import UIKit
import Flutter
+import DropDown
+import ZXingObjC
@objc class ScannerViewController: UIViewController, ZXCaptureDelegate, UITextFieldDelegate {
@@ -28,27 +30,17 @@ import Flutter
}
}
- // @IBOutlet weak var decodedLabel: UILabel!
-
- private var captureSizeTransform: CGAffineTransform?
-
+ var captureSizeTransform: CGAffineTransform?
var buttonState: ButtonState = .card
-
var platformChannel: FlutterMethodChannel?
-
- // Квадрат для наведения на цель (надеюсь)
- let scanRectView = UIView()
-
- //Вьюшка для верхнего меню
- let topView = UIView()
-
- //Окно ввода кода
- let textField = UITextField()
-
- //Кнопка настроек
- var settingButton: UIButton!
-
var strings = [String:String]()
+
+ let scanRectView = UIView()
+ let header = UIView()
+ let textField = UITextField()
+ let settingsButton = UIButton(type: .system)
+ let searchType = UIButton(type: .system)
+ let dropDown = DropDown()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
@@ -84,32 +76,78 @@ import Flutter
override func viewDidLoad() {
super.viewDidLoad()
- capture.camera = capture.back()
- capture.focusMode = .continuousAutoFocus
+
view.layer.addSublayer((capture.layer)!)
view.addSubview(scanRectView)
+ view.addSubview(header)
+ view.bringSubview(toFront: header)
+ view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(ScannerViewController.hideKeyboard)))
- settingButton = UIButton(type: .system)
- settingButton.addTarget(self, action: #selector(ScannerViewController.buttonTouch), for: .touchUpInside)
-
- topView.addSubview(textField)
- topView.addSubview(settingButton)
- view.addSubview(topView)
- view.bringSubview(toFront: topView)
-
+ initCamera()
+ initSearchTypeButton()
+ initTextFIeld()
+ initSettingsButton()
+ initDropDown()
+ initHeader()
+ }
+
+ private func initCamera() {
+ capture.camera = capture.back()
+ capture.focusMode = .continuousAutoFocus
+ }
+
+ private func initHeader() {
+ header.addSubview(textField)
+ header.addSubview(searchType)
+ header.addSubview(settingsButton)
+ }
+
+ private func initTextFIeld() {
textField.delegate = self
-
- let tap = UITapGestureRecognizer(target: self, action: #selector(ScannerViewController.hideKeyboard))
- view.addGestureRecognizer(tap)
-
- settingButton.setImage(self.buttonState.icon, for: .normal)
textField.placeholder = self.getInputHint()
- // textField.text = "79087654321"
+ }
+
+ private func initSearchTypeButton() {
+ searchType.setImage(self.buttonState.icon, for: .normal)
+ searchType.addTarget(self, action: #selector(ScannerViewController.buttonTouch), for: .touchUpInside)
+ }
+
+ private func initDropDown() {
+ dropDown.anchorView = settingsButton
+ dropDown.dataSource = [strings["settings"]!, strings["faq"]!]
+ dropDown.selectionAction = { (index: Int, item: String) in
+ if index == 0 {
+ self.platformChannel?.invokeMethod("settings", arguments: nil)
+ } else if index == 1 {
+ self.platformChannel?.invokeMethod("faq", arguments: nil)
+ }
+
+ self.dismiss(animated: false)
+ }
+ }
+
+ private func initSettingsButton() {
+ settingsButton.setImage(UIImage(named: "more")!, for: .normal)
+ settingsButton.addTarget(self, action: #selector(ScannerViewController.settingsTouch), for: .touchUpInside)
+ }
+
+ func hideKeyboard() {
+ view.endEditing(false)
+ }
+
+ func buttonTouch() {
+ setButtonState()
+ searchType.setImage(self.buttonState.icon, for: .normal)
+ textField.placeholder = self.getInputHint()
+ }
+
+ func settingsTouch() {
+ dropDown.show()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
- topView.backgroundColor = UIColor.white
+ header.backgroundColor = UIColor.white
textField.borderStyle = .roundedRect
capture.delegate = self
applyOrientation()
@@ -118,11 +156,12 @@ import Flutter
// TODO: Вынести эту копипасту в методы, когда будет время
override func viewWillLayoutSubviews() {
+ // TODO: Надо бы уйти от констант, переписать на отступы какие-нибудь
scanRectView.frame = view.bounds
- topView.frame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: 56)
- settingButton.frame = CGRect(x: 8, y: 26, width: 20, height: 20)
- textField.frame = CGRect(x: settingButton.frame.maxX + 8, y: 21,
- width: view.frame.size.width - settingButton.frame.maxX - 16, height: 30)
+ header.frame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: 56)
+ searchType.frame = CGRect(x: 8, y: 26, width: 20, height: 20)
+ textField.frame = CGRect(x: searchType.frame.maxX + 8, y: 21, width: view.frame.size.width - searchType.frame.maxX - 48, height: 30)
+ settingsButton.frame = CGRect(x: view.frame.size.width - 30, y: 26, width: 20, height: 20)
var path = UIBezierPath()
path.move(to: CGPoint(x: 32, y: view.frame.size.height / 2))
@@ -219,16 +258,6 @@ import Flutter
}
- func hideKeyboard() {
- view.endEditing(false)
- }
-
- func buttonTouch(){
- setButtonState()
- settingButton.setImage(self.buttonState.icon, for: .normal)
- textField.placeholder = self.getInputHint()
- }
-
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
print("User from manual input: \(textField.text!)")
sendResult(textField.text!)