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!