Pregunta

I am experimenting with the Social Framework. I was wondering if there is any possible way to attach the last photo taken and currently saved in the camera roll using this implementation from my app:

 - (IBAction)shareByActivity:(id)sender {
    NSArray *activityItems;

    if (self.sharingImage != nil) {
        activityItems = @[self.sharingImage, self.sharingText, self.addURL];
    } else {
        activityItems = @[self.sharingText, self.addURL];
    }

    UIActivityViewController *activityController =
    [[UIActivityViewController alloc] initWithActivityItems:activityItems
                                      applicationActivities:nil];

    [self presentViewController:activityController
                       animated:YES completion:nil];
}

If so how do I modify the shareImage name in this specific portion of my -(void)viewDidLoad ?

self.sharingImage = [UIImage imageNamed:@"notSureWhatToPutHere"];

Everything works well, the social panel opens and has all the needed service. My only request is to find out how to call the latest image from the camera roll. I am not sure if I need the image real name or if there is any other way to achieve what i would like: a post with a picture attached (most recent picture in camera roll).

Any help is appreciated.

¿Fue útil?

Solución

You can pretty painlessly get the last image in the camera roll using the asset library framework. Give this a try:

#import <AssetsLibrary/AssetsLibrary.h>

Then to get the image:

ALAssetsLibrary *cameraRoll = [[ALAssetsLibrary alloc] init];
[cameraRoll enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *images, BOOL *stop) {
    [images setAssetsFilter:[ALAssetsFilter allPhotos]];
    [images enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:[images numberOfAssets] - 1] options:0 usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop){
        if (result) {
            ALAssetRepresentation *rep = [result defaultRepresentation];
            self.sharingImage = [UIImage imageWithCGImage:[rep fullScreenImage]];
        }
    }];


}
                        failureBlock: ^(NSError *error) {
                            NSLog(@"An error occured: %@",error);
                        }];

Otros consejos

Thanks for the great help NSPostWhenIdle!

I was able to resolve the issue of getting "newest photos" from camera roll by moving my ALAssettsLibrary chuck of code away from viewDidLoad and created a refreshAlbum

 - (void) refreshAlbum
{
ALAssetsLibrary *cameraRoll = [[ALAssetsLibrary alloc] init];
[cameraRoll enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *images, BOOL *stop) {
    [images setAssetsFilter:[ALAssetsFilter allPhotos]];
    [images enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:[images numberOfAssets] - 1] options:0 usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop)
     {
         if (result) {

             ALAssetRepresentation *rep = [result defaultRepresentation];
             self.sharingImage = [UIImage imageWithCGImage:[rep fullScreenImage]];
         }
     }];
}
                        failureBlock: ^(NSError *error) {
                            NSLog(@"An error occured: %@",error);
                        }];
}

Then I am calling the newly created refreshAlbum from the same button that enable the shareByActivity

- (IBAction)refreshButton:(id)sender {
    [self refreshAlbum];
}

This work particularly well as my app does not have any picture to share as it starts up. The first time that imageShare become available is after activating the shareByActivity button that now carries the refreshButton function as well!

Thanks again, this really work.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top