Jas*_*hao 7 iphone objective-c ios
在我的应用程序中有一个按钮,用户只需单击它,然后可以直接在屏幕上检索库中的最新照片.如何在图书馆中获取最新照片?
2012/02/17
这可以获得ALAsset
void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop)
{
if(result != nil)
{
[self.assets addObject:result];
}
};
void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop)
{
if(group != nil)
{
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
[group enumerateAssetsUsingBlock:assetEnumerator];
}else{
self.image = [self getLastImage];
}
};
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror){
NSLog(@"error occour =%@", [myerror localizedDescription]);
};
assets = [[NSMutableArray alloc] init];
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:assetGroupEnumerator failureBlock:failureblock];
[assetsLibrary release];
Run Code Online (Sandbox Code Playgroud)
要获取文件日期,我使用它
assetURLArray = [[NSMutableArray alloc] init];
for (ALAsset *asset in self.assets) {
NSDate * date = [asset valueForProperty:ALAssetPropertyDate];
Run Code Online (Sandbox Code Playgroud)
然后我发现最新的图像总是属于assetURLArray的顶级图像,所以我终于得到了这样的最新图像
if (self.assets && [self.assets count]) {
ALAsset *asset = [self.assets objectAtIndex:([self.assets count] - 1)];
CGImageRef ref = [[asset defaultRepresentation]fullResolutionImage];
Run Code Online (Sandbox Code Playgroud)
我不知道如果这总是有效的......希望任何人都可以证明我.
在那里,我正在寻找一种同步线程的方法......
小智 11
您可以通过遵循ALAssetsGroup的方法来完成
(void)enumerateAssetsWithOptions:(NSEnumerationOptions)options usingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;**
applying **NSEnumerationReverse** option
void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop)
{
if(result != nil)
{
[self.assets addObject:result];
}
};
void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop)
{
if(group != nil)
{
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
[group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:assetEnumerator];
}
};
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror){
NSLog(@"error occour =%@", [myerror localizedDescription]);
};
assets = [[NSMutableArray alloc] init];
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:assetGroupEnumerator failureBlock:failureblock];
[assetsLibrary release];
**Your self.assets array will have latest images**
Run Code Online (Sandbox Code Playgroud)
此代码片段可以检索ALAsset:
void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger
index, BOOL *stop) {
if(result != nil) {
[self.assets addObject:result];
}
};
void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) {
if(group != nil) {
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
[group enumerateAssetsUsingBlock:assetEnumerator];
} else {
self.image = [self getLastImage];
}
};
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror) {
NSLog(@"error occour =%@", [myerror localizedDescription]);
};
assets = [[NSMutableArray alloc] init];
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:assetGroupEnumerator failureBlock:failureblock];
[assetsLibrary release];
Run Code Online (Sandbox Code Playgroud)
为了获取文件日期,我使用这个:
assetURLArray = [[NSMutableArray alloc] init];
for (ALAsset *asset in self.assets) {
NSDate * date = [asset valueForProperty:ALAssetPropertyDate];
Run Code Online (Sandbox Code Playgroud)
然后我发现最新的图像总是位于最上面assetURLArray,所以我终于得到了这样的最新图像:
if (self.assets && [self.assets count]) {
ALAsset *asset = [self.assets objectAtIndex:([self.assets count] - 1)];
CGImageRef ref = [[asset defaultRepresentation] fullResolutionImage];
Run Code Online (Sandbox Code Playgroud)
我不知道这是否总是有效......我希望有人能消除我对此的疑虑。
我正在寻找一种同步线程的方法......
2012-04-03 更新
现在我用来NSNotification解决这个问题:
- (void)gotLastImageCallBack {
if (notifyName) {
[[NSNotificationCenter defaultCenter] postNotificationName:notifyName object:nil];
}
}
Run Code Online (Sandbox Code Playgroud)
获取图像后,通知将回调发送回相关类。
| 归档时间: |
|
| 查看次数: |
10538 次 |
| 最近记录: |