diff --git a/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate b/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate index c80cf176f960c217ba4cde51172b0c5515748257..e37fec9904c26d34346decd56789a1a5fe1ac27d 100644 Binary files a/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate and b/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 216ee44a169a423c337b1cc8c733a132117605a0..0aaf9d7cb081d8f966b1aa411a2d7926f663fb55 100644 --- a/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -3,4 +3,38 @@ uuid = "270C854E-19C5-4254-A77F-7774BFB2FDA6" type = "0" version = "2.0"> + <Breakpoints> + <BreakpointProxy + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> + <BreakpointContent + uuid = "95CD7D19-EA69-443B-B2CB-85BF78B4914E" + shouldBeEnabled = "No" + ignoreCount = "0" + continueAfterRunningActions = "No" + filePath = "MiniScanner/Modules/EditViewController/EditViewController.swift" + startingColumnNumber = "9223372036854775807" + endingColumnNumber = "9223372036854775807" + startingLineNumber = "328" + endingLineNumber = "328" + landmarkName = "updateImage(screenShot:at:)" + landmarkType = "7"> + </BreakpointContent> + </BreakpointProxy> + <BreakpointProxy + BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint"> + <BreakpointContent + uuid = "E0378F70-5CED-4217-A237-C2D061DC0AB8" + shouldBeEnabled = "No" + ignoreCount = "0" + continueAfterRunningActions = "No" + filePath = "MiniScanner/Modules/EditViewController/EditViewController.swift" + startingColumnNumber = "9223372036854775807" + endingColumnNumber = "9223372036854775807" + startingLineNumber = "329" + endingLineNumber = "329" + landmarkName = "updateImage(screenShot:at:)" + landmarkType = "7"> + </BreakpointContent> + </BreakpointProxy> + </Breakpoints> </Bucket> diff --git a/MiniScanner/.DS_Store b/MiniScanner/.DS_Store index 6263a47aa40deb900a3e686764896cf143d95611..36235e49965c28f0914f34d17e2768ee4d2e4cc4 100644 Binary files a/MiniScanner/.DS_Store and b/MiniScanner/.DS_Store differ diff --git a/MiniScanner/Modules/EditViewController/CustomViews/BannerView.swift b/MiniScanner/Modules/EditViewController/CustomViews/BannerView.swift index 7294d2306bbbf7d07cc527a150260c54ee3bc689..3cd25b0c3ecb8d648a327438ab483f4e57140e8e 100644 --- a/MiniScanner/Modules/EditViewController/CustomViews/BannerView.swift +++ b/MiniScanner/Modules/EditViewController/CustomViews/BannerView.swift @@ -13,6 +13,11 @@ protocol BannerViewDelegate { func delete(index: Int) func preview(index: Int) func update(session: MultiPageScanSession?) + func willStartDragging() + func deleteSignAt(index: Int) + func posChangedTo(pos: CGPoint, at: Int) + func sizeChanged(size: CGSize,angle: CGFloat, at: Int) + func updateImage(screenShot: UIImage, at: Int) } class BannerView: UIView { @@ -108,13 +113,12 @@ class BannerView: UIView { view.backgroundColor = .clear self.options = ImageScannerOptions() } - - - + func set(session: MultiPageScanSession) { self.scanSession = session clearUI() } + func reloadSignature(with : UIImage, isAll: Bool = false) { self.signatureImage = with self.signAllDoc = isAll @@ -137,7 +141,6 @@ class BannerView: UIView { cell?.imageView?.image = image delegate?.update(session: self.scanSession) } - } @@ -145,30 +148,127 @@ extension BannerView: FSPagerViewDataSource,FSPagerViewDelegate { func numberOfItems(in pagerView: FSPagerView) -> Int { scanSession?.scannedItems.count ?? 0 } + func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell { let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index) + cell.sign = UIImage() + cell.selectedStickerView1?.removeFromSuperview() if let item = scanSession?.scannedItems[index] { - cell.index = index cell.delegate = self cell.session = item - cell.imageView?.image = cell.session.renderedImage?.retrieveImage() - if let signature = cell.session.signtureImage { - if index == pagerView.currentIndex && signature != UIImage(){ - cell.sign = signature + cell.imageView?.image = item.renderedImage?.retrieveImage() + if let signature = item.signtureImage { + if let pos = item.signaturePosition { + if signAllDoc { + if signature != UIImage() && !cell.contentView.subviews.contains(cell.selectedStickerView1 ?? UIView()) { + cell.size = item.size + cell.position = pos + cell.rotation = item.rotate ?? 0 + cell.sign = signature + DispatchQueue.main.async { + cell.trashButton.isHidden = true + cell.previewButton.isHidden = true + cell.selectedStickerView1?.showEditing = false + let image = cell.contentView.TakeScreenshot() + cell.selectedStickerView1?.showEditing = true + + cell.trashButton.isHidden = false + cell.previewButton.isHidden = false + + self.delegate?.updateImage(screenShot: image, at: index) + } + + } else { + cell.sign = UIImage() + } + } else { + if index == pagerView.currentIndex && signature != UIImage() { + cell.size = item.size + cell.position = pos + cell.rotation = item.rotate ?? 0 + cell.sign = signature + } else { + cell.sign = UIImage() + } + } } } } return cell } - + func pagerView(_ pagerView: FSPagerView, willDisplay cell: FSPagerViewCell, forItemAt index: Int) { + cell.sign = UIImage() + cell.selectedStickerView1?.removeFromSuperview() + if let item = scanSession?.scannedItems[index] { + cell.index = index + cell.delegate = self + cell.session = item + cell.imageView?.image = item.renderedImage?.retrieveImage() + if let signature = item.signtureImage { + if let pos = item.signaturePosition { + if signAllDoc { + if signature != UIImage() && !cell.contentView.subviews.contains(cell.selectedStickerView1 ?? UIView()) { + cell.size = item.size + cell.position = pos + cell.rotation = item.rotate ?? 0 + cell.sign = signature + DispatchQueue.main.async { + cell.trashButton.isHidden = true + cell.previewButton.isHidden = true + cell.selectedStickerView1?.showEditing = false + let image = cell.contentView.TakeScreenshot() + cell.selectedStickerView1?.showEditing = true + + cell.trashButton.isHidden = false + cell.previewButton.isHidden = false + + self.delegate?.updateImage(screenShot: image, at: index) + } + + } else { + cell.sign = UIImage() + } + } else { + if signature != UIImage() && index == pagerView.currentIndex && !cell.contentView.subviews.contains(cell.selectedStickerView1 ?? UIView()){ + cell.size = item.size + cell.position = pos + cell.rotation = item.rotate ?? 0 + cell.sign = signature + + } else { + cell.sign = UIImage() + } + } + } + } + } + } + func pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int) { delegate?.updateSelectedIndex(index: targetIndex) } + + func pagerViewWillBeginDragging(_ pagerView: FSPagerView) { + delegate?.willStartDragging() + } } extension BannerView: FSPagerViewCellDelegate { + func updateScreenShots(image: UIImage, at: Int) { + delegate?.updateImage(screenShot: image, at: at) + } + + func sizeChangedto(size: CGSize, angle: CGFloat, at: Int) { + delegate?.sizeChanged(size: size, angle: angle, at: at) + + } + + func positionChangedTo(pos: CGPoint, at: Int) { + delegate?.posChangedTo(pos: pos, at: at) + } + func preview(at: Int) { delegate?.preview(index: at) } @@ -176,4 +276,8 @@ extension BannerView: FSPagerViewCellDelegate { func delete(at: Int) { delegate?.delete(index: at) } + + func deleteSign(at: Int) { + delegate?.deleteSignAt(index: at) + } } diff --git a/MiniScanner/Modules/EditViewController/EditViewController.swift b/MiniScanner/Modules/EditViewController/EditViewController.swift index 3d0affcc84f0c83355bd018273b314dfcc2cb32f..cc38bee00b81629a7099c9603ea625291a4aa536 100644 --- a/MiniScanner/Modules/EditViewController/EditViewController.swift +++ b/MiniScanner/Modules/EditViewController/EditViewController.swift @@ -94,25 +94,42 @@ public class EditViewController: UIViewController { if !isCropping { self.banner.donePressed = true if let items = scanSession?.scannedItems { - let cell = banner.pagerView.cellForItemat(index: self.banner.pagerView.currentIndex) - cell?.selectedStickerView1?.showEditing = false - - cell?.trashButton.isHidden = true - cell?.previewButton.isHidden = true - let image = cell?.contentView.TakeScreenshot() - cell?.trashButton.isHidden = false - cell?.previewButton.isHidden = false - cell?.selectedStickerView1?.removeFromSuperview() - - if let img = image { - let scannedItem = ScannedItem(originalImage: img, renderImage: img, quad: nil) - scannedItem.colorOption = self.options.defaultColorRenderOption - scannedItem.rotation = 180 - self.scanSession = self.scanSession?.replaceAndGet(item: scannedItem, at: banner.pagerView.currentIndex) + if !banner.signAllDoc { + let cell = banner.pagerView.cellForItemat(index: self.banner.pagerView.currentIndex) + cell?.selectedStickerView1?.showEditing = false + + cell?.trashButton.isHidden = true + cell?.previewButton.isHidden = true + let image = cell?.contentView.TakeScreenshot() + cell?.trashButton.isHidden = false + cell?.previewButton.isHidden = false + cell?.selectedStickerView1?.removeFromSuperview() + + if let img = image { + let scannedItem = ScannedItem(originalImage: img, renderImage: img, quad: nil) + scannedItem.colorOption = self.options.defaultColorRenderOption + scannedItem.rotation = 180 + self.scanSession = self.scanSession?.replaceAndGet(item: scannedItem, at: banner.pagerView.currentIndex) + self.banner.scanSession = self.scanSession + self.banner.pagerView.reloadData(at: banner.pagerView.currentIndex ) + updatePageLabel() + self.navigationItem.rightBarButtonItem = nil + } + } else { + for (index, item) in items.enumerated() { + let image = item.screenShot + if let img = image { + let scannedItem = ScannedItem(originalImage: img, renderImage: img, quad: nil) + scannedItem.colorOption = self.options.defaultColorRenderOption + scannedItem.rotation = 180 + self.scanSession = self.scanSession?.replaceAndGet(item: scannedItem, at: index) + } + } self.banner.scanSession = self.scanSession - self.banner.pagerView.reloadData(at: banner.pagerView.currentIndex ) + self.banner.pagerView.reloadData() updatePageLabel() self.navigationItem.rightBarButtonItem = nil + } } } else { @@ -307,6 +324,39 @@ public class EditViewController: UIViewController { // MARK: - BannerViewDelegate extension EditViewController: BannerViewDelegate { + func updateImage(screenShot: UIImage, at: Int) { + self.scanSession?.scannedItems[at].addScreenShot(screen: screenShot) + self.banner.scanSession = scanSession +// banner.pagerView.reloadData() +// updatePageLabel() + } + + func sizeChanged(size: CGSize, angle: CGFloat, at: Int) { + self.scanSession?.scannedItems[at].size = size + self.scanSession?.scannedItems[at].rotate = angle + banner.scanSession = scanSession + banner.pagerView.reloadData() + updatePageLabel() + } + + func posChangedTo(pos: CGPoint, at: Int) { + self.scanSession?.scannedItems[at].signaturePosition = pos + banner.scanSession = self.scanSession + banner.pagerView.reloadData() + updatePageLabel() + } + + func deleteSignAt(index: Int) { + self.scanSession?.scannedItems[index].signtureImage = UIImage() + banner.scanSession = self.scanSession + banner.pagerView.reloadData() + updatePageLabel() + } + + func willStartDragging() { + + } + func update(session: MultiPageScanSession?) { self.scanSession = session } @@ -478,14 +528,13 @@ extension EditViewController: EPSignatureDelegate { let allAction = UIAlertAction(title: "All document", style: .default) { (action) in if let items = self.scanSession?.scannedItems { for (index, _) in items.enumerated() { - if index == self.banner.pagerView.currentIndex { - self.scanSession?.scannedItems[index].signtureImage = signatureImage - } else { - self.scanSession?.scannedItems[index].signtureImage = UIImage() + + if let initPosition = self.banner.pagerView.cellForItem(at: 0)?.contentView.center { + self.scanSession?.scannedItems[index].addSign(signature: signatureImage, position: initPosition, size: CGSize(width: 125, height: 125), rotate: 0) } } self.banner.scanSession = self.scanSession - self.banner.signAllDoc = false + self.banner.signAllDoc = true self.banner.pagerView.reloadData() } @@ -498,9 +547,9 @@ extension EditViewController: EPSignatureDelegate { if let items = self.scanSession?.scannedItems { for (index, _) in items.enumerated() { if index == self.banner.pagerView.currentIndex { - self.scanSession?.scannedItems[index].signtureImage = signatureImage - } else { - self.scanSession?.scannedItems[index].signtureImage = UIImage() + if let initPosition = self.banner.pagerView.cellForItem(at: index)?.contentView.center { + self.scanSession?.scannedItems[index].addSign(signature: signatureImage, position: initPosition, size: CGSize(width: 125, height: 125), rotate: 0) + } } } self.banner.scanSession = self.scanSession diff --git a/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSession.swift b/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSession.swift index 214ff8e1472f8a8610657f9c76048b40959696c2..b4d11727b37c0632ada564797715a8bcfa32315e 100644 --- a/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSession.swift +++ b/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSession.swift @@ -33,6 +33,10 @@ public class ScannedItem{ var renderedImage:URL? = nil var signtureImage: UIImage? + var signaturePosition: CGPoint? + var size: CGSize? + var rotate: CGFloat? + var screenShot: UIImage? public init(originalImage:UIImage, quad:Quadrilateral? = nil, colorOption:ScannedItemColorOption = .color) { self.originalImage = filePath().saveImage(image: originalImage.withFixedOrientation()) @@ -59,6 +63,18 @@ public class ScannedItem{ completion(image) } } + + public func addSign(signature: UIImage, position: CGPoint, size: CGSize, rotate: CGFloat) { + self.signtureImage = signature + self.signaturePosition = position + self.size = size + self.rotate = rotate + self.screenShot = self.renderedImage?.retrieveImage() + } + + public func addScreenShot(screen: UIImage) { + self.screenShot = screen + } } public class MultiPageScanSession { diff --git a/MiniScanner/Supporting Files/LogoAnimationView/StickerView.swift b/MiniScanner/Supporting Files/LogoAnimationView/StickerView.swift index e07326b40f709b2894eb64913b2cb6c53d2cae90..a0b99e4865283b368c12ade48fd0928044146269 100755 --- a/MiniScanner/Supporting Files/LogoAnimationView/StickerView.swift +++ b/MiniScanner/Supporting Files/LogoAnimationView/StickerView.swift @@ -116,11 +116,11 @@ open class StickerView: UIView { init(contentView: UIView) { - self.defaultInset = 11 + self.defaultInset = 0 self.defaultMinimumSize = 4 * self.defaultInset var frame = contentView.frame - frame = CGRect(x: 0, y: 0, width: frame.size.width + CGFloat(self.defaultInset) * 2, height: frame.size.height + CGFloat(self.defaultInset) * 2) + frame = CGRect(x: 0, y: 0, width: frame.size.width , height: frame.size.height ) super.init(frame: frame) self.backgroundColor = UIColor.clear self.addGestureRecognizer(self.moveGesture) diff --git a/MiniScanner/Supporting Files/Sources/FSPagerViewCell.swift b/MiniScanner/Supporting Files/Sources/FSPagerViewCell.swift index 870ad1bedffed46aa2589e4a73419012e5ee4815..da5a521e1f80ef0bb866797168d5f3fc23a6def5 100644 --- a/MiniScanner/Supporting Files/Sources/FSPagerViewCell.swift +++ b/MiniScanner/Supporting Files/Sources/FSPagerViewCell.swift @@ -10,6 +10,10 @@ import UIKit public protocol FSPagerViewCellDelegate { func delete(at: Int) func preview(at: Int) + func deleteSign(at: Int) + func positionChangedTo(pos: CGPoint, at: Int) + func sizeChangedto(size: CGSize, angle: CGFloat, at: Int) + func updateScreenShots(image: UIImage, at: Int) } open class FSPagerViewCell: UICollectionViewCell { var trashButton: UIButton! @@ -17,10 +21,16 @@ open class FSPagerViewCell: UICollectionViewCell { open var delegate: FSPagerViewCellDelegate? open var index: Int? + open var position: CGPoint! + open var size: CGSize? + open var rotation: CGFloat = 0 + open var sign: UIImage! { didSet { if sign != UIImage() { loadCaptureSignature(sign ?? UIImage()) + } else { + self.selectedStickerView1?.removeFromSuperview() } } } @@ -238,19 +248,20 @@ open class FSPagerViewCell: UICollectionViewCell { func loadCaptureSignature(_ cropImage : UIImage) { - if cropImage != UIImage(named: "") { + if cropImage != UIImage() { let grayImg = grayscale(image: cropImage) let newImage = grayImg - let imageSize = CGSize(width: 125, height: 125) + let imageSize = size let testImage = UIImageView() - testImage.frame.size = imageSize + testImage.frame.size = imageSize ?? CGSize() testImage.contentMode = .scaleAspectFit testImage.image = newImage let stickerView = StickerView.init(contentView: testImage) - stickerView.center = contentView.center + print("position: \(position)") + stickerView.center = position stickerView.delegate = self if let exitIcon = UIImage(named: "close"), let rotateIcon = UIImage(named: "resize") { @@ -259,7 +270,7 @@ open class FSPagerViewCell: UICollectionViewCell { } stickerView.showEditing = false - + stickerView.transform = stickerView.transform.rotated(by: CGFloat(rotation)) self.selectedStickerView1 = stickerView if let sign = self.selectedStickerView1 { contentView.addSubview(sign) @@ -275,10 +286,14 @@ extension FSPagerViewCell: StickerViewDelegate { } func stickerViewDidChangeMoving(_ stickerView: StickerView) { + return } func stickerViewDidEndMoving(_ stickerView: StickerView) { + delegate?.positionChangedTo(pos: stickerView.layer.position, at: index ?? 0) +// delegate?.updateScreenShots(image: contentView.TakeScreenshot(), at: index ?? 0) + return } @@ -291,11 +306,18 @@ extension FSPagerViewCell: StickerViewDelegate { } func stickerViewDidEndRotating(_ stickerView: StickerView) { + let angle = atan2(stickerView.transform.b, stickerView.transform.a) + let stickerTest = stickerView + stickerTest.transform = stickerView.transform.rotated(by: -angle) + delegate?.sizeChangedto(size: CGSize(width: stickerTest.layer.frame.size.width , height: stickerTest.layer.frame.size.height ) , angle: angle, at: index ?? 0) +// delegate?.updateScreenShots(image: contentView.TakeScreenshot(), at: index ?? 0) + return } + func stickerViewDidClose(_ stickerView: StickerView) { - return + delegate?.deleteSign(at: index ?? 0) } func stickerViewDidTap(_ stickerView: StickerView) {