diff --git a/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate b/MiniScanner.xcworkspace/xcuserdata/g.makhoul.xcuserdatad/UserInterfaceState.xcuserstate index 3d84ef67d4aff0757efe5dc0dabcb16a1089fc59..2f44e5277ae465715e37e4c675c280520ae27f1e 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/Modules/EditViewController/CustomViews/BannerView.swift b/MiniScanner/Modules/EditViewController/CustomViews/BannerView.swift index 41973314973ba995f15dcf0858d84afa2d23a6d9..7294d2306bbbf7d07cc527a150260c54ee3bc689 100644 --- a/MiniScanner/Modules/EditViewController/CustomViews/BannerView.swift +++ b/MiniScanner/Modules/EditViewController/CustomViews/BannerView.swift @@ -147,29 +147,22 @@ extension BannerView: FSPagerViewDataSource,FSPagerViewDelegate { } func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell { let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "cell", at: index) + if let item = scanSession?.scannedItems[index] { + cell.index = index cell.delegate = self - - if let item = scanSession?.scannedItems[index] { - cell.imageView?.image = item.renderedImage?.retrieveImage() - } - if isEditing { - if signAllDoc { - if cell.sign == nil { - cell.sign = signatureImage - } - } else { - if index == pagerView.currentIndex { - if cell.sign == nil { - cell.sign = signatureImage - } + 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 } } } - return cell } + func pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int) { delegate?.updateSelectedIndex(index: targetIndex) } diff --git a/MiniScanner/Modules/EditViewController/EditViewController.swift b/MiniScanner/Modules/EditViewController/EditViewController.swift index 04f7f75fee73b6027ca33d3790039965f278825c..a867e5194fb016e2f71dc2cdde0197ccfdccc377 100644 --- a/MiniScanner/Modules/EditViewController/EditViewController.swift +++ b/MiniScanner/Modules/EditViewController/EditViewController.swift @@ -81,7 +81,7 @@ public class EditViewController: UIViewController { scannedItem.rotation = 180 self.scanSession = self.scanSession?.replaceAndGet(item: scannedItem, at: banner.pagerView.currentIndex) self.banner.scanSession = self.scanSession - self.banner.pagerView.reloadData() + self.banner.pagerView.reloadData(at: banner.pagerView.currentIndex ) updatePageLabel() } } @@ -389,9 +389,18 @@ extension EditViewController: EPSignatureDelegate { let alertController = UIAlertController(title: "", message: "Do you want to sign:", preferredStyle: .alert) let allAction = UIAlertAction(title: "All document", style: .default) { (action) in - self.banner.signatureImage = signatureImage - self.banner.signAllDoc = true - self.banner.pagerView.reloadData() + 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() + } + } + self.banner.scanSession = self.scanSession + self.banner.signAllDoc = false + self.banner.pagerView.reloadData() + } let doneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.done, target: self, action: #selector(self.onTouchDoneButton)) self.navigationItem.rightBarButtonItem = doneButton @@ -399,9 +408,18 @@ extension EditViewController: EPSignatureDelegate { } let currentAction = UIAlertAction(title: "Current page", style: .default) { (action) in - self.banner.signatureImage = signatureImage - self.banner.signAllDoc = false - self.banner.pagerView.reloadData() + 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() + } + } + self.banner.scanSession = self.scanSession + self.banner.signAllDoc = false + self.banner.pagerView.reloadData() + } let doneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.done, target: self, action: #selector(self.onTouchDoneButton)) self.navigationItem.rightBarButtonItem = doneButton diff --git a/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSession.swift b/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSession.swift index fbc9168b7adacb89e6651e190d4ca7f7b518eb51..214ff8e1472f8a8610657f9c76048b40959696c2 100644 --- a/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSession.swift +++ b/MiniScanner/Supporting Files/CustomWeScan/MultiPageSession/MultiPageScanSession.swift @@ -31,7 +31,9 @@ public class ScannedItem{ /// The deskewed and cropped orignal image using the detected rectangle, without any filters. var renderedImage:URL? = nil - + + var signtureImage: UIImage? + public init(originalImage:UIImage, quad:Quadrilateral? = nil, colorOption:ScannedItemColorOption = .color) { self.originalImage = filePath().saveImage(image: originalImage.withFixedOrientation()) self.quad = quad diff --git a/MiniScanner/Supporting Files/Sources/FSPagerViewCell.swift b/MiniScanner/Supporting Files/Sources/FSPagerViewCell.swift index 9b4b55c81d45fd2c73fa74bc78bfedfc21415db3..870ad1bedffed46aa2589e4a73419012e5ee4815 100644 --- a/MiniScanner/Supporting Files/Sources/FSPagerViewCell.swift +++ b/MiniScanner/Supporting Files/Sources/FSPagerViewCell.swift @@ -19,10 +19,12 @@ open class FSPagerViewCell: UICollectionViewCell { open var index: Int? open var sign: UIImage! { didSet { - loadCaptureSignature(sign ?? UIImage()) + if sign != UIImage() { + loadCaptureSignature(sign ?? UIImage()) + } } } - var session: MultiPageScanSession? + var session: ScannedItem! private var selectedStickerView:StickerView? @@ -44,6 +46,10 @@ open class FSPagerViewCell: UICollectionViewCell { } } + open override func prepareForReuse() { + super.prepareForReuse() + } + /// Returns the label used for the main textual content of the pager view cell. @objc open var textLabel: UILabel? { @@ -134,7 +140,7 @@ open class FSPagerViewCell: UICollectionViewCell { } } - + open override var isSelected: Bool { set { @@ -232,30 +238,34 @@ open class FSPagerViewCell: UICollectionViewCell { func loadCaptureSignature(_ cropImage : UIImage) { - let grayImg = grayscale(image: cropImage) - let newImage = grayImg - - let imageSize = CGSize(width: 125, height: 125) - - let testImage = UIImageView() - testImage.frame.size = imageSize - testImage.contentMode = .scaleAspectFit - testImage.image = newImage - - let stickerView = StickerView.init(contentView: testImage) - stickerView.center = contentView.center - stickerView.delegate = self - if let exitIcon = UIImage(named: "close"), - let rotateIcon = UIImage(named: "resize") { - stickerView.setImage(exitIcon, forHandler: StickerViewHandler.close) - stickerView.setImage(rotateIcon, forHandler: StickerViewHandler.rotate) - } - - stickerView.showEditing = false - - self.selectedStickerView1 = stickerView - if let sign = self.selectedStickerView1 { + if cropImage != UIImage(named: "") { + let grayImg = grayscale(image: cropImage) + let newImage = grayImg + + let imageSize = CGSize(width: 125, height: 125) + + let testImage = UIImageView() + testImage.frame.size = imageSize + testImage.contentMode = .scaleAspectFit + testImage.image = newImage + + let stickerView = StickerView.init(contentView: testImage) + stickerView.center = contentView.center + stickerView.delegate = self + if let exitIcon = UIImage(named: "close"), + let rotateIcon = UIImage(named: "resize") { + stickerView.setImage(exitIcon, forHandler: StickerViewHandler.close) + stickerView.setImage(rotateIcon, forHandler: StickerViewHandler.rotate) + } + + stickerView.showEditing = false + + self.selectedStickerView1 = stickerView + if let sign = self.selectedStickerView1 { contentView.addSubview(sign) + } + } else { + self.selectedStickerView1?.removeFromSuperview() } } }