Подтвердить что ты не робот

Составить UIActivityTypeMessage с UIImage

Блуждал, если кто-то может предложить какое-то понимание. Для жизни я не могу понять, как отправить UIImage с помощью UIActivityTypeMessage, хотя некоторые говорят, что это возможно.

Документы говорят: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIActivity_Class/Reference/Reference.html

UIActivityTypeMessage

Объект помещает предоставленный контент в приложение "Сообщения". При использовании этой службы вы можете предоставить объекты NSString и NSAttributedString в качестве данных для элементов активности. Вы также можете указать объекты NSURL, содержимое которых использует схему sms. Доступно в iOS 6.0 и более поздних версиях. Объявлено в UIActivity.h.

Поэтому, насколько я понимаю, я могу отправить NSString/NSURL. Я не вижу в этом возможности.

Я использую это:

UIImage *image; // some image here.

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[ image ] applicationActivities:nil];

Любая помощь будет высоко оценена.

4b9b3361

Ответ 1

Пока кажется, что приложение сообщения появляется на общем листе с использованием UIActivityViewController в iOS6, есть некоторые тайны, чтобы заставить его работать. iOS7 - это другая история, передающая NSURL для работы актива из коробка.

Не уверен, что вы получаете изображения из ALAssetsLibrary, но если это так, возьмите ALAsset, используя свой NSURL, а не потянув UIImage. Пакет акций появляется за долю времени. Это не совсем тот код, который я использую, но похожий. Но на iOS6 контроллер представления активности не будет показывать приложение сообщений, пока есть прикрепленное изображение.

- (void) presentActivityViewController:(ALAsset*) asset {
    // add this to your viewController class

    NSDictionary *urls = [asset valueForProperty:ALAssetPropertyURLs];
    NSURL *url;
    if ([urls count]) {
        for (NSString *key in urls) {
            // I'm making an assumption that the URL I want is the first URL in the dictionary
            url = [urls objectForKey:key];
            break;
        }
    }

    NSArray *activityItems = @[url];
    UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
    [self presentViewController:activityController animated:YES completion:nil];
}

Ответ 2

Здесь, как использовать UIActivityViewController универсально, с текстом и изображением.

NSMutableArray *items = [NSMutableArray new];
[items addObject:@"Hello world!"];
[items addObject:[UIImage imageNamed:@"MyImage"]];
NSArray *activityItems = [NSArray arrayWithArray:items];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
    [self presentViewController:self.activityViewController animated:YES completion:nil];
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    UIPopoverController *aPopoverController = [[UIPopoverController alloc] initWithContentViewController:activityViewController];
    [aPopoverController presentPopoverFromBarButtonItem:self.actionButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

// Examples:
// iPhone:
// http://anglerally.com/wp-content/uploads/2012/09/[email protected]
// http://anglerally.com/wp-content/uploads/2012/09/[email protected]
// iPad:
// http://anglerally.com/wp-content/uploads/2012/09/[email protected]
// http://anglerally.com/wp-content/uploads/2012/09/[email protected]