标签: photosframework

PHImageManager requestImageForAsset有时会为iCloud照片返回nil

大约10%的时间PHImageManager.defaultManager().requestImageForAsset在首次返回有效但"降级"的UIImage后返回nil而不是有效的UIImage.没有错误或其他线索,我可以看到返回信息与零.

这似乎发生在需要从iCloud下载的照片上,同时启用了iCloud Photo Library和Optimize iPad Storage.我已经尝试过更改选项,尺寸等,但似乎没什么关系.

如果我在失败后重试requestImageForAsset,它通常会正确返回一个UIImage,虽然有时需要重试几次.

知道我可能做错了什么吗?或者它只是Photos框架中的一个错误?

    func photoImage(asset: PHAsset, size: CGSize, contentMode: UIViewContentMode, completionBlock:(image: UIImage, isPlaceholder: Bool) -> Void) -> PHImageRequestID? {

    let options = PHImageRequestOptions()
    options.networkAccessAllowed = true
    options.version = .Current
    options.deliveryMode = .Opportunistic
    options.resizeMode = .Fast

    let requestSize = !CGSizeEqualToSize(size, CGSizeZero) ? size : PHImageManagerMaximumSize
    let requestContentMode = contentMode == .ScaleAspectFit ? PHImageContentMode.AspectFit : PHImageContentMode.AspectFill

    return PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: requestSize, contentMode: requestContentMode, options: options)
        { (image: UIImage!, info: [NSObject : AnyObject]!) in
            if let image = image …
Run Code Online (Sandbox Code Playgroud)

ios photosframework

45
推荐指数
5
解决办法
2万
查看次数

尝试从 PHAssetCollection.fetchAssetCollections 获取所有照片时出错

我想获取我的自定义相册的所有照片。但我得到的是以下错误。

我的代码

let collections:PHFetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)
Run Code Online (Sandbox Code Playgroud)

我得到的错误

“守护进程返回的错误:错误域=com.apple.accounts 代码=7“(空)”

有想法该怎么解决这个吗?

swift photosframework

45
推荐指数
1
解决办法
8631
查看次数

来自PHAsset的NSURL

我正在将我们的应用程序转换为使用iOS8的Photos Framework,ALAsset框架显然是iOS8下的二等公民.

我遇到的一个问题是我们的架构真的需要一个代表媒体在"磁盘"上的位置的NSURL.我们使用它将媒体上传到我们的服务器以进行进一步处理.

使用ALAsset很容易:

    ALAssetRepresentation *rep = [asset defaultRepresentation];
    self.originalVideo = rep.url;
Run Code Online (Sandbox Code Playgroud)

但我只是没有在PHAsset中看到这种能力.我猜我可以打电话:

    imageManager.requestImageDataForAsset
Run Code Online (Sandbox Code Playgroud)

然后把它写到文件系统中的临时点,但这看起来非常重量级和浪费,更不用说潜在的慢.

有没有办法得到这个,或者我将重构更多的我的应用程序只使用NSURLs的iOS7和其他一些方法的iOS8?

alassetslibrary ios8 photosframework phasset

39
推荐指数
5
解决办法
3万
查看次数

如何使用Photos Framework在相机胶卷中仅获取图像

以下代码加载也位于iCloud或流图像上的图像.我们如何将搜索限制为仅限相机胶卷中的图像?

var assets = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: nil)
Run Code Online (Sandbox Code Playgroud)

ios swift photosframework

24
推荐指数
3
解决办法
2万
查看次数

照片框架.requestImageForAsset返回两个结果.无法设置图像视图

所以我使用SwipeView库(https://github.com/nicklockwood/SwipeView)使用iOS8的Photos框架显示图像.

但是,当我调用requestImageForAsset时,我注意到我得到了两个结果,一个缩略图大小,以及我想要的更大的大小.但是,更大的图像没有及时加载(我称之为async我理解),因此返回小图像.

这段代码可能更有意义.

    func swipeView(swipeView: SwipeView!, viewForItemAtIndex index: Int, reusingView view: UIView!) -> UIView! {
            let asset: PHAsset = self.photosAsset[index] as PHAsset

    var imageView: UIImageView!

    let screenSize: CGSize = UIScreen.mainScreen().bounds.size
    let targetSize = CGSizeMake(screenSize.width, screenSize.height)


    var options = PHImageRequestOptions()
//        options.deliveryMode = PHImageRequestOptionsDeliveryMode.Opportunistic
    options.resizeMode = PHImageRequestOptionsResizeMode.Exact


    PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: targetSize, contentMode: .AspectFill, options: options, resultHandler: {(result, info)in
        println("huhuhuh")
        println(result.size)
        println(info)
        imageView = UIImageView(image: result)
    })
    println("setting view)
    return imageView
}
Run Code Online (Sandbox Code Playgroud)

这是日志输出:

Enteredhuhuhuh
(33.5,60.0)
SETTING VIEW
huhuhuh
(320.0,568.0)
Run Code Online (Sandbox Code Playgroud)

如您所见,它会在收到大图像之前返回图像视图.如何让它返回这个更大的图像,以便它不显示缩略图?

谢谢.

uiimageview ios uicollectionview photosframework

22
推荐指数
1
解决办法
2万
查看次数

照片框架requestImageDataForAsset偶尔会失败

我在iOS8.1上使用照片框架并使用requestImageDataForAsset请求资产的图像数据...大多数时候它工作,我得到图像数据和包含你在下面看到的内容的字典.但有时调用完成,但数据为零,字典包含三个通用的查找条目.

调用按顺序执行并在同一线程上执行.它不是特定于任何特定图像.错误将发生在我过去成功打开的图像上.有没有遇到过这个?

+ (NSData *)retrieveAssetDataPhotosFramework:(NSURL *)urlMedia resolution:(CGFloat)resolution imageOrientation:(ALAssetOrientation*)imageOrientation {

    __block NSData *iData = nil;

    PHFetchResult *result = [PHAsset fetchAssetsWithALAssetURLs:@[urlMedia] options:nil];
    PHAsset *asset = [result firstObject];

    PHImageManager *imageManager = [PHImageManager defaultManager];
    PHImageRequestOptions *options = [[PHImageRequestOptions alloc]init];
    options.synchronous = YES;
    options.version = PHImageRequestOptionsVersionCurrent;

    @autoreleasepool {
        [imageManager requestImageDataForAsset:asset options:options resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
            iData = [imageData copy];
            NSLog(@"requestImageDataForAsset returned info(%@)", info);
            *imageOrientation = (ALAssetOrientation)orientation;
        }];
    }

    assert(iData.length != 0);
    return iData;
}
Run Code Online (Sandbox Code Playgroud)

这是我获得图像数据和元数据字典的理想结果:

requestImageDataForAsset returned info({
    PHImageFileDataKey = …
Run Code Online (Sandbox Code Playgroud)

objective-c ios photosframework

20
推荐指数
2
解决办法
1万
查看次数

照片框架崩溃:'此应用程序不允许访问照片数据.'

如果未授予照片访问权限且请求权限的对象即将解除分配,应用程序将崩溃.

Apple的示例代码(用于Photos框架)也崩溃了.

我的应用程序崩溃了以下堆栈跟踪:

*** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'This application is not allowed to access Photo data.'


*** First throw call stack:
(
    0   CoreFoundation                      0x000000010a324f65 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010c030deb objc_exception_throw + 48
    2   PhotoLibraryServices                0x000000011c1f7e2d -[PLPhotoLibrary initWithTransientContext:name:] + 1183
    3   Photos                              0x000000011bd6a445 __30-[PHPhotoLibrary photoLibrary]_block_invoke + 59
    4   libdispatch.dylib                   0x0000000110f5e49b _dispatch_client_callout + 8
    5   libdispatch.dylib                   0x0000000110f49e28 dispatch_once_f + 543
    6   Photos                              0x000000011bd6a404 -[PHPhotoLibrary photoLibrary] + 140
    7   Photos                              0x000000011bd3e5e8 -[PHCoreImageManager _cancelAndFlushPreheatItemsForAssets:CPLPrefetching:domain:operation:passingTestHandler:didCancelHandler:] + 174
    8 …

crash exception ios photosframework

20
推荐指数
4
解决办法
6522
查看次数

在iOS 8上打破的AssetsLibrary框架

我在iOS 8上遇到了一个问题,资产库框架似乎是iOS 8中的一个错误.如果我创建一个名为"MyMedia"的专辑然后将其删除,那么当我再次尝试创建专辑时,这个大块下面的代码返回'nil'表示专辑'MyMedia'存在,即使它没有,因为我使用'Photos'应用删除了它.

__block ALAssetsGroup *myGroup = nil;
__block BOOL addAssetDone = false;
NSString *albumName = @"MyMedia";
[assetsLib addAssetsGroupAlbumWithName:albumName
                           resultBlock:^(ALAssetsGroup *group) {
                               myGroup = group;
                               addAssetDone = true;
                           } failureBlock:^(NSError *error) {
                               NSLog( @"failed to create album: %@", albumName);
                               addAssetDone = true;
                           }];

while (!addAssetDone) {
    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.05f]];
}
return myGroup; // returns nil if group has previously been created and then deleted
Run Code Online (Sandbox Code Playgroud)

创建全新专辑"MyMedia2"时,此方法也适用.有没有其他人遇到此问题,并知道解决方法或解决方案?是唯一能够转移到新"照片"框架的解决方案,还是我在这里做错了什么?请注意,此代码始终适用于iOS7.X

实际上,重现此问题的步骤如下 - > 1.卸载拍摄照片的应用程序并将其保存到自定义相册2.在iOS照片下删除已保存照片的自定义相册3.安装应用程序4.如果您使用不创建它们的应用程序拍摄照片或录制视频或存储它们.如果您在iOS相册下查看,则自定义相册不存在,并且不存在使用该应用拍摄的所有照片/视频.

objective-c alassetslibrary ios7 ios8 photosframework

19
推荐指数
2
解决办法
9273
查看次数

如何从PHImageManager获取平方缩略图?

有谁知道如何从PHImageManager获取方形拇指?PHImageContentModeAspectFill选项无效.

[[PHImageManager defaultManager]
  requestImageForAsset:(PHAsset *)_asset
            targetSize:CGSizeMake(80, 80)
           contentMode:PHImageContentModeAspectFill
               options:nil
         resultHandler:^(UIImage *result, NSDictionary *info) {
    // sadly result is not a squared image
    imageView.image = result;
}];
Run Code Online (Sandbox Code Playgroud)

ios ios8 photosframework

19
推荐指数
3
解决办法
1万
查看次数

获取PHAsset的本地文件路径

我有一张照片,我希望我的用户能够在Instagram上分享,我需要获取照片的本地文件目录.

但是,我将我的图像作为PHAsset(不是ALAsset,所有其他答案似乎都涵盖在这个主题上).

查看PHAsset文档,我没有看到"本地目录"变量.

你知道如何使用新的ios8 Photo框架从用户相机胶卷获取照片的路径吗?

这是我在用户照片卷中加载最后一张图片的代码

public func loadLastPhotoIntoGalleryIcon()
{
    if(PHPhotoLibrary.authorizationStatus() != PHAuthorizationStatus.Authorized)
    {
        return
    }
    var fetchOptions:PHFetchOptions = PHFetchOptions()
    fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
    var fetchResult:PHFetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: fetchOptions)

    var lastAsset:PHAsset = fetchResult.firstObject as PHAsset

    var options:PHImageRequestOptions = PHImageRequestOptions()
    options.version = PHImageRequestOptionsVersion.Current
    PHImageManager.defaultManager().requestImageForAsset(lastAsset, targetSize: _view.getGalleryIconSize(), contentMode: PHImageContentMode.AspectFill, options: options)
    {
        (result, objects) -> Void in
        self._view.setGalleryIcon(result)
    }

}
Run Code Online (Sandbox Code Playgroud)

ios instagram swift photosframework phasset

19
推荐指数
1
解决办法
1万
查看次数