My galleryCollectionView
is currently being populated with images from Firebase
Database.
I'm having trouble figuring out how to allow the user to long press on an image, and save the selected photo to Photo Library. Right now I am currently stuck on getting the long press to work.
Here is my ViewController
(I'm using Swift 4):
class PhotoGalleryViewController: UIViewController, UICollectionViewDataSource, UIGestureRecognizerDelegate {
@IBOutlet weak var galleryCollectionView: UICollectionView!
var images = [GalleryImages]()
var customImageFlowLayout: CustomGalleryCollectionFlowLayout!
var dbRef: DatabaseReference!
override func viewDidLoad() {
super.viewDidLoad()
let photoLngPrs = UILongPressGestureRecognizer(target: self, action: "handleLongPress")
photoLngPrs.minimumPressDuration = 0.5
photoLngPrs.delegate = self
photoLngPrs.delaysTouchesBegan = true
self.galleryCollectionView.addGestureRecognizer(photoLngPrs)
dbRef = Database.database().reference().child("photoGallery")
customImageFlowLayout = CustomGalleryCollectionFlowLayout()
galleryCollectionView.collectionViewLayout = customImageFlowLayout
galleryCollectionView.backgroundColor = UIColor.black
loadGalleryDB()
// Do any additional setup after loading the view.
}
func loadGalleryDB() {
dbRef.observe(DataEventType.value, with: {(snapshot) in
var newGalleryImages = [GalleryImages]()
for galleryImagesSnapshot in snapshot.children {
let galleryImagesObject = GalleryImages(snapshot: galleryImagesSnapshot as! DataSnapshot )
newGalleryImages.append(galleryImagesObject)
}
self.images = newGalleryImages
self.galleryCollectionView.reloadData()
})
}
func handleLongPress(gestureRecognizer : UILongPressGestureRecognizer) {
if gestureRecognizer.state == UIGestureRecognizerState.began {
return
}
let point = gestureRecognizer.location(in: self.galleryCollectionView)
let indexPath = galleryCollectionView.indexPathForItem(at: point)
if let index = indexPath {
var collectionCell = galleryCollectionView.cellForItem(at: index)
print(index.row)
} else {
print("Could not find Index Path")
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return images.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "galleryCell", for: indexPath) as! GalleryCollectionViewCell
let image = images[indexPath.row]
cell.galleryView.sd_setImage(with: URL(string: image.url), placeholderImage: UIImage(named: "NightCLubPhoto"))
cell.galleryView.isUserInteractionEnabled = true
return cell
}
Im getting this error.
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Hookaholics.PhotoGalleryViewController handleLongPress]: unrecognized selector sent to instance 0x7fa61bc0d7a0'