Permítanme prólogo al decir que esta es la primera vez que uso ALAssetsLibrary. Necesito acceder a la foto más reciente en la galería de fotos guardada del usuario. Parece que para hacer esto, tengo que crear una instancia de ALAssetsLibrary e iterar sobre cada elemento en la galería del usuario antes de seleccionar la última imagen. Este es siempre el peor de los casos. ¿Hay una manera más rápida/mejor de abordar este problema?Acceda a una sola imagen con ALAssetsLibrary
Respuesta
No es necesario enumerar todas las fotos en la galería del usuario. La clase ALAssetsGroup tiene un método - (void)enumerateAssetsAtIndexes:(NSIndexSet *)indexSet options:(NSEnumerationOptions)options usingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock
que puede usar para indicar qué activos desea enumerar.
En su caso, es solo el último, configure indexSet en [NSIndexSet indexSetWithIndexesInRange:NSMakeRange([group numberOfAssets]-1, [group numberOfAssets])
donde group es su ALAssetsGroup.
Como @mithuntnt mencionado, se puede obtener el ALAssetsGroup para la biblioteca de fotos usando [[assetsLibrary] enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:^(ALAssetsGroup *group, BOOL *stop)
Sólo hay un método de enumeración. Entonces esta es la única forma.
Necesitaba las últimas fotos importadas. Puede tener algún filtro similar a esto.
[[assetsLibrary] enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if(group)
{
NSString * groupName = [group valueForProperty:ALAssetsGroupPropertyName];
if([@"Last Import" isEqualToString:groupName])
{
*stop = true;
...
Qué tal esto:
[group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (result) {
*stop = YES;
//...
}
}];
no aparece la respuesta aceptada para trabajar si usted está enumerando una ALAssetGroup
que ha establecido un filtro (porque [group numberOfAssets]
devuelve el total de activos en lugar de los activos totales después del filtrado).
He utilizado este:
typedef void(^SMKMostRecentPhotoCompletionBlock)(ALAsset *asset);
- (void)mostRecentPhotoWithCompletionBlock:(SMKMostRecentPhotoCompletionBlock)completionBlock
{
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
__block ALAsset *mostRecentPhoto = nil;
if (group)
{
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
[group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if (result != NULL)
{
mostRecentPhoto = result;
*stop = YES;
}
}];
}
if (completionBlock)
{
completionBlock(mostRecentPhoto);
}
} failureBlock:^(NSError *error) {
if (completionBlock)
{
completionBlock(nil);
}
}];
}
En su completionBlock
, asegúrese de comprobar que la ALAsset devuelto = nil!.
- 1. UIColor colorWithPatternImage utiliza una sola imagen
- 2. Amazon S3 Acceda a la imagen por url
- 3. ¿Cómo concatenar iconos en una sola imagen con ImageMagick?
- 4. ALAssetsLibrary delete ALAssetsGroup/ALAsset
- 5. Acceda a los marcos GIF con C#
- 6. imágenes IOS5 de ahorro a carpeta personalizada, ALAssetsLibrary fallan
- 7. Acceda a DbContext desde IQueryable
- 8. No se puede vincular ALAssetsLibrary
- 9. Xcode: memoria caché SDWebImage para una sola imagen
- 10. cómo guardar varios lienzos en una sola imagen
- 11. ALAssetsLibrary - bloqueo después de recibir ALAssetsLibraryChangedNotification
- 12. Utilizando ALAssetsLibrary y ALAsset take Image como NSData
- 13. imagen de android dentro de una sola selección
- 14. Acceda a los elementos por índice en una plantilla FTL
- 15. Acceda a la cámara con el SDK de iPhone
- 16. require.js: Acceda a todos los módulos cargados
- 17. Escala PDF a una sola página
- 18. Acceda dinámicamente a una propiedad en un componente Delphi
- 19. Acceda a una .NET DLL personalizada en VBScript
- 20. Acceda a una variable en un script bash
- 21. Insertar varias filas con una sola consulta
- 22. Obtención de una hilera, con una sola columna con DOP
- 23. Acceda a TimeZoneInfo desde SQL 2005 Server
- 24. ¿Cómo evitar que Maven acceda a repositorios remotos?
- 25. Reproduzca una sola nota con DirectMusic
- 26. Tabla SQL con una sola fila?
- 27. Acceda a la propiedad indefinida en JavaScript
- 28. ¿Volver a cargar una sola fila jqGrid?
- 29. DOP fetchAll matriz a una sola dimensión
- 30. Llaves externas múltiples a una sola columna
Gracias, ¡Rock! Eso es justo lo que estaba buscando. – Jacob
Pequeño error en la respuesta anterior si estás usando esto. NSMakeRange ([group numberOfAssets] -1, [group numberOfAssets]) debería ser NSMakeRange ([group numberOfAssets] -1, 1) (el segundo param de nsmakerange es el recuento, no el índice final). Alternativamente, [NSIndexSet indexSetWithIndex: [group numberOfAssets] -1] es ligeramente más eficiente. –