فهرست منبع

1.修改iOS RAImage,增加POD模式。

Pen Li 7 سال پیش
والد
کامیت
52e7d8f187

+ 47 - 0
RA Image/RA Image.xcodeproj/project.pbxproj

@@ -29,6 +29,12 @@
 		42BC2D091EBAC75F0016B30D /* TouchImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 42BC2D081EBAC75F0016B30D /* TouchImageView.m */; };
 		42BC2D0C1EBB00FD0016B30D /* PhotoPreviewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 42BC2D0B1EBB00FD0016B30D /* PhotoPreviewController.m */; };
 		42BC6FFA1EC1ACF9004A5F30 /* UploadSettingController.m in Sources */ = {isa = PBXBuildFile; fileRef = 42BC6FF91EC1ACF9004A5F30 /* UploadSettingController.m */; };
+		42CE45C4217D6D0D003ECD01 /* PODModeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 42CE45C3217D6D0D003ECD01 /* PODModeViewController.m */; };
+		42CE45C6217D6D38003ECD01 /* pod.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 42CE45C5217D6D38003ECD01 /* pod.storyboard */; };
+		42CE45CE217D73E6003ECD01 /* signature.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 42CE45C8217D73E6003ECD01 /* signature.storyboard */; };
+		42CE45CF217D73E6003ECD01 /* Signature.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 42CE45C9217D73E6003ECD01 /* Signature.xcassets */; };
+		42CE45D0217D73E6003ECD01 /* SignatureView.m in Sources */ = {isa = PBXBuildFile; fileRef = 42CE45CB217D73E6003ECD01 /* SignatureView.m */; };
+		42CE45D1217D73E6003ECD01 /* SignatureViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 42CE45CD217D73E6003ECD01 /* SignatureViewController.m */; };
 		42D64CC11FD12B21003F49F9 /* RAConvertor.m in Sources */ = {isa = PBXBuildFile; fileRef = 42D64CC01FD12B21003F49F9 /* RAConvertor.m */; };
 		42E1B0FD1EB1C8EE00EEF27C /* LoginSwitchCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 42E1B0FB1EB1C8EE00EEF27C /* LoginSwitchCell.m */; };
 		42E1B0FE1EB1C8EE00EEF27C /* LoginTextFiledCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 42E1B0FC1EB1C8EE00EEF27C /* LoginTextFiledCell.m */; };
@@ -114,6 +120,15 @@
 		42BC2D0B1EBB00FD0016B30D /* PhotoPreviewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoPreviewController.m; sourceTree = "<group>"; };
 		42BC6FF81EC1ACF9004A5F30 /* UploadSettingController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UploadSettingController.h; sourceTree = "<group>"; };
 		42BC6FF91EC1ACF9004A5F30 /* UploadSettingController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UploadSettingController.m; sourceTree = "<group>"; };
+		42CE45C2217D6D0D003ECD01 /* PODModeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PODModeViewController.h; sourceTree = "<group>"; };
+		42CE45C3217D6D0D003ECD01 /* PODModeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PODModeViewController.m; sourceTree = "<group>"; };
+		42CE45C5217D6D38003ECD01 /* pod.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = pod.storyboard; sourceTree = "<group>"; };
+		42CE45C8217D73E6003ECD01 /* signature.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = signature.storyboard; sourceTree = "<group>"; };
+		42CE45C9217D73E6003ECD01 /* Signature.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Signature.xcassets; sourceTree = "<group>"; };
+		42CE45CA217D73E6003ECD01 /* SignatureView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignatureView.h; sourceTree = "<group>"; };
+		42CE45CB217D73E6003ECD01 /* SignatureView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignatureView.m; sourceTree = "<group>"; };
+		42CE45CC217D73E6003ECD01 /* SignatureViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignatureViewController.h; sourceTree = "<group>"; };
+		42CE45CD217D73E6003ECD01 /* SignatureViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignatureViewController.m; sourceTree = "<group>"; };
 		42D64CBF1FD12B20003F49F9 /* RAConvertor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RAConvertor.h; path = ../../common/RAConvertor.h; sourceTree = "<group>"; };
 		42D64CC01FD12B21003F49F9 /* RAConvertor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RAConvertor.m; path = ../../common/RAConvertor.m; sourceTree = "<group>"; };
 		42E1B0F91EB1C8EE00EEF27C /* LoginSwitchCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginSwitchCell.h; sourceTree = "<group>"; };
@@ -324,6 +339,30 @@
 			name = Common;
 			sourceTree = "<group>";
 		};
+		42CE45C1217D6CDA003ECD01 /* PODMode */ = {
+			isa = PBXGroup;
+			children = (
+				42CE45C2217D6D0D003ECD01 /* PODModeViewController.h */,
+				42CE45C3217D6D0D003ECD01 /* PODModeViewController.m */,
+				42CE45C5217D6D38003ECD01 /* pod.storyboard */,
+			);
+			name = PODMode;
+			sourceTree = "<group>";
+		};
+		42CE45C7217D73E6003ECD01 /* signature */ = {
+			isa = PBXGroup;
+			children = (
+				42CE45C8217D73E6003ECD01 /* signature.storyboard */,
+				42CE45C9217D73E6003ECD01 /* Signature.xcassets */,
+				42CE45CA217D73E6003ECD01 /* SignatureView.h */,
+				42CE45CB217D73E6003ECD01 /* SignatureView.m */,
+				42CE45CC217D73E6003ECD01 /* SignatureViewController.h */,
+				42CE45CD217D73E6003ECD01 /* SignatureViewController.m */,
+			);
+			name = signature;
+			path = "../../RedAnt ERP Mobile/common/Functions/signature";
+			sourceTree = "<group>";
+		};
 		42E1B0F71EB1C8BB00EEF27C /* Login */ = {
 			isa = PBXGroup;
 			children = (
@@ -512,6 +551,7 @@
 				71114AE21EB2DEE800D2200C /* cam scan */,
 				42E1B0F71EB1C8BB00EEF27C /* Login */,
 				42E1B10E1EB1E93E00EEF27C /* Root */,
+				42CE45C7217D73E6003ECD01 /* signature */,
 				71DCDC3A1EAF234E00BA045A /* AppDelegate.h */,
 				71DCDC3B1EAF234E00BA045A /* AppDelegate.m */,
 				42A829BE1EBC027100898B8A /* RootNavigationController.h */,
@@ -542,6 +582,7 @@
 				429F25211EC9AA4200C22ABB /* TakePhotoPreviewController.m */,
 				42056E851EB9CF5D0010597A /* BasicModeViewController.h */,
 				42056E861EB9CF5D0010597A /* BasicModeViewController.m */,
+				42CE45C1217D6CDA003ECD01 /* PODMode */,
 				426E6B201EB85BD200942BE1 /* PopMode */,
 				426E6B211EB85BFC00942BE1 /* ModelMode */,
 			);
@@ -612,11 +653,14 @@
 				71DCDC501EAF353000BA045A /* modelist.json in Resources */,
 				426E6B291EB8720400942BE1 /* Mode.storyboard in Resources */,
 				71114AEE1EB2DEF900D2200C /* cam_scan.storyboard in Resources */,
+				42CE45CE217D73E6003ECD01 /* signature.storyboard in Resources */,
 				71DCDC421EAF234E00BA045A /* RAImage.storyboard in Resources */,
 				71114AB31EB1C5C800D2200C /* LICENSE in Resources */,
 				42BC2D011EBAC4310016B30D /* RAImage_PhotoList.storyboard in Resources */,
 				42E1B1041EB1CCB200EEF27C /* login.json in Resources */,
+				42CE45C6217D6D38003ECD01 /* pod.storyboard in Resources */,
 				42A829CE1EBC6CA900898B8A /* Upload.storyboard in Resources */,
+				42CE45CF217D73E6003ECD01 /* Signature.xcassets in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -632,6 +676,7 @@
 				71114AB21EB1C5C800D2200C /* AESCrypt.m in Sources */,
 				42BC2D0C1EBB00FD0016B30D /* PhotoPreviewController.m in Sources */,
 				426E6B241EB85C2B00942BE1 /* PopModeViewController.m in Sources */,
+				42CE45C4217D6D0D003ECD01 /* PODModeViewController.m in Sources */,
 				71114AF01EB2DEF900D2200C /* RAMenu.m in Sources */,
 				71114AC61EB1C73B00D2200C /* ioapi.c in Sources */,
 				42056E7E1EB989AB0010597A /* JLKeyboardListener.m in Sources */,
@@ -645,6 +690,7 @@
 				71DCDC3F1EAF234E00BA045A /* RootViewController.m in Sources */,
 				42BC6FFA1EC1ACF9004A5F30 /* UploadSettingController.m in Sources */,
 				42A829C01EBC027100898B8A /* RootNavigationController.m in Sources */,
+				42CE45D1217D73E6003ECD01 /* SignatureViewController.m in Sources */,
 				42E1B1081EB1D9B100EEF27C /* LoginSettingViewController.m in Sources */,
 				71F8D1CE1EC955BF002003DB /* UIView+Toast.m in Sources */,
 				71114AC81EB1C73B00D2200C /* unzip.c in Sources */,
@@ -675,6 +721,7 @@
 				42E1B0FE1EB1C8EE00EEF27C /* LoginTextFiledCell.m in Sources */,
 				71961CB01EC00DDD002C4096 /* RANetworkTaskDelegate.m in Sources */,
 				42A829D21EBC6D3300898B8A /* UploadCell.m in Sources */,
+				42CE45D0217D73E6003ECD01 /* SignatureView.m in Sources */,
 				71114AB41EB1C5C800D2200C /* NSData+Base64.m in Sources */,
 				71114ACF1EB1C79300D2200C /* Reachability.m in Sources */,
 				42E1B0FD1EB1C8EE00EEF27C /* LoginSwitchCell.m in Sources */,

+ 23 - 0
RA Image/RA Image/Assets.xcassets/tap_signature.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "tap_signature.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "tap_signature@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "tap_signature@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
RA Image/RA Image/Assets.xcassets/tap_signature.imageset/tap_signature.png


BIN
RA Image/RA Image/Assets.xcassets/tap_signature.imageset/tap_signature@2x.png


BIN
RA Image/RA Image/Assets.xcassets/tap_signature.imageset/tap_signature@3x.png


+ 1 - 0
RA Image/RA Image/BasicModeViewController.h

@@ -29,6 +29,7 @@
 - (void)showTopImage;
 - (void)moveTmpImageToCache:(NSString *)img;
 - (BOOL)shouldUploadWithCurrentNerworkStatus;
+- (NSDictionary *)prepareSignature:(UIImage *)img;
 #pragma mark - 需要子类重写
 - (void)receiveImage:(UIImage *)img;
 

+ 24 - 0
RA Image/RA Image/BasicModeViewController.m

@@ -450,6 +450,30 @@
     return YES;
 }
 
+- (NSDictionary *)prepareSignature:(UIImage *)img {
+    
+    if (img) {
+        
+        NSString *path = [self saveImage:img];
+        
+        if (path) {// 保存成功
+            [self receiveImage:img];
+            NSString *md5 = [RAUtils md5WithFile:path];
+            NSMutableDictionary *photoDic = @{
+                                              @"check" : @(NO),
+                                              @"file"  : [path lastPathComponent],
+                                              @"md5"   : md5,
+                                              @"path"  : path,
+                                              }.mutableCopy;
+            
+            return photoDic;
+        }
+        
+    }
+    
+    return nil;
+}
+
 #pragma mark - Image Picker Button Action
 
 - (void)cancelCameraClick:(UIButton *)sender {

+ 21 - 0
RA Image/RA Image/PODModeViewController.h

@@ -0,0 +1,21 @@
+//
+//  PODModeViewController.h
+//  RA Image
+//
+//  Created by Jack on 2018/10/22.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "BasicModeViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PODModeViewController : BasicModeViewController
+
+@property (nonatomic,assign) UIKeyboardType inputKeyboardType;
+
++ (instancetype)viewControllerFromStoryboard;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 291 - 0
RA Image/RA Image/PODModeViewController.m

@@ -0,0 +1,291 @@
+//
+//  PODModeViewController.m
+//  RA Image
+//
+//  Created by Jack on 2018/10/22.
+//  Copyright © 2018年 USAI. All rights reserved.
+//
+
+#import "PODModeViewController.h"
+#import "UploadViewController.h"
+#import "AESCrypt.h"
+#import "config.h"
+#import "SignatureViewController.h"
+
+@interface PODModeViewController ()
+
+@property (strong, nonatomic) IBOutlet UIButton *scanBtn;
+@property (strong, nonatomic) IBOutlet UIButton *camerBtn;
+@property (strong, nonatomic) IBOutlet UIButton *uploadBtn;
+@property (strong, nonatomic) IBOutlet UIButton *imgBtn;
+@property (strong, nonatomic) IBOutlet UILabel *barcodeLabel;
+@property (strong, nonatomic) IBOutlet UIButton *typeBtn;
+@property (strong, nonatomic) IBOutlet UILabel *photoCountLabel;
+@property (strong, nonatomic) IBOutlet UIImageView * signatureView;
+
+@property (nonatomic,strong) UIImage *signature;
+
+@end
+
+@implementation PODModeViewController
+
++ (instancetype)viewControllerFromStoryboard {
+    PODModeViewController *vc = [[UIStoryboard storyboardWithName:@"pod" bundle:nil] instantiateViewControllerWithIdentifier:@"PODModeViewController"];
+    return vc;
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    
+    self.verify_msg0=[NSString stringWithFormat:@"%@ does not exist",self.barcodeTitle];
+    // Do any additional setup after loading the view.
+    
+    self.imgBtn.layer.borderColor = [UIColor blackColor].CGColor;
+    self.imgBtn.layer.borderWidth = 1.0f;
+    
+    self.barcodeLabel.text = [NSString stringWithFormat:@"%@:",self.barcodeTitle];
+    
+    self.signature = nil;
+    
+    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(signatureTapped:)];
+    [self.signatureView addGestureRecognizer:tap];
+}
+
+#pragma mark - Private
+
+- (void)clear {
+    self.barcode = nil;
+    [self.imgBtn setBackgroundImage:nil forState:UIControlStateNormal];
+    [self clearPhotos];
+    self.signature = nil;
+}
+
+- (void)setSignature:(UIImage *)signature {
+    _signature = signature;
+    
+    if (_signature) {
+        self.signatureView.image = _signature;
+    } else {
+        self.signatureView.image = [UIImage imageNamed:@"tap_signature"];
+    }
+}
+
+- (NSDictionary *)prepareSignatureTask {
+    
+    NSDictionary *photo = [self prepareSignature:self.signature];
+    
+    if (photo) {
+        
+        AppDelegate* Appdelegate=(AppDelegate*)[UIApplication sharedApplication].delegate;
+        NSMutableDictionary* task=[[NSMutableDictionary alloc]init];
+        
+        task[@"path"]=self.name;
+        task[@"file"]=photo[@"file"];
+        
+        task[@"url"]=Appdelegate.address;
+        NSString *md5 = [photo objectForKey:@"md5"];
+        
+        NSString* encryptu=[AESCrypt AES128Encrypt:Appdelegate.user key:@"usai"];
+        NSString* encryptp=[AESCrypt AES128Encrypt:Appdelegate.password key:@"usai"];
+        NSDictionary* params = @{
+                                 @"user" : encryptu,
+                                 @"password" : encryptp,
+                                 @"mode":self.name,
+                                 @"barcode":self.barcode,
+                                 @"_operate":@"upload",
+                                 @"_action":@"handset_new",
+                                 @"platform":@"ios",
+                                 @"signature":@1,
+                                 @"md5":md5
+                                 };
+        task[@"params"]=params;
+        
+        NSString *file = photo[@"file"];
+        [self moveTmpImageToCache:file];
+        
+        return task;
+    }
+    return nil;
+}
+
+#pragma mark - Button Action
+
+- (IBAction)imgBtnClick:(UIButton *)sender {
+    [self showPhotoList];
+}
+
+- (IBAction)scanBtnClick:(UIButton *)sender {
+    [self showScanner];
+}
+
+- (IBAction)cameraBtnClick:(UIButton *)sender {
+    [self clickCameraButton];
+}
+
+- (IBAction)uploadBtnClick:(UIButton *)sender {
+    
+    
+    
+    // check piid, photo...
+    if(self.barcode.length ==0)
+    {
+        [RAUtils message_alert:[NSString stringWithFormat:@"%@ cannot be blank",self.barcodeTitle] title:@"Warning" controller:self];
+        return;
+    }
+    if(self.photos.count ==0)
+    {
+        [RAUtils message_alert:@"You must take at least one photo." title:@"Warning" controller:self];
+        return;
+    }
+    if (self.signature == nil) {
+        [RAUtils message_alert:@"You must sign." title:@"Warning" controller:self];
+        return;
+    }
+    
+    
+    
+    
+    AppDelegate* Appdelegate=(AppDelegate*)[UIApplication sharedApplication].delegate;
+    NSString* encryptu=[AESCrypt AES128Encrypt:Appdelegate.user key:@"usai"];
+    NSString* encryptp=[AESCrypt AES128Encrypt:Appdelegate.password key:@"usai"];
+    NSMutableDictionary* params = [@{
+                                     @"user" : encryptu,
+                                     @"password" : encryptp,
+                                     @"mode":self.name,
+                                     @"barcode":self.barcode,
+                                     @"_operate":@"valid_upload",
+                                     @"_action":@"handset_new",
+                                     @"platform":@"ios"
+                                     } mutableCopy];
+    [self verify:params];
+    
+    //    UploadViewController *upVC = (UploadViewController *)[self viewControllerInStoryboard:@"Upload" withId:@"UploadViewController"];
+    //    [self.navigationController pushViewController:upVC animated:YES];
+}
+
+-(void)addTasks
+{
+    
+    AppDelegate* Appdelegate=(AppDelegate*)[UIApplication sharedApplication].delegate;
+    
+    if (![self shouldUploadWithCurrentNerworkStatus]) {
+        [self.view makeToast:@"Current network is not WiFi,you can upload it manually when wifi connected." duration:3.0 position:CSToastPositionCenter];
+    }
+    
+    //prepare upload
+    NSMutableArray* tasks = [NSMutableArray new];
+    
+    for(NSMutableDictionary* photo in self.photos)
+    {
+        
+        NSMutableDictionary* task=[[NSMutableDictionary alloc]init];
+        
+        
+        task[@"path"]=self.name;
+        task[@"file"]=photo[@"file"];
+        
+        task[@"url"]=Appdelegate.address;
+        NSString *md5 = [photo objectForKey:@"md5"];
+        
+        
+        
+        NSString* encryptu=[AESCrypt AES128Encrypt:Appdelegate.user key:@"usai"];
+        NSString* encryptp=[AESCrypt AES128Encrypt:Appdelegate.password key:@"usai"];
+        NSDictionary* params = @{
+                                 @"user" : encryptu,
+                                 @"password" : encryptp,
+                                 @"mode":self.name,
+                                 @"barcode":self.barcode,
+                                 @"_operate":@"upload",
+                                 @"_action":@"handset_new",
+                                 @"platform":@"ios",
+                                 @"md5":md5
+                                 };
+        task[@"params"]=params;
+        
+        NSString *file = photo[@"file"];
+        [self moveTmpImageToCache:file];
+        
+        [tasks addObject:task];
+        
+    }
+    
+    // Signature
+    NSDictionary *signatureTask = [self prepareSignatureTask];
+    if (signatureTask) {
+        [tasks addObject:signatureTask];
+    }
+    
+    //    // add upload tasks;
+    [Appdelegate.uploadManager addTasks:tasks];
+    
+    [self clear];
+}
+
+- (IBAction)typeBtnClick:(UIButton *)sender {
+    [self showBarcodeInput:self.inputKeyboardType];//UIKeyboardTypeNumberPad
+}
+
+- (IBAction)signatureTapped:(id)sender {
+    
+    SignatureViewController * vc =[ [UIStoryboard storyboardWithName:@"signature"
+                                                              bundle:[NSBundle mainBundle]]
+                                   instantiateViewControllerWithIdentifier:@"SignatureViewController"];
+    
+    
+    __weak typeof(self) weakSelf = self;
+    vc.onReturnImg = ^(UIImage* img)
+    {
+        if(img!=nil) {
+            weakSelf.signature = img;
+        }
+    };
+    [self.navigationController pushViewController:vc animated:NO];
+    
+}
+
+#pragma mark - Super Method
+
+- (void)receiveImage:(UIImage *)img {
+    
+    [self.imgBtn setBackgroundImage:img forState:UIControlStateNormal];
+    
+}
+
+- (void)setBarcode:(NSString *)barcode {
+    [super setBarcode:barcode];
+    
+    
+    
+    if (!barcode) {
+        barcode = @"";
+    }
+    else
+    {
+        if(![RAUtils isNumeric:barcode]&&![self.name isEqualToString:@"Receiving"])
+        {
+            
+            NSString* msg = [NSString stringWithFormat:@"%@ must be a number",self.barcodeTitle];
+            
+            [self.view makeToast:msg duration:3.0 position:CSToastPositionCenter];
+            
+            barcode = @"";
+        }
+    }
+    self.barcodeLabel.text = [NSString stringWithFormat:@"%@:%@",self.barcodeTitle,barcode];
+}
+
+- (void)setPhotoCount:(NSUInteger)photoCount {
+    [super setPhotoCount:photoCount];
+    NSString *str = nil;
+    if (photoCount > 0) {
+        str = [NSString stringWithFormat:@"%lu Photos",photoCount];
+    } else {
+        str = @"No Photos";
+    }
+    self.photoCountLabel.text = str;
+}
+
+
+@end

+ 1 - 0
RA Image/RA Image/RootNavigationController.m

@@ -19,6 +19,7 @@
 - (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view.
+    self.view.backgroundColor = [UIColor whiteColor];
 }
 
 - (void)didReceiveMemoryWarning {

+ 6 - 0
RA Image/RA Image/RootViewController.m

@@ -12,6 +12,7 @@
 #import "PopModeViewController.h"
 #import "ModelModeViewController.h"
 #import "UploadSettingController.h"
+#import "PODModeViewController.h"
 
 static NSString *kLastMode = @"lastChooseMode";
 
@@ -170,6 +171,11 @@ static NSString *kLastMode = @"lastChooseMode";
             vc.inputKeyboardType = UIKeyboardTypeDefault;
         }
         modeVC = vc;
+    } else if ([cell.mode isEqualToString:@"POD"]) {
+        
+        PODModeViewController *vc = [PODModeViewController viewControllerFromStoryboard];
+        vc.inputKeyboardType = UIKeyboardTypeDefault;
+        modeVC = vc;
     }
     
     if (modeVC) {

+ 339 - 0
RA Image/RA Image/pod.storyboard

@@ -0,0 +1,339 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina4_7" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14283.14"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <scenes>
+        <!--Mode View Controller-->
+        <scene sceneID="0Uq-gH-E43">
+            <objects>
+                <viewController storyboardIdentifier="PODModeViewController" useStoryboardIdentifierAsRestorationIdentifier="YES" id="I0z-KN-bl5" customClass="PODModeViewController" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="q2P-ID-lRk"/>
+                        <viewControllerLayoutGuide type="bottom" id="Vb1-aL-kW0"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="kMJ-qN-sNr">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="a7p-Is-pkn">
+                                <rect key="frame" x="47.5" y="50" width="280" height="280"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="280" id="3uL-Sz-8iY"/>
+                                    <constraint firstAttribute="height" constant="300" id="K6U-1F-65K"/>
+                                    <constraint firstAttribute="width" constant="200" id="QS0-oE-Lc4"/>
+                                    <constraint firstAttribute="width" constant="300" id="Z1A-Hg-I6w"/>
+                                    <constraint firstAttribute="height" constant="200" id="chC-74-nMq"/>
+                                    <constraint firstAttribute="width" constant="280" id="sHM-ee-xWI"/>
+                                </constraints>
+                                <variation key="default">
+                                    <mask key="constraints">
+                                        <exclude reference="3uL-Sz-8iY"/>
+                                        <exclude reference="QS0-oE-Lc4"/>
+                                        <exclude reference="K6U-1F-65K"/>
+                                        <exclude reference="sHM-ee-xWI"/>
+                                        <exclude reference="Z1A-Hg-I6w"/>
+                                        <exclude reference="chC-74-nMq"/>
+                                    </mask>
+                                </variation>
+                                <variation key="heightClass=compact-widthClass=compact">
+                                    <mask key="constraints">
+                                        <include reference="QS0-oE-Lc4"/>
+                                        <include reference="chC-74-nMq"/>
+                                    </mask>
+                                </variation>
+                                <variation key="heightClass=compact-widthClass=regular">
+                                    <mask key="constraints">
+                                        <include reference="K6U-1F-65K"/>
+                                        <include reference="Z1A-Hg-I6w"/>
+                                    </mask>
+                                </variation>
+                                <variation key="heightClass=regular-widthClass=compact">
+                                    <mask key="constraints">
+                                        <include reference="3uL-Sz-8iY"/>
+                                        <exclude reference="QS0-oE-Lc4"/>
+                                        <include reference="sHM-ee-xWI"/>
+                                        <exclude reference="chC-74-nMq"/>
+                                    </mask>
+                                </variation>
+                                <connections>
+                                    <action selector="imgBtnClick:" destination="I0z-KN-bl5" eventType="touchUpInside" id="Tsp-XQ-nbx"/>
+                                </connections>
+                            </button>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kIh-Dp-XpI">
+                                <rect key="frame" x="47.5" y="560" width="60" height="60"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="60" id="5ZT-hx-KaN"/>
+                                </constraints>
+                                <state key="normal" backgroundImage="scan"/>
+                                <variation key="default">
+                                    <mask key="constraints">
+                                        <exclude reference="5ZT-hx-KaN"/>
+                                    </mask>
+                                </variation>
+                                <variation key="heightClass=compact-widthClass=compact">
+                                    <mask key="constraints">
+                                        <include reference="5ZT-hx-KaN"/>
+                                    </mask>
+                                </variation>
+                                <variation key="heightClass=regular-widthClass=compact">
+                                    <mask key="constraints">
+                                        <include reference="5ZT-hx-KaN"/>
+                                    </mask>
+                                </variation>
+                                <connections>
+                                    <action selector="scanBtnClick:" destination="I0z-KN-bl5" eventType="touchUpInside" id="Bol-xq-P6P"/>
+                                </connections>
+                            </button>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="utR-SX-vR9">
+                                <rect key="frame" x="157.5" y="560" width="60" height="60"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="60" id="42s-55-8Tl"/>
+                                </constraints>
+                                <state key="normal" backgroundImage="camera"/>
+                                <connections>
+                                    <action selector="cameraBtnClick:" destination="I0z-KN-bl5" eventType="touchUpInside" id="xS4-Rb-Mox"/>
+                                </connections>
+                            </button>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PIID:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fCY-Do-hbH">
+                                <rect key="frame" x="47.5" y="353" width="280" height="27"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                <nil key="textColor"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="a7e-bt-oTC">
+                                <rect key="frame" x="297.5" y="353" width="30" height="27"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="30" id="FiY-CX-2mo"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                <state key="normal" title="Type">
+                                    <color key="titleColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                </state>
+                                <connections>
+                                    <action selector="typeBtnClick:" destination="I0z-KN-bl5" eventType="touchUpInside" id="ipe-RF-B1u"/>
+                                </connections>
+                            </button>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Oef-9h-Tp8">
+                                <rect key="frame" x="267.5" y="560" width="60" height="60"/>
+                                <state key="normal" backgroundImage="upload"/>
+                                <connections>
+                                    <action selector="uploadBtnClick:" destination="I0z-KN-bl5" eventType="touchUpInside" id="4RX-PK-Mlw"/>
+                                </connections>
+                            </button>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No Photos" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rhm-0R-9Ma">
+                                <rect key="frame" x="47.5" y="310" width="280" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="20" id="r64-ty-wkN"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                <color key="textColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <imageView contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="tap_signature" translatesAutoresizingMaskIntoConstraints="NO" id="RqS-9Z-Sx4">
+                                <rect key="frame" x="47.5" y="385" width="280" height="170"/>
+                            </imageView>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                        <constraints>
+                            <constraint firstItem="kIh-Dp-XpI" firstAttribute="leading" secondItem="a7p-Is-pkn" secondAttribute="trailing" constant="30" id="77K-g8-GCE"/>
+                            <constraint firstItem="utR-SX-vR9" firstAttribute="bottom" secondItem="kIh-Dp-XpI" secondAttribute="bottom" id="9p6-dA-fSp"/>
+                            <constraint firstItem="rhm-0R-9Ma" firstAttribute="top" secondItem="a7p-Is-pkn" secondAttribute="bottom" constant="-20" id="9yG-lR-XFt"/>
+                            <constraint firstItem="Oef-9h-Tp8" firstAttribute="height" secondItem="utR-SX-vR9" secondAttribute="height" id="ADi-At-7xY"/>
+                            <constraint firstItem="a7e-bt-oTC" firstAttribute="leading" secondItem="fCY-Do-hbH" secondAttribute="trailing" constant="-30" id="Ak0-43-MJ4"/>
+                            <constraint firstItem="Oef-9h-Tp8" firstAttribute="height" secondItem="utR-SX-vR9" secondAttribute="height" id="ArA-Pd-UGo"/>
+                            <constraint firstItem="kIh-Dp-XpI" firstAttribute="width" secondItem="utR-SX-vR9" secondAttribute="width" id="BGd-pI-v45"/>
+                            <constraint firstItem="RqS-9Z-Sx4" firstAttribute="leading" secondItem="fCY-Do-hbH" secondAttribute="leading" id="BaL-aS-ICN"/>
+                            <constraint firstItem="rhm-0R-9Ma" firstAttribute="width" secondItem="a7p-Is-pkn" secondAttribute="width" id="ETo-Q9-Bdv"/>
+                            <constraint firstItem="kIh-Dp-XpI" firstAttribute="bottom" secondItem="a7p-Is-pkn" secondAttribute="bottom" id="FBn-x3-xLh"/>
+                            <constraint firstItem="a7p-Is-pkn" firstAttribute="centerY" secondItem="kMJ-qN-sNr" secondAttribute="centerY" id="FPj-bH-SFw"/>
+                            <constraint firstItem="RqS-9Z-Sx4" firstAttribute="trailing" secondItem="fCY-Do-hbH" secondAttribute="trailing" id="HHm-ck-M9c"/>
+                            <constraint firstItem="fCY-Do-hbH" firstAttribute="width" secondItem="a7p-Is-pkn" secondAttribute="width" id="HKe-Oa-0Ug"/>
+                            <constraint firstItem="utR-SX-vR9" firstAttribute="baseline" secondItem="kIh-Dp-XpI" secondAttribute="firstBaseline" id="Hvu-Sf-aUh"/>
+                            <constraint firstItem="fCY-Do-hbH" firstAttribute="leading" secondItem="a7p-Is-pkn" secondAttribute="trailing" constant="30" id="LKT-t3-ALq"/>
+                            <constraint firstItem="utR-SX-vR9" firstAttribute="height" secondItem="kIh-Dp-XpI" secondAttribute="height" id="MzH-WF-Q9y"/>
+                            <constraint firstItem="fCY-Do-hbH" firstAttribute="bottom" secondItem="a7p-Is-pkn" secondAttribute="bottom" constant="50" id="NFu-FS-o0X"/>
+                            <constraint firstItem="a7p-Is-pkn" firstAttribute="centerY" secondItem="kMJ-qN-sNr" secondAttribute="centerY" id="O8A-Qj-dGD"/>
+                            <constraint firstItem="Oef-9h-Tp8" firstAttribute="width" secondItem="utR-SX-vR9" secondAttribute="width" id="P1B-fg-vr9"/>
+                            <constraint firstItem="utR-SX-vR9" firstAttribute="centerX" secondItem="kMJ-qN-sNr" secondAttribute="centerX" id="PEi-ln-WNk"/>
+                            <constraint firstItem="Oef-9h-Tp8" firstAttribute="height" secondItem="utR-SX-vR9" secondAttribute="height" id="QLn-1G-8nq"/>
+                            <constraint firstItem="kIh-Dp-XpI" firstAttribute="leading" secondItem="fCY-Do-hbH" secondAttribute="leading" id="Qa7-SG-Ye8"/>
+                            <constraint firstItem="Oef-9h-Tp8" firstAttribute="centerY" secondItem="utR-SX-vR9" secondAttribute="centerY" id="STV-74-ZWe"/>
+                            <constraint firstItem="Oef-9h-Tp8" firstAttribute="trailing" secondItem="fCY-Do-hbH" secondAttribute="trailing" id="Sni-bE-3Sw"/>
+                            <constraint firstItem="utR-SX-vR9" firstAttribute="width" secondItem="kIh-Dp-XpI" secondAttribute="width" id="TPQ-He-FSW"/>
+                            <constraint firstItem="fCY-Do-hbH" firstAttribute="top" secondItem="a7p-Is-pkn" secondAttribute="top" id="Vdb-ev-31v"/>
+                            <constraint firstItem="utR-SX-vR9" firstAttribute="centerX" secondItem="fCY-Do-hbH" secondAttribute="centerX" id="VuX-At-TI1"/>
+                            <constraint firstItem="a7p-Is-pkn" firstAttribute="top" secondItem="q2P-ID-lRk" secondAttribute="bottom" constant="30" id="XRV-nH-hai"/>
+                            <constraint firstItem="fCY-Do-hbH" firstAttribute="leading" secondItem="a7p-Is-pkn" secondAttribute="leading" id="XVf-dN-a5C"/>
+                            <constraint firstItem="utR-SX-vR9" firstAttribute="top" secondItem="RqS-9Z-Sx4" secondAttribute="bottom" constant="5" id="ZR2-Iu-fYw"/>
+                            <constraint firstItem="fCY-Do-hbH" firstAttribute="top" secondItem="a7p-Is-pkn" secondAttribute="top" id="aYv-1V-hoW"/>
+                            <constraint firstItem="utR-SX-vR9" firstAttribute="width" secondItem="kIh-Dp-XpI" secondAttribute="width" id="bWY-vn-l0j"/>
+                            <constraint firstItem="rhm-0R-9Ma" firstAttribute="leading" secondItem="a7p-Is-pkn" secondAttribute="leading" id="dxY-PL-cza"/>
+                            <constraint firstItem="kIh-Dp-XpI" firstAttribute="bottom" secondItem="a7p-Is-pkn" secondAttribute="bottom" id="e6H-SX-pIW"/>
+                            <constraint firstItem="a7p-Is-pkn" firstAttribute="leading" secondItem="kMJ-qN-sNr" secondAttribute="leadingMargin" constant="30" id="eVY-C4-J5s"/>
+                            <constraint firstItem="a7e-bt-oTC" firstAttribute="top" secondItem="fCY-Do-hbH" secondAttribute="top" id="eyL-OR-10b"/>
+                            <constraint firstItem="utR-SX-vR9" firstAttribute="bottom" secondItem="kIh-Dp-XpI" secondAttribute="bottom" id="fX1-cg-baA"/>
+                            <constraint firstItem="a7p-Is-pkn" firstAttribute="centerX" secondItem="kMJ-qN-sNr" secondAttribute="centerX" id="gZf-hY-54f"/>
+                            <constraint firstItem="Oef-9h-Tp8" firstAttribute="bottom" secondItem="utR-SX-vR9" secondAttribute="bottom" id="gsr-Wf-jrv"/>
+                            <constraint firstItem="utR-SX-vR9" firstAttribute="top" secondItem="kIh-Dp-XpI" secondAttribute="top" id="hHZ-8z-RSD"/>
+                            <constraint firstItem="Oef-9h-Tp8" firstAttribute="bottom" secondItem="utR-SX-vR9" secondAttribute="bottom" id="hsj-Ka-rj4"/>
+                            <constraint firstItem="RqS-9Z-Sx4" firstAttribute="top" secondItem="fCY-Do-hbH" secondAttribute="bottom" constant="5" id="l8A-ro-K6N"/>
+                            <constraint firstItem="fCY-Do-hbH" firstAttribute="leading" secondItem="kIh-Dp-XpI" secondAttribute="leading" id="m5f-9o-xA1"/>
+                            <constraint firstItem="utR-SX-vR9" firstAttribute="baseline" secondItem="Oef-9h-Tp8" secondAttribute="baseline" id="mBF-bs-g8J"/>
+                            <constraint firstItem="Oef-9h-Tp8" firstAttribute="trailing" secondItem="fCY-Do-hbH" secondAttribute="trailing" id="mOy-Bj-2Vt"/>
+                            <constraint firstItem="Oef-9h-Tp8" firstAttribute="trailing" secondItem="a7p-Is-pkn" secondAttribute="trailing" id="mob-hE-MBP"/>
+                            <constraint firstItem="Vb1-aL-kW0" firstAttribute="top" secondItem="utR-SX-vR9" secondAttribute="bottom" constant="47" id="nWh-OP-vjR"/>
+                            <constraint firstItem="utR-SX-vR9" firstAttribute="firstBaseline" secondItem="kIh-Dp-XpI" secondAttribute="baseline" id="nZd-sx-TUU"/>
+                            <constraint firstAttribute="trailingMargin" secondItem="fCY-Do-hbH" secondAttribute="trailing" id="pFW-Iy-VGN"/>
+                            <constraint firstItem="a7p-Is-pkn" firstAttribute="top" secondItem="q2P-ID-lRk" secondAttribute="bottom" constant="30" id="pzB-OS-UY5"/>
+                            <constraint firstItem="a7e-bt-oTC" firstAttribute="height" secondItem="fCY-Do-hbH" secondAttribute="height" id="qLx-OB-lCL"/>
+                            <constraint firstItem="a7p-Is-pkn" firstAttribute="leading" secondItem="kMJ-qN-sNr" secondAttribute="leadingMargin" constant="30" id="qPJ-in-xga"/>
+                            <constraint firstItem="kIh-Dp-XpI" firstAttribute="leading" secondItem="fCY-Do-hbH" secondAttribute="leading" id="qoK-En-j6n"/>
+                            <constraint firstItem="a7e-bt-oTC" firstAttribute="centerY" secondItem="fCY-Do-hbH" secondAttribute="centerY" id="sgE-pf-J8J"/>
+                            <constraint firstItem="Oef-9h-Tp8" firstAttribute="width" secondItem="utR-SX-vR9" secondAttribute="width" id="vTL-Db-7b2"/>
+                            <constraint firstItem="kIh-Dp-XpI" firstAttribute="height" secondItem="utR-SX-vR9" secondAttribute="height" id="wxU-rx-5Xn"/>
+                            <constraint firstItem="Oef-9h-Tp8" firstAttribute="width" secondItem="utR-SX-vR9" secondAttribute="width" id="xLf-Iz-yOl"/>
+                            <constraint firstItem="utR-SX-vR9" firstAttribute="centerX" secondItem="fCY-Do-hbH" secondAttribute="centerX" id="yNY-TU-ZgB"/>
+                            <constraint firstAttribute="trailingMargin" secondItem="fCY-Do-hbH" secondAttribute="trailing" id="zBN-od-jFM"/>
+                        </constraints>
+                        <variation key="default">
+                            <mask key="constraints">
+                                <exclude reference="FPj-bH-SFw"/>
+                                <exclude reference="O8A-Qj-dGD"/>
+                                <exclude reference="XRV-nH-hai"/>
+                                <exclude reference="eVY-C4-J5s"/>
+                                <exclude reference="gZf-hY-54f"/>
+                                <exclude reference="pzB-OS-UY5"/>
+                                <exclude reference="qPJ-in-xga"/>
+                                <exclude reference="HKe-Oa-0Ug"/>
+                                <exclude reference="LKT-t3-ALq"/>
+                                <exclude reference="NFu-FS-o0X"/>
+                                <exclude reference="Vdb-ev-31v"/>
+                                <exclude reference="XVf-dN-a5C"/>
+                                <exclude reference="aYv-1V-hoW"/>
+                                <exclude reference="m5f-9o-xA1"/>
+                                <exclude reference="pFW-Iy-VGN"/>
+                                <exclude reference="zBN-od-jFM"/>
+                                <exclude reference="77K-g8-GCE"/>
+                                <exclude reference="BGd-pI-v45"/>
+                                <exclude reference="FBn-x3-xLh"/>
+                                <exclude reference="Qa7-SG-Ye8"/>
+                                <exclude reference="e6H-SX-pIW"/>
+                                <exclude reference="qoK-En-j6n"/>
+                                <exclude reference="wxU-rx-5Xn"/>
+                                <exclude reference="nWh-OP-vjR"/>
+                                <exclude reference="9p6-dA-fSp"/>
+                                <exclude reference="Hvu-Sf-aUh"/>
+                                <exclude reference="MzH-WF-Q9y"/>
+                                <exclude reference="PEi-ln-WNk"/>
+                                <exclude reference="TPQ-He-FSW"/>
+                                <exclude reference="VuX-At-TI1"/>
+                                <exclude reference="bWY-vn-l0j"/>
+                                <exclude reference="fX1-cg-baA"/>
+                                <exclude reference="hHZ-8z-RSD"/>
+                                <exclude reference="mBF-bs-g8J"/>
+                                <exclude reference="nZd-sx-TUU"/>
+                                <exclude reference="yNY-TU-ZgB"/>
+                                <exclude reference="ADi-At-7xY"/>
+                                <exclude reference="ArA-Pd-UGo"/>
+                                <exclude reference="P1B-fg-vr9"/>
+                                <exclude reference="QLn-1G-8nq"/>
+                                <exclude reference="STV-74-ZWe"/>
+                                <exclude reference="Sni-bE-3Sw"/>
+                                <exclude reference="gsr-Wf-jrv"/>
+                                <exclude reference="hsj-Ka-rj4"/>
+                                <exclude reference="mOy-Bj-2Vt"/>
+                                <exclude reference="mob-hE-MBP"/>
+                                <exclude reference="vTL-Db-7b2"/>
+                                <exclude reference="xLf-Iz-yOl"/>
+                            </mask>
+                        </variation>
+                        <variation key="heightClass=compact-widthClass=compact">
+                            <mask key="constraints">
+                                <include reference="FPj-bH-SFw"/>
+                                <include reference="qPJ-in-xga"/>
+                                <include reference="aYv-1V-hoW"/>
+                                <include reference="m5f-9o-xA1"/>
+                                <include reference="pFW-Iy-VGN"/>
+                                <include reference="77K-g8-GCE"/>
+                                <include reference="e6H-SX-pIW"/>
+                                <include reference="MzH-WF-Q9y"/>
+                                <include reference="TPQ-He-FSW"/>
+                                <include reference="VuX-At-TI1"/>
+                                <include reference="fX1-cg-baA"/>
+                                <include reference="QLn-1G-8nq"/>
+                                <include reference="hsj-Ka-rj4"/>
+                                <include reference="mOy-Bj-2Vt"/>
+                                <include reference="xLf-Iz-yOl"/>
+                            </mask>
+                        </variation>
+                        <variation key="heightClass=compact-widthClass=regular">
+                            <mask key="constraints">
+                                <include reference="O8A-Qj-dGD"/>
+                                <include reference="eVY-C4-J5s"/>
+                                <include reference="LKT-t3-ALq"/>
+                                <include reference="Vdb-ev-31v"/>
+                                <include reference="zBN-od-jFM"/>
+                                <include reference="BGd-pI-v45"/>
+                                <include reference="FBn-x3-xLh"/>
+                                <include reference="Qa7-SG-Ye8"/>
+                                <include reference="wxU-rx-5Xn"/>
+                                <include reference="9p6-dA-fSp"/>
+                                <include reference="yNY-TU-ZgB"/>
+                                <include reference="ArA-Pd-UGo"/>
+                                <include reference="Sni-bE-3Sw"/>
+                                <include reference="gsr-Wf-jrv"/>
+                                <include reference="vTL-Db-7b2"/>
+                            </mask>
+                        </variation>
+                        <variation key="heightClass=regular-widthClass=compact">
+                            <mask key="constraints">
+                                <include reference="XRV-nH-hai"/>
+                                <include reference="gZf-hY-54f"/>
+                                <include reference="pzB-OS-UY5"/>
+                                <include reference="HKe-Oa-0Ug"/>
+                                <include reference="NFu-FS-o0X"/>
+                                <include reference="XVf-dN-a5C"/>
+                                <include reference="qoK-En-j6n"/>
+                                <include reference="nWh-OP-vjR"/>
+                                <include reference="Hvu-Sf-aUh"/>
+                                <include reference="PEi-ln-WNk"/>
+                                <include reference="bWY-vn-l0j"/>
+                                <include reference="hHZ-8z-RSD"/>
+                                <include reference="mBF-bs-g8J"/>
+                                <include reference="nZd-sx-TUU"/>
+                                <include reference="ADi-At-7xY"/>
+                                <include reference="P1B-fg-vr9"/>
+                                <include reference="STV-74-ZWe"/>
+                                <include reference="mob-hE-MBP"/>
+                            </mask>
+                        </variation>
+                    </view>
+                    <connections>
+                        <outlet property="barcodeLabel" destination="fCY-Do-hbH" id="uca-3h-Jwn"/>
+                        <outlet property="camerBtn" destination="utR-SX-vR9" id="6z9-mq-o5H"/>
+                        <outlet property="imgBtn" destination="a7p-Is-pkn" id="MDT-UK-Ysq"/>
+                        <outlet property="photoCountLabel" destination="rhm-0R-9Ma" id="qab-Pl-Oi1"/>
+                        <outlet property="scanBtn" destination="kIh-Dp-XpI" id="DEb-Kc-iwe"/>
+                        <outlet property="signatureView" destination="RqS-9Z-Sx4" id="mAY-wm-Q9N"/>
+                        <outlet property="typeBtn" destination="a7e-bt-oTC" id="rY1-8G-mTg"/>
+                        <outlet property="uploadBtn" destination="Oef-9h-Tp8" id="gid-pG-9pe"/>
+                    </connections>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="0nx-uS-ZoJ" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="-4.0479760119940034" y="109.59999999999999"/>
+        </scene>
+    </scenes>
+    <resources>
+        <image name="camera" width="60" height="60"/>
+        <image name="scan" width="60" height="60"/>
+        <image name="tap_signature" width="180" height="180"/>
+        <image name="upload" width="60" height="60"/>
+    </resources>
+</document>