How to store position, size and rotation from a UIImageView in CoreData in order to populate a different ViewController?

Viewed 73

hope you are all having a good day!

So, I have a CollectionView on the main VC, I set "didSelectItemAt" to populate a new VC with the UIImage from the CollectionViewCell selected. Now, on that new VC I can add several UIImageViews that can pan, rotate and increase or decrease size.

Here is what im trying to figure out: I need to store the changes in position, size or rotation of each UIImageView added including the UIImageView itself in order to be able to repopulate the VC, once "didSelectItemAt" triggered from mainVC, with all new changes AKA new UIImageViews added.

Everything would be easier if I could have some kind of indexPath each time I select one of the new UIImageView. That way I would be able to set position to CoreData for each item every time it changes. But I tried everything I know and I didn't have any luck.

Thank you in advance to every body!

Here is my didSelectItemAt from my mainVC, it does spawn all the new imageViews I added (and stored in CoreData) but it does't store any of the position, size or rotation.

  func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    
    if !isEditing {

        if let vc = storyboard?.instantiateViewController(identifier: "EditingVC") as? EditingVC {
            
            vc.img = UIImage(data: itemArray[indexPath.row].image!)!
            
            vc.selectedItem = itemArray[indexPath.row]

            if vc.editingvcItem.count != 0 {

                for items in vc.editingvcItem {
                    let images = MultyGesture(image: UIImage(data: items.image!))
                    vc.view.addSubview(images)

                }
            }
            navigationController?.pushViewController(vc, animated: true)
        }
    }
}

Here is my second VC where the new UIImageViews are created and stored in CoreData:

import UIKit

import CoreData

class EditingVC: UIViewController {

@IBOutlet weak var mainImage: UIImageView!

var img = UIImage()
var editingvcItem = [EditingvcItem]()
var selectedItem : Item? {
    didSet {
        loadItems()
    }
}
public var size: CGFloat = 174
private var isDragging = false
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

public var completionEditingVC: ((UIImage?) -> Void)?

override func viewDidLoad() {
    
    mainImage.layer.cornerRadius = 20
    mainImage.image = img
    print(editingvcItem.count)
    
}

func newPNG(_ newpngImage: UIImage) {
    
    let imageView = MultyGesture(image: newpngImage)
    imageView.frame = CGRect(x: 0, y: 0, width: size, height: size)
    imageView.center = self.view.center
    self.view.addSubview(imageView)
    
}

@objc func enableSlideup() {
    
    if let vc = storyboard?.instantiateViewController(identifier: "overlayVC") as? overlayVC {
        
        vc.modalPresentationStyle = .custom
        vc.transitioningDelegate = self
        vc.completion = {[weak self] image in
            DispatchQueue.main.async {
                
                self!.newPNG(image!)
                
                if let image = image {
                    self?.imageSelected(image)
                }
            }
        }
        self.present(vc, animated: true, completion: nil)
    }
}

func imageSelected(_ image: UIImage) {
    
    let newItem = EditingvcItem(context: context)
    newItem.image = image.pngData()
    newItem.name = "1"
    newItem.x = Double(view.center.x)
    newItem.y = Double(view.center.y)
    newItem.parent = selectedItem
    self.editingvcItem.append(newItem)
    saveItems()
}

@IBAction func addPNGButtonPressed(_ sender: UIBarButtonItem) {
    enableSlideup()
}

//MARK: - core data manipulation

func saveItems() {
    
    do {
        try context.save()
    } catch {
        print("Error saving content \(error)")
    }
}

func loadItems() {
    
    let predicate = NSPredicate(format: "parent.name MATCHES %@", selectedItem!.name!)
    let request : NSFetchRequest<EditingvcItem> = EditingvcItem.fetchRequest()
    request.predicate = predicate
    do {
        editingvcItem = try context.fetch(request)
    } catch {
        print("load Item from EditingVC error \(error)")
    }
}

}

//MARK: - slide-up

extension EditingVC: UIViewControllerTransitioningDelegate { func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? { slideupController(presentedViewController: presented, presenting: presenting) } }

Thanks again!

0 Answers
Related