我正在构建iOS应用,用于从用户照片库中选择屏幕截图。该应用程序可以正常运行,除了我可以显示所有照片并且只需要截图即可。为了检测屏幕截图,我想使图像尺寸与屏幕尺寸匹配。

var userScreenshots: PHFetchResult!

let screenWidth = view.bounds.size.width * 2
let screenHeight = view.bounds.size.height * 2

let options = PHFetchOptions()
// Following line needs to be changed —>
options.predicate = NSPredicate(format: "(pixelWidth & %d) != 0 || (pixelHeight & %d) != 0", screenWidth, screenHeight)

options.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]

userScreenshots = PHAsset.fetchAssetsWithOptions(options)

崩溃:
2015-06-22 23:00:24.540 Altershot[95046:24515142] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unsupported predicate in fetch options: pixelWidth & 0 != 0'

请说明如何正确定义此谓词。

最佳答案

这是正确的代码。请注意,这不是魔术数字2,而是scale通用属性,因为iPhone 6 Plus的规模为3。我还提供了风景截图,感谢您的评论。此外,屏幕尺寸公式也得到了改进,可以为iOS 9多任务处理做准备。

var userScreenshots: PHFetchResult!

let scale = UIScreen.mainScreen().scale
let screenWidth = UIScreen.mainScreen().bounds.width * scale
let screenHeight = UIScreen.mainScreen().bounds.height  * scale

let options = PHFetchOptions()
options.predicate = NSPredicate(format: "(pixelHeight == %d AND pixelWidth == %d) OR (pixelHeight == %d AND pixelWidth == %d)", argumentArray: [screenHeight, screenWidth, screenWidth, screenHeight])

options.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]

userScreenshots = PHAsset.fetchAssetsWithOptions(options)

关于ios - 使用“照片”框架按图片大小过滤照片库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30990761/

10-14 20:15