gpt4 book ai didi

ios - 在 UICollectionView 的数组中添加和删除 UIImage

转载 作者:行者123 更新时间:2023-11-30 11:46:07 25 4
gpt4 key购买 nike

我的应用程序将 iPhone 画廊、Facebook 和 Instagram 中的图片加载到 UICollectionView 中。一切正常,但我有一个小问题,我被卡住了。用户可以选择一些图像(来自画廊、Fb 或 IG)并将其加载到另一个 ViewController,与 Facebook Instagram 的事情很简单,因为当用户选择图像时,我将 URL 加载到数组中,而当他取消选择时,只需从数组中删除此 URL。 iPhone 画廊会出现此问题。他可以选择图像,但不能解封(我只是无法从数组中删除取消选择的图像)。

这是 ViewController 的代码,负责从图库中选择和“取消选择”图像。

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

_selectedCells.add(indexPath)
collectionView.reloadItems(at: [indexPath])

CounterManager.addPhotos()

// These lines should add selected images to the array
let asset = fetchResult.object(at: indexPath.row)
let image = getUIImage(asset: asset)

tempUIImageArray.append(image!)
CounterManager.updateText(label: numberOfPickslabel)
GalleryManager.selectedGalleryImages.append(image!)


if CounterManager.flag && CounterManager.counter >= 20 {
present(CounterManager.alert(), animated: true, completion: nil)

} else if CounterManager.flag == false && CounterManager.counter >= 40 {

present(CounterManager.alert(), animated: true, completion: nil)
}

}

func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {

collectionView.allowsSelection = true
_selectedCells.remove(indexPath)
collectionView.reloadItems(at: [indexPath])
collectionView.deselectItem(at: indexPath, animated: true)

CounterManager.subPhotos()
CounterManager.updateText(label: numberOfPickslabel)

//These lines should remove images from the Array
let asset = fetchResult.object(at: indexPath.row)
let image = getUIImage(asset: asset)
GalleryManager.selectedGalleryImages = GalleryManager.selectedGalleryImages.filter({$0 != image})
}

GalleryManager.selectedGalleryImages 是所有图像(来自画廊、Fb 和 IG)的全局数组。

getUIImage是将PHAsset转换为UIImage的方法

似乎选中和取消选中的图像不断更改一些数据。下面是我选择和取消选择同一张图像的图片。我不明白为什么会这样..

enter image description here我将非常感谢各种帮助。谢谢M。

最佳答案

您将从图库中获取实际的 UIImage 并将其存储在数组中,而不是对图像位置的唯一文本引用。我怀疑这与 GalleryManager 加载图像的方式有关(因为您只是使用 != 比较原始图像数据,这是行不通的)。但在没有看到代码的情况下,我无法确定。

我建议使用 ALAssetsLibrary 来获取图像的引用 URL,并将其存储在数组中 - 这样您就可以保证图像引用是唯一的,并且可以轻松删除它来自你的数组。

一些旁注:

  1. 在数组中存储二进制数据会疯狂地消耗内存。它效率不高,而且您会遇到问题(尤其是在较旧的设备上)。

  2. 只要 asset 为零,此代码就可能会中断:

    let image = getUIImage(asset: asset)
    tempUIImageArray.append(image!)

    这是 guardif x let 的良好候选者:

    guard let image = getUIImage(asset: asset) else { return }
    tempUIImageArray.append(image)

关于ios - 在 UICollectionView 的数组中添加和删除 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48813679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com