- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我问的问题与 here 相同我不明白如何实现解决方案。我已经尝试了以下
fileprivate func fetchPhotos(indexSet: IndexSet) {
let allPhotos = PHAsset.fetchAssets(with: .image, options: assetsFetchOptions())
DispatchQueue.global(qos: .background).async {
allPhotos.enumerateObjects(at: indexSet, options: NSEnumerationOptions.concurrent, using: { (asset, count, stop) in
let imageManager = PHImageManager.default()
let targetSize = CGSize(width: 200, height: 200)
let options = PHImageRequestOptions()
options.isSynchronous = true
imageManager.requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFit, options: options, resultHandler: { (image, info) in
if let image = image {
self.images.append(image)
self.assets.append(asset)
if self.selectedImage == nil {
self.selectedImage = image
}
}
DispatchQueue.main.async {
self.collectionView.reloadData()
self.hud.dismiss()
}
})
})
}
}
在 cellForItemAt 中,我尝试将索引加倍,以便加载接下来的 10 个。我得到的结果是前 10 个帖子永无止境地重复。有人可以展示使用它的正确方法吗?
最佳答案
我试着做你想做的。我无法将它封装在一个函数中,因为它需要一些公共(public)变量,所以这里是一个 UIViewController 的代码,它有一个 UICollectionView,它以 10 页为单位加载图像,当滚动到最后一个单元格时,它加载接下来的 10 张图像等等。
import UIKit
import Photos
import PhotosUI
class ImagesViewController: UIViewController ,UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout{
var assets = [PHAsset]()
var images = [UIImage]()
let page = 10
var beginIndex = 0
var endIndex = 9
var allPhotos : PHFetchResult<PHAsset>?
var loading = false
var hasNextPage = false
@IBOutlet weak var collectionView : UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
let options = PHFetchOptions()
options.includeHiddenAssets = true
allPhotos = PHAsset.fetchAssets(with: .image, options: options)
getImages()
}
func getImages(){
endIndex = beginIndex + (page - 1)
if endIndex > allPhotos!.count {
endIndex = allPhotos!.count - 1
}
let arr = Array(beginIndex...endIndex)
let indexSet = IndexSet(arr)
fetchPhotos(indexSet: indexSet)
}
fileprivate func fetchPhotos(indexSet: IndexSet) {
if allPhotos!.count == self.images.count {
self.hasNextPage = false
self.loading = false
return
}
self.loading = true
DispatchQueue.global(qos: .background).async { [weak self] in
self?.allPhotos?.enumerateObjects(at: indexSet, options: NSEnumerationOptions.concurrent, using: { (asset, count, stop) in
guard let weakSelf = self else {
return
}
let imageManager = PHImageManager.default()
let targetSize = CGSize(width: weakSelf.view.frame.size.height - 20, height: 250)
let options = PHImageRequestOptions()
options.isSynchronous = true
imageManager.requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFit, options: options, resultHandler: { (image, info) in
if let image = image {
weakSelf.images.append(image)
weakSelf.assets.append(asset)
}
})
if weakSelf.images.count - 1 == indexSet.last! {
print("last element")
weakSelf.loading = false
weakSelf.hasNextPage = weakSelf.images.count != weakSelf.allPhotos!.count
weakSelf.beginIndex = weakSelf.images.count
DispatchQueue.main.async {
weakSelf.collectionView.reloadData()
}
}
})
}
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return images.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
let imgView = cell.viewWithTag(1) as! UIImageView
imgView.image = self.images[indexPath.row]
if self.hasNextPage && !loading && indexPath.row == self.images.count - 1 {
getImages()
}
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width:collectionView.frame.size.width - 20,height: 250)
}
}
关于ios - 使用 PHAsset 获取用户照片库时如何分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54560446/
随机问题,...但是有人知道这里使用的是什么照片 slider 吗? http://www.rolandgarros.com/en_FR/index.html 或这里: http://www.theg
我正在制作一个 JS 脚本,它将进入标题 div 并显示一些图片。我查看了 JQuery Cycle,但它超出了我的范围。我在下面编写的代码卡住了浏览器,我应该使用带有计时器变量的 for 循环吗?
我在四处寻找,因为我在 PHP 文件上传方面遇到了一些问题!如果用户想要或显示已存储在数据库中的照片,我正在尝试将一张或三张照片上传到数据库(admin_images)。我遇到了一些问题,下面是我目前
如何提高相机质量?我想拍一张全屏显示的照片/视频吗?如果我将 session 预设设置为 AVCaptureSessionPresetPhoto,它是高质量和全屏的,但仅适用于照片而不适用于视频。我已
我还没有看到有人问过这个问题,所以我问一下如何在iOS应用程序(Xcode)中通过WIFI传输信息/图像。 例如:如果我正在用带WIFI的相机翻阅图片,我如何去iPhone看图片? 例如像这个视频:
有没有人有关于如何将照片和图像(位图)转换为类似草图的图片的想法、链接、库、源代码...?我找不到任何关于如何做到这一点的好消息来源。 我找到了这个链接 How to cartoon-ify an i
假设我有一个 Instagram 帐户和一个网站。我想在网站上显示来自我的 Instagram 帐户的最新照片。我在文档中不清楚的东西:为了得到我的 access_token我需要验证自己的身份吗?我
我只想从 Flickr 获取风景照片,但我没有看到任何允许我这样做的参数。有谁知道有没有办法? 最佳答案 在来自 flickr.photos.search 的回复中功能,您可以指定许多可选参数,称为
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
Instagram 会提供任何方式通过 API 获取人像/风景吗? API 文档看起来未受影响。 截至目前,他们仍然返回纵向图像的正方形大小,但 api 文档没有提供任何获取原始图像的方法。 他们会继
我知道您可以将限制和偏移值附加到 graph.facebook.com/id/photos API 调用中以对照片进行分页。但大的限制似乎效果不佳,照片最终会丢失。我在这里读到 limit=0 为您提
我是 Instagram 新手,我的任务是编写一个应用程序来根据特定主题标签抓取 Instagram 照片上传。这意味着如果应用程序启动并搜索主题标签“#awesomeevent”,任何上传带有该主题
苹果的照片应用程序允许用户使用“冲浪”、“食物”、“天空”等搜索关键字查询照片。 具有相机和照片权限的第三方 iOS 应用程序如何使用任意字符串搜索手机的相机胶卷? Searching for Pho
如何避免照片拉伸(stretch)? PHP 从文件夹中随机选择 2 张照片并使用 echo 显示它们。但是现在,所有纵向照片都被拉伸(stretch)了。 "; unset($images[
我正在构建一个处理以人像模式(深度效果)拍摄的图像的应用程序。我需要提供UIImagePickerController以仅显示具有深度效果的照片。 我该如何实现? 最佳答案 使用UIImagePick
通过编程从iOS照片库获取最新照片是否有技巧? 我知道我可以按日期搜索,但是我必须每隔一微秒进行一次扫描,以便进行某种比较以准确地找到它。 有没有人做过这个或任何想法? 最佳答案 我之前采取的一种方法
我在尝试使用 Facebook 的 Javascript API 时遇到严重问题。我目前有一个有点功能的 facebook 登录,我希望能够从当前用户那里获取所有照片,并将它们显示在 strip 中。
我正在尝试查询 FlickR 照片并接收 JSON 响应。我正在使用 Retrofit 调用 FlickR API。在我的代码中,用户输入文本,这是通过 EditText 捕获的。我想根据这个词查询。
我想为使用像应用程序这样的相机捕获的对象创建 3d View (360 度 View )Fyuse或 Phogy正在做。我对此进行了研究,但没有发现有用的东西。 我有一些问题,例如: 为此我应该使用什
当我从 iPhone 导入图片时,它们最终都在一个巨大的文件列表中:IMG_4649.JPG、IMG_4650.JPG、IMG_4651.PNG , …有自己拍的, friend 给的,下载的,截图的
我是一名优秀的程序员,十分优秀!