![](/img/trans.png)
[英]Saving Checkmarks on TableView loaded from Firebase Database Swift
[英]Saving Photos from UICollectionView loaded from Firebase Database
我的galleryCollectionView
当前正在使用Firebase
数据库中的图像填充。
我在弄清楚如何允许用户长按图像并将所选照片保存到照片库时遇到麻烦。 目前,我目前仍在努力争取长按。
这是我的ViewController
(我正在使用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
}
我收到此错误。
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Hookaholics.PhotoGalleryViewController handleLongPress]: unrecognized selector sent to instance 0x7fa61bc0d7a0'
这是我针对与您类似情况的解决方案。
您创建一个UILongPressGestureRecognizer
并将其添加到CollectionView
。
func createLongPressGesture(){
let longPress = UILongPressGestureRecognizer(target: self, action: #selector(longPressOccured(sender:)))
longPress.minimumPressDuration = 0.7 // Default `minimumPressDuration` is 0.5. It sets the time after which UILongPressGestureRecognizer enters the 'began' state.
longPress.isEnabled = true
self.galleryCollectionView.addGestureRecognizer(longPress)
}
您可以在viewDidLoad
校准此函数。
下一步是实现选择器:
@objc func longPressOccured(sender:UILongPressGestureRecognizer){
guard sender.state == .began else{ return }
guard let pressedIndexPath = self.galleryCollectionView.indexPathForItem(at: sender.location(in: self.galleryCollectionView)) else { return }
guard let pressedCell = self.galleryCollectionView.cellForItem(at: pressedIndexPath) else { return }
let cell = pressedCell as! GalleryCollectionViewCell
// HERE comes your code for saving the selected image
}
希望我能解决您的问题,我的解决方案会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.