Commit 6316f203 authored by Nguyen Huy Nhat Anh's avatar Nguyen Huy Nhat Anh

update uiview

parent b9a8c8f0
File deleted
......@@ -7,6 +7,7 @@
objects = {
/* Begin PBXBuildFile section */
9509925F25355E0300C570D8 /* SBKValidateCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9509925E25355E0300C570D8 /* SBKValidateCardView.swift */; };
95182D0624B3343E00405EA9 /* liveness.tflite in Resources */ = {isa = PBXBuildFile; fileRef = 95182D0524B3343D00405EA9 /* liveness.tflite */; };
954230E525344620006F13F9 /* valid_card_10102020.tflite in Resources */ = {isa = PBXBuildFile; fileRef = 954230E425344601006F13F9 /* valid_card_10102020.tflite */; };
9546DDB5247D171500AF50DE /* ExtString.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9546DDB4247D171500AF50DE /* ExtString.swift */; };
......@@ -69,7 +70,6 @@
95FAF56E24EA83C900C161F2 /* Place within the box.png in Resources */ = {isa = PBXBuildFile; fileRef = 95FAF56B24EA83C800C161F2 /* Place within the box.png */; };
95FAF56F24EA83C900C161F2 /* Avoid glare.png in Resources */ = {isa = PBXBuildFile; fileRef = 95FAF56C24EA83C900C161F2 /* Avoid glare.png */; };
95FAF57024EA83C900C161F2 /* Do not place outside.png in Resources */ = {isa = PBXBuildFile; fileRef = 95FAF56D24EA83C900C161F2 /* Do not place outside.png */; };
A442B6EE25299DED0058D675 /* SBKValidateCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A442B6ED25299DED0058D675 /* SBKValidateCardView.swift */; };
A442B6F025299E160058D675 /* SBKValidateCardView.xib in Resources */ = {isa = PBXBuildFile; fileRef = A442B6EF25299E160058D675 /* SBKValidateCardView.xib */; };
A442B6F22529A13A0058D675 /* SBKRecordFaceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A442B6F12529A13A0058D675 /* SBKRecordFaceView.swift */; };
A442B6F42529A1440058D675 /* SBKRecordFaceView.xib in Resources */ = {isa = PBXBuildFile; fileRef = A442B6F32529A1440058D675 /* SBKRecordFaceView.xib */; };
......@@ -94,6 +94,7 @@
2A440D461209C526DEA3FD58 /* Pods-OCR-SDK.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OCR-SDK.debug.xcconfig"; path = "Target Support Files/Pods-OCR-SDK/Pods-OCR-SDK.debug.xcconfig"; sourceTree = "<group>"; };
3B6B0136F5F5B4ED2341A91B /* Pods_OCR_SDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_OCR_SDK.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8C1C048EB777A910827003CA /* Pods-OCR-SDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OCR-SDK.release.xcconfig"; path = "Target Support Files/Pods-OCR-SDK/Pods-OCR-SDK.release.xcconfig"; sourceTree = "<group>"; };
9509925E25355E0300C570D8 /* SBKValidateCardView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SBKValidateCardView.swift; sourceTree = "<group>"; };
95182D0524B3343D00405EA9 /* liveness.tflite */ = {isa = PBXFileReference; lastKnownFileType = file; path = liveness.tflite; sourceTree = "<group>"; };
954230E425344601006F13F9 /* valid_card_10102020.tflite */ = {isa = PBXFileReference; lastKnownFileType = file; path = valid_card_10102020.tflite; sourceTree = "<group>"; };
9546DDB4247D171500AF50DE /* ExtString.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtString.swift; sourceTree = "<group>"; };
......@@ -160,7 +161,6 @@
95FAF56B24EA83C800C161F2 /* Place within the box.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Place within the box.png"; sourceTree = "<group>"; };
95FAF56C24EA83C900C161F2 /* Avoid glare.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Avoid glare.png"; sourceTree = "<group>"; };
95FAF56D24EA83C900C161F2 /* Do not place outside.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Do not place outside.png"; sourceTree = "<group>"; };
A442B6ED25299DED0058D675 /* SBKValidateCardView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SBKValidateCardView.swift; path = "../../../../ios-sdk/OCR-SDK/UI/SBKCaptureCard/SBKValidateCardView.swift"; sourceTree = "<group>"; };
A442B6EF25299E160058D675 /* SBKValidateCardView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SBKValidateCardView.xib; sourceTree = "<group>"; };
A442B6F12529A13A0058D675 /* SBKRecordFaceView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SBKRecordFaceView.swift; sourceTree = "<group>"; };
A442B6F32529A1440058D675 /* SBKRecordFaceView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SBKRecordFaceView.xib; sourceTree = "<group>"; };
......@@ -358,7 +358,7 @@
children = (
9546DDD2247D2C0C00AF50DE /* SBKCaptureCardVC.xib */,
955105AA247774CC0053036F /* SBKCaptureCardVC.swift */,
A442B6ED25299DED0058D675 /* SBKValidateCardView.swift */,
9509925E25355E0300C570D8 /* SBKValidateCardView.swift */,
A442B6EF25299E160058D675 /* SBKValidateCardView.xib */,
);
path = SBKCaptureCard;
......@@ -561,7 +561,6 @@
buildActionMask = 2147483647;
files = (
955105AD247774CC0053036F /* Loadding.swift in Sources */,
A442B6EE25299DED0058D675 /* SBKValidateCardView.swift in Sources */,
955105CA247775290053036F /* SB_KYC_SDK.swift in Sources */,
955105AC247774CC0053036F /* ExtUiViewController.swift in Sources */,
955BEC4C249083A1001FB052 /* SBValidateInput.swift in Sources */,
......@@ -574,6 +573,7 @@
955105BE247774CC0053036F /* SBKTutorialVC.swift in Sources */,
9546DDDC247E197800AF50DE /* Global.swift in Sources */,
9580130F2489F1EA00846F8A /* SBKRecordFace.swift in Sources */,
9509925F25355E0300C570D8 /* SBKValidateCardView.swift in Sources */,
95801347248A237000846F8A /* SBKModelDataHandler.swift in Sources */,
955105BD247774CC0053036F /* SBKTutorialFaceVC.swift in Sources */,
955105C2247774CC0053036F /* SBKResultCapture.swift in Sources */,
......
......@@ -246,8 +246,8 @@ public class SBKValidateCardView: UIView, AVCapturePhotoCaptureDelegate {
let validateView = SBKValidateInput.shared
let imageInput = validateView.convertCVPixelToUIImage(pixelBuffer: pixelBuffer)
var imageOutput: UIImage?
if self.statusScreen == "horizontal" {
imageOutput = validateView.cropImageHorizontal(image: imageInput, rect: CGRect(x: imageInput.size.width * 1 / 10, y: imageInput.size.height * 3 / 20, width: imageInput.size.width * 8 / 10, height: imageInput.size.height * 9 / 10), scale: 1.0)
if UIDevice.current.userInterfaceIdiom == .pad {
imageOutput = validateView.cropImage(image: imageInput, rect: CGRect(x: imageInput.size.width / 20, y: imageInput.size.height * 2 / 7, width: imageInput.size.width - imageInput.size.width/10, height: (imageInput.size.width - imageInput.size.width/10) * 3/4), scale: 1.0)
} else {
imageOutput = validateView.cropImage(image: imageInput, rect: CGRect(x: imageInput.size.width / 20, y: imageInput.size.height * 2 / 7, width: imageInput.size.width - imageInput.size.width/10, height: (imageInput.size.width - imageInput.size.width/10) * 3/4), scale: 1.0)
}
......
......@@ -285,20 +285,6 @@ class SBKRecordFace: UIViewController, AVCaptureVideoDataOutputSampleBufferDeleg
self.startTimer()
// if !self.checkStartRecord && !self.checkStatusRecord {
// self.checkStartRecord = true
// self.lbDescription.textColor = UIColor.white
// //self.lbDescription.text = "Are you ready. Let's start!".localized()//"Bạn đã sẵn sàng. Hãy bắt đầu!"
// if !self.checkStatusRecord {
// self.checkStatusRecord = true
// self.timeRecord = 0
// self.checkStep = 0
// self.viewCheckStep1.backgroundColor = UIColor.colorFromHexa("#333333")
// self.viewCheckStep2.backgroundColor = UIColor.colorFromHexa("#333333")
// self.viewCheckStep3.backgroundColor = UIColor.colorFromHexa("#333333")
// }
// }
DispatchQueue.global().async {
self.didOutput(pixelBuffer: image, statusFace: statusString)
}
......
......@@ -15,11 +15,13 @@ public class SBKRecordFaceView: UIView, AVCaptureVideoDataOutputSampleBufferDele
let nibName = "SBKRecordFaceView"
var contentView:UIView?
@IBOutlet public weak var viewBackground: UIView!
@IBOutlet public weak var lbDescription: UILabel!
@IBOutlet weak var lbCopyright: UILabel!
//@IBOutlet public weak var viewOval: UIView!
@IBOutlet public weak var btnRecord: UIButton!
@IBOutlet weak var viewBackground: UIView!
@IBOutlet weak var lbDescription: UILabel!
@IBOutlet weak var viewOval: UIView!
@IBOutlet weak var viewCheckStep1: UIView!
@IBOutlet weak var viewCheckStep2: UIView!
@IBOutlet weak var viewCheckStep3: UIView!
@IBOutlet weak var imageDescription: UIImageView!
private let captureSession = AVCaptureSession()
private lazy var previewLayer = AVCaptureVideoPreviewLayer(session: self.captureSession)
......@@ -43,7 +45,7 @@ public class SBKRecordFaceView: UIView, AVCaptureVideoDataOutputSampleBufferDele
var idBack: String = ""
var URLToken: String = ""
var completionSuccessFaceRecord: ([String:Any])->Void = {_ in}
public var completionSuccessFaceRecordStep: (_ validate: ValidateFace?, _ step: StepRecord?, _ data: [String: Any]?, _ timeRecord: Int?)->Void = {_,_,_,_ in}
public var completionSuccessFaceRecordStep: (_ validate: ValidateFace?, _ step: StepRecord?, _ data: [String: Any]?)->Void = {_,_,_ in}
public var timeSpace: Int = 3
public var zoom: CGFloat = 1.0
public var imageStartRecord: UIImage?
......@@ -76,7 +78,6 @@ public class SBKRecordFaceView: UIView, AVCaptureVideoDataOutputSampleBufferDele
}
func loadCamera() {
self.lbCopyright.text = " "
self.addCameraInput()
self.showCameraFeed()
self.getCameraFrames()
......@@ -214,7 +215,7 @@ public class SBKRecordFaceView: UIView, AVCaptureVideoDataOutputSampleBufferDele
if self.dataImageSuccess.count == 0 {
self.dataImageSuccess.append(imageView.pngData()!)
}
self.completionSuccessFaceRecordStep(.FACE_STRAIGHT, nil, nil, nil)
self.completionSuccessFaceRecordStep(.FACE_STRAIGHT, nil, nil)
if 1 <= self.timeRecord {
self.lbDescription.textColor = UIColor.green
self.lbDescription.text = " ".localized()
......@@ -222,34 +223,34 @@ public class SBKRecordFaceView: UIView, AVCaptureVideoDataOutputSampleBufferDele
} else if statusFace != .STRAIGHTFACE && 1 <= self.timeRecord && self.timeRecord < self.timeSpace {
self.lbDescription.textColor = UIColor.red
self.lbDescription.text = " ".localized()
self.completionSuccessFaceRecordStep(.FACE_STRAIGHT_FAILD, nil, nil, nil)
self.completionSuccessFaceRecordStep(.FACE_STRAIGHT_FAILD, nil, nil)
} else if statusFace == .TORIGHT && self.timeSpace <= self.timeRecord && self.timeRecord < self.timeSpace * 2 {
self.lbDescription.textColor = UIColor.green
self.lbDescription.text = " ".localized()
self.completionSuccessFaceRecordStep(.FACE_RIGHT, nil, nil, nil)
self.completionSuccessFaceRecordStep(.FACE_RIGHT, nil, nil)
if self.dataImageSuccess.count == 1 {
self.dataImageSuccess.append(imageView.pngData()!)
}
} else if statusFace != .TORIGHT && self.timeSpace <= self.timeRecord && self.timeRecord < self.timeSpace * 2 {
self.lbDescription.textColor = UIColor.red
self.lbDescription.text = " ".localized()
self.completionSuccessFaceRecordStep(.FACE_RIGHT_FAILD, nil, nil, nil)
self.completionSuccessFaceRecordStep(.FACE_RIGHT_FAILD, nil, nil)
} else if statusFace == .TOLEFT && self.timeSpace * 2 <= self.timeRecord && self.timeRecord < self.timeSpace * 3 {
self.lbDescription.textColor = UIColor.green
self.lbDescription.text = " ".localized()
self.completionSuccessFaceRecordStep(.FACE_LEFT, nil, nil, nil)
self.completionSuccessFaceRecordStep(.FACE_LEFT, nil, nil)
if self.dataImageSuccess.count == 2 {
self.dataImageSuccess.append(imageView.pngData()!)
}
} else if statusFace != .TOLEFT && self.timeSpace * 2 <= self.timeRecord && self.timeRecord < self.timeSpace * 3 {
self.lbDescription.textColor = UIColor.red
self.lbDescription.text = " ".localized()
self.completionSuccessFaceRecordStep(.FACE_LEFT_FAILD, nil, nil, nil)
self.completionSuccessFaceRecordStep(.FACE_LEFT_FAILD, nil, nil)
}
} else {
self.lbDescription.textColor = UIColor.red
self.lbDescription.text = " ".localized()
self.completionSuccessFaceRecordStep(.FACE_FAKE, nil, nil, nil)
self.completionSuccessFaceRecordStep(.FACE_FAKE, nil, nil)
}
}
} else {
......@@ -258,14 +259,14 @@ public class SBKRecordFaceView: UIView, AVCaptureVideoDataOutputSampleBufferDele
self.checkStartRecord = true
self.lbDescription.textColor = UIColor.green
self.lbDescription.text = " ".localized()//"Bạn đã sẵn sàng. Hãy bắt đầu!"
self.completionSuccessFaceRecordStep(.FACE_READY, nil, nil, nil)
self.completionSuccessFaceRecordStep(.FACE_READY, nil, nil)
}
} else {
DispatchQueue.main.async {
self.checkStartRecord = false
self.lbDescription.textColor = UIColor.red
self.lbDescription.text = "Incorrect face, please check!".localized()
self.completionSuccessFaceRecordStep(.FACE_FAKE, nil, nil, nil)
self.completionSuccessFaceRecordStep(.FACE_FAKE, nil, nil)
}
}
}
......@@ -277,7 +278,7 @@ public class SBKRecordFaceView: UIView, AVCaptureVideoDataOutputSampleBufferDele
self.checkStatusRecord = true
self.timeRecord = 0
let image = UIImage(named: "player_stop", in: Bundle(for: SBKTutorialVC.self), compatibleWith: nil)
self.btnRecord.setImage(imageStartRecord ?? image, for: .normal)
//self.btnRecord.setImage(imageStartRecord ?? image, for: .normal)
}
}
......@@ -369,13 +370,14 @@ public class SBKRecordFaceView: UIView, AVCaptureVideoDataOutputSampleBufferDele
private func detectFace(in image: CVPixelBuffer) {
let faceDetectionRequest = VNDetectFaceLandmarksRequest(completionHandler: { (request: VNRequest, error: Error?) in
DispatchQueue.main.async {
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
if (request.results as? [VNFaceObservation]) != nil {
if let results = request.results as? [VNFaceObservation], results.count > 0 {
if results.count > 1 {
self.lbDescription.textColor = UIColor.red
self.lbDescription.text = " ".localized()
self.completionSuccessFaceRecordStep(.MANY_FACE, nil, nil, nil)
self.lbDescription.text = "There are many faces in the frame".localized()
self.completionSuccessFaceRecordStep(.MANY_FACE, nil, nil)
} else {
let statusString = self.checkFaceRightLeft(landmarks: results[0].landmarks!)
......@@ -387,8 +389,8 @@ public class SBKRecordFaceView: UIView, AVCaptureVideoDataOutputSampleBufferDele
if !self.checkStatusRecord {
self.checkStartRecord = false
self.lbDescription.textColor = UIColor.red
self.lbDescription.text = " ".localized()//"Đặt vị trí mặt bạn vào hình"
self.completionSuccessFaceRecordStep(.NO_FACE, nil, nil, nil)
self.lbDescription.text = "Position your face in the oval".localized()//"Đặt vị trí mặt bạn vào hình"
self.completionSuccessFaceRecordStep(.NO_FACE, nil, nil)
} else {
self.lbDescription.textColor = UIColor.red
self.lbDescription.text = " ".localized()
......@@ -400,6 +402,7 @@ public class SBKRecordFaceView: UIView, AVCaptureVideoDataOutputSampleBufferDele
}
}
}
}
})
if #available(iOS 12.0, *) {
......@@ -425,26 +428,26 @@ public class SBKRecordFaceView: UIView, AVCaptureVideoDataOutputSampleBufferDele
self.checkStartRecord = false
self.checkStatusRecord = false
let image = UIImage(named: "ic_record", in: Bundle(for: SBKTutorialVC.self), compatibleWith: nil)
self.btnRecord.setImage(image, for: .normal)
//let image = UIImage(named: "ic_record", in: Bundle(for: SBKTutorialVC.self), compatibleWith: nil)
//self.btnRecord.setImage(image, for: .normal)
}
@objc func setLableRecord(timer: Timer) {
self.timeRecord += 1
self.completionSuccessFaceRecordStep(nil, nil, nil, self.timeRecord)
self.completionSuccessFaceRecordStep(nil, nil, nil)
switch self.timeRecord {
case 1:
self.lbDescription.textColor = UIColor.white
self.lbDescription.text = " ".localized()//"vui lòng nhìn thẳng"
self.completionSuccessFaceRecordStep(nil, .STEP_FACE_STRAIGHT, nil, self.timeRecord)
self.completionSuccessFaceRecordStep(nil, .STEP_FACE_STRAIGHT, nil)
case self.timeSpace:
self.lbDescription.textColor = UIColor.white
self.lbDescription.text = " ".localized()//"Quay sang phải"
self.completionSuccessFaceRecordStep(nil, .STEP_FACE_RIGHT, nil, self.timeRecord)
self.completionSuccessFaceRecordStep(nil, .STEP_FACE_RIGHT, nil)
case self.timeSpace * 2:
self.lbDescription.textColor = UIColor.white
self.lbDescription.text = " ".localized()//"Quay sang trái"
self.completionSuccessFaceRecordStep(nil, .STEP_FACE_LEFT, nil, self.timeRecord)
self.completionSuccessFaceRecordStep(nil, .STEP_FACE_LEFT, nil)
case self.timeSpace * 3:
let pass: Float = Float(self.numberTrue)/Float(self.numberPass)
if Global.ratioPass < pass * 100 && self.dataImageSuccess.count > 2 {
......@@ -454,17 +457,17 @@ public class SBKRecordFaceView: UIView, AVCaptureVideoDataOutputSampleBufferDele
"imageRight": self.dataImageSuccess[1],
"imageLeft": self.dataImageSuccess[2],
]
self.completionSuccessFaceRecordStep(nil, nil, data, nil)
self.completionSuccessFaceRecordStep(nil, nil, data)
self.timeRecord = 0
self.resetRecord()
self.timer.invalidate()
// self.captureSession.stopRunning()
// self.captureSession.removeOutput(self.videoDataOutput)
// self.captureSession.stopRunning()
// self.captureSession.removeOutput(self.videoDataOutput)
}
} else {
self.lbDescription.textColor = UIColor.red
self.lbDescription.text = " ".localized()//"Chưa đạt yêu cầu, hãy thử lại!"
self.completionSuccessFaceRecordStep(.INVALID, nil, nil, nil)
self.completionSuccessFaceRecordStep(.INVALID, nil, nil)
}
case self.timeSpace * 4:
self.timer.invalidate()
......
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="16097.2" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="17156" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17125"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="SBKRecordFaceView" customModule="SB_KYC_SDK" customModuleProvider="target">
<connections>
<outlet property="btnRecord" destination="kiz-B2-kqL" id="OpP-C8-4lo"/>
<outlet property="lbCopyright" destination="fBN-yA-pbq" id="Qwz-Ye-DJs"/>
<outlet property="lbDescription" destination="3NW-5M-g0h" id="e9r-PT-NWj"/>
<outlet property="viewBackground" destination="Z9C-Eh-mo9" id="pNl-8k-48n"/>
<outlet property="imageDescription" destination="qAP-z1-ph6" id="4WK-9l-Hhw"/>
<outlet property="lbDescription" destination="l4S-dU-FVT" id="7qE-CY-e4c"/>
<outlet property="viewBackground" destination="vtt-nP-K7e" id="p2H-QE-FHN"/>
<outlet property="viewCheckStep1" destination="Ikb-Rh-oGt" id="gg1-L1-h5k"/>
<outlet property="viewCheckStep2" destination="q10-fa-3fY" id="YaT-X4-UMq"/>
<outlet property="viewCheckStep3" destination="KKw-Ea-56U" id="91G-Kf-nGW"/>
<outlet property="viewOval" destination="o70-jf-1ia" id="W81-Ef-mxN"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
......@@ -21,62 +25,115 @@
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Z9C-Eh-mo9">
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vtt-nP-K7e">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hK9-ib-LmH">
<rect key="frame" x="0.0" y="144.5" width="414" height="611"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" " textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fBN-yA-pbq">
<rect key="frame" x="205" y="84" width="4.5" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wyh-9h-sMx">
<rect key="frame" x="173" y="771" width="68.5" height="20.5"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Step 3/3" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Maa-bq-dEa">
<rect key="frame" x="10" y="3" width="48.5" height="14.5"/>
<fontDescription key="fontDescription" type="system" pointSize="12"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" " textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3NW-5M-g0h">
<rect key="frame" x="10" y="795.5" width="394" height="20.5"/>
</subviews>
<color key="backgroundColor" red="0.39954239130000002" green="0.39960256220000001" blue="0.39952337739999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="Maa-bq-dEa" firstAttribute="top" secondItem="wyh-9h-sMx" secondAttribute="top" constant="3" id="1h4-xu-9Jn"/>
<constraint firstItem="Maa-bq-dEa" firstAttribute="leading" secondItem="wyh-9h-sMx" secondAttribute="leading" constant="10" id="7Sy-eo-0q9"/>
<constraint firstAttribute="bottom" secondItem="Maa-bq-dEa" secondAttribute="bottom" constant="3" id="c2B-Vb-FHV"/>
<constraint firstAttribute="trailing" secondItem="Maa-bq-dEa" secondAttribute="trailing" constant="10" id="i4F-Gz-xe8"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="3"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="lfu-gT-avH">
<rect key="frame" x="100" y="670" width="214" height="6"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ikb-Rh-oGt">
<rect key="frame" x="0.0" y="0.0" width="68" height="6"/>
<color key="backgroundColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="3"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="q10-fa-3fY">
<rect key="frame" x="73" y="0.0" width="68" height="6"/>
<color key="backgroundColor" red="0.20067420599999999" green="0.20070806150000001" blue="0.20066353679999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="3"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="KKw-Ea-56U">
<rect key="frame" x="146" y="0.0" width="68" height="6"/>
<color key="backgroundColor" red="0.20067420599999999" green="0.20070806150000001" blue="0.20066353679999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
<integer key="value" value="3"/>
</userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<constraints>
<constraint firstAttribute="height" constant="6" id="zRt-Eh-zot"/>
</constraints>
</stackView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" position your face in the oval" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="l4S-dU-FVT">
<rect key="frame" x="96.5" y="801.5" width="221.5" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kiz-B2-kqL">
<rect key="frame" x="182" y="826" width="50" height="50"/>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="o70-jf-1ia">
<rect key="frame" x="60" y="69" width="294" height="581"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</view>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Scan-1.png" translatesAutoresizingMaskIntoConstraints="NO" id="qAP-z1-ph6">
<rect key="frame" x="183.5" y="696" width="47" height="60"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="Zge-fG-frc"/>
<constraint firstAttribute="width" constant="50" id="keQ-2a-Xpa"/>
<constraint firstAttribute="width" secondItem="qAP-z1-ph6" secondAttribute="height" multiplier="341:437" id="lbZ-b0-JQ6"/>
<constraint firstAttribute="height" constant="60" id="lpk-mw-Ydj"/>
</constraints>
<state key="normal" image="ic_record.png"/>
<connections>
<action selector="onRecord:" destination="-1" eventType="touchUpInside" id="ILY-WV-Xbt"/>
</connections>
</button>
</imageView>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<viewLayoutGuide key="safeArea" id="9lf-e8-SmZ"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="3NW-5M-g0h" firstAttribute="leading" secondItem="UFA-SZ-Qoz" secondAttribute="leading" constant="10" id="4ym-MQ-aiv"/>
<constraint firstAttribute="bottom" secondItem="kiz-B2-kqL" secondAttribute="bottom" constant="20" id="7Ve-1m-MDs"/>
<constraint firstItem="Z9C-Eh-mo9" firstAttribute="leading" secondItem="UFA-SZ-Qoz" secondAttribute="leading" id="8JA-pa-TC1"/>
<constraint firstItem="3NW-5M-g0h" firstAttribute="centerX" secondItem="UFA-SZ-Qoz" secondAttribute="centerX" id="II3-ki-ySd"/>
<constraint firstAttribute="trailing" secondItem="Z9C-Eh-mo9" secondAttribute="trailing" id="REw-9J-X08"/>
<constraint firstItem="fBN-yA-pbq" firstAttribute="centerX" secondItem="UFA-SZ-Qoz" secondAttribute="centerX" id="Ruf-Rt-odr"/>
<constraint firstItem="hK9-ib-LmH" firstAttribute="top" secondItem="fBN-yA-pbq" secondAttribute="bottom" constant="40" id="TTn-Mn-7u7"/>
<constraint firstItem="hK9-ib-LmH" firstAttribute="centerX" secondItem="9lf-e8-SmZ" secondAttribute="centerX" id="Uxb-XZ-mT4"/>
<constraint firstItem="3NW-5M-g0h" firstAttribute="top" secondItem="hK9-ib-LmH" secondAttribute="bottom" constant="40" id="Wii-y3-Z3n"/>
<constraint firstAttribute="bottom" secondItem="Z9C-Eh-mo9" secondAttribute="bottom" id="X1j-RU-oQ0"/>
<constraint firstItem="Z9C-Eh-mo9" firstAttribute="top" secondItem="UFA-SZ-Qoz" secondAttribute="top" id="ddy-Yj-eLX"/>
<constraint firstItem="hK9-ib-LmH" firstAttribute="leading" secondItem="9lf-e8-SmZ" secondAttribute="leading" id="ejz-BC-pDd"/>
<constraint firstItem="kiz-B2-kqL" firstAttribute="centerX" secondItem="UFA-SZ-Qoz" secondAttribute="centerX" id="li9-pn-4K7"/>
<constraint firstItem="kiz-B2-kqL" firstAttribute="top" secondItem="3NW-5M-g0h" secondAttribute="bottom" constant="10" id="pYI-bW-8SR"/>
<constraint firstItem="fBN-yA-pbq" firstAttribute="top" secondItem="9lf-e8-SmZ" secondAttribute="top" constant="40" id="xcc-3V-dgz"/>
<constraint firstItem="qAP-z1-ph6" firstAttribute="centerX" secondItem="9lf-e8-SmZ" secondAttribute="centerX" id="0MA-kq-exD"/>
<constraint firstItem="qAP-z1-ph6" firstAttribute="width" secondItem="qAP-z1-ph6" secondAttribute="height" multiplier="341:437" id="4yn-TJ-yqm"/>
<constraint firstAttribute="trailing" secondItem="vtt-nP-K7e" secondAttribute="trailing" id="6aW-K2-jlG"/>
<constraint firstItem="qAP-z1-ph6" firstAttribute="top" secondItem="lfu-gT-avH" secondAttribute="bottom" constant="20" id="Fh8-GZ-8yL"/>
<constraint firstItem="wyh-9h-sMx" firstAttribute="centerX" secondItem="9lf-e8-SmZ" secondAttribute="centerX" id="I6p-U2-cTt"/>
<constraint firstItem="vtt-nP-K7e" firstAttribute="top" secondItem="UFA-SZ-Qoz" secondAttribute="top" id="N3v-KG-OEA"/>
<constraint firstItem="o70-jf-1ia" firstAttribute="top" secondItem="9lf-e8-SmZ" secondAttribute="top" constant="25" id="NPG-HN-ut1"/>
<constraint firstItem="lfu-gT-avH" firstAttribute="leading" secondItem="9lf-e8-SmZ" secondAttribute="leading" constant="100" id="Uqs-Lb-Gn3"/>
<constraint firstItem="wyh-9h-sMx" firstAttribute="top" secondItem="qAP-z1-ph6" secondAttribute="bottom" constant="15" id="Ur0-Sk-VRP"/>
<constraint firstItem="o70-jf-1ia" firstAttribute="centerX" secondItem="9lf-e8-SmZ" secondAttribute="centerX" id="XTc-Jw-HgS"/>
<constraint firstItem="9lf-e8-SmZ" firstAttribute="bottom" secondItem="l4S-dU-FVT" secondAttribute="bottom" constant="40" id="aMm-fz-lIb"/>
<constraint firstItem="vtt-nP-K7e" firstAttribute="leading" secondItem="UFA-SZ-Qoz" secondAttribute="leading" id="ct7-fr-gJL"/>
<constraint firstItem="lfu-gT-avH" firstAttribute="top" secondItem="o70-jf-1ia" secondAttribute="bottom" constant="20" id="e65-sJ-G8O"/>
<constraint firstItem="o70-jf-1ia" firstAttribute="leading" secondItem="9lf-e8-SmZ" secondAttribute="leading" constant="60" id="g9o-8i-MtB"/>
<constraint firstItem="l4S-dU-FVT" firstAttribute="centerX" secondItem="9lf-e8-SmZ" secondAttribute="centerX" id="hd0-Yp-38K"/>
<constraint firstItem="l4S-dU-FVT" firstAttribute="top" secondItem="wyh-9h-sMx" secondAttribute="bottom" constant="10" id="lo9-cy-Wk0"/>
<constraint firstItem="lfu-gT-avH" firstAttribute="centerX" secondItem="9lf-e8-SmZ" secondAttribute="centerX" id="nV7-Zn-tQz"/>
<constraint firstAttribute="bottom" secondItem="vtt-nP-K7e" secondAttribute="bottom" id="okN-H6-tDN"/>
</constraints>
<viewLayoutGuide key="safeArea" id="9lf-e8-SmZ"/>
<point key="canvasLocation" x="133" y="154"/>
</view>
</objects>
<resources>
<image name="ic_record.png" width="100" height="100"/>
<image name="Scan-1.png" width="170.5" height="218.5"/>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment