【问题标题】:Compose UIActivityTypeMessage with UIImage用 UIImage 编写 UIActivityTypeMessage
【发布时间】:2012-09-26 01:13:57
【问题描述】:

如果有人可以提供一些见解,那就在徘徊。对于我的生活,我无法弄清楚如何使用 UIActivityTypeMessage 发送 UIImage,尽管有人说这是可能的。

文档说: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIActivity_Class/Reference/Reference.html

UIActivityTypeMessage

对象将提供的内容发布到消息应用程序。使用此服务时,您可以提供 NSString 和 NSAttributedString 对象作为活动项的数据。您还可以指定内容使用 sms 方案的 NSURL 对象。 在 iOS 6.0 及更高版本中可用。 在 UIActivity.h 中声明。

所以据我了解,我只能发送 NSString/NSURL。我不认为你这是可能的。

我正在使用这个:

UIImage *image; // some image here.

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

任何帮助将不胜感激。

【问题讨论】:

    标签: objective-c ios6 uiactivityviewcontroller uiactivity


    【解决方案1】:

    虽然在 iOS6 中使用 UIActivityViewController 让消息应用程序出现在共享表中似乎是可能的,但让它工作有一些秘诀——iOS7 是另一回事,将 NSURL 传递给资产可以通过盒子。

    不确定您是否从 ALAssetsLibrary 获取图像,但如果是这样,请使用其 NSURL 获取 ALAsset,而不是拉取 UIImage。份额表出现的时间很短。这不完全是我正在使用的代码,但类似。但是在 iOS6 上,只要有图片,activity view controller 就不会显示消息应用。

    - (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];
    }
    

    【讨论】:

    • 确认在 iOS7 中,分享到 iMessage 与标准 UIActivityController 一起工作。作为额外的奖励,您还可以通过 iMessage 和 AirDrop 共享视频,而无需先自行提取。在这两种情况下,在 activityItems 中传递 ALAsset 的 NSURL。
    【解决方案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/6-Default-568h@2x.png
    // http://anglerally.com/wp-content/uploads/2012/09/7-Default-568h@2x.png
    // iPad:
    // http://anglerally.com/wp-content/uploads/2012/09/6-Default-Portrait@2xipad.png
    // http://anglerally.com/wp-content/uploads/2012/09/7-Default-Portrait@2xipad.png
    

    【讨论】:

    • 这正是我正在做的。将数组添加到 UIActivityViewController。一切正常。我可以将图像分享到邮件、推特、Facebook、微博、复制、打印、保存到相机胶卷等。但我想通过彩信(iMessage)分享图像它不允许使用 UIImage 撰写。只有字符串和 nsurl。
    • 啊。我确实误读了你的问题。对不起!我刚刚检查过,你当然是对的。仅用于消息的文本...奇怪。
    • 遗憾的是,在应用程序内部发送带有消息视图的图像(即使使用 UIActivityViewController)是不可能的。我的解决方案是将图像复制到粘贴板,指示用户将图像粘贴到他们的消息中,然后使用 UIApplication 启动 iOS 消息应用程序...
    • @PsychoDad,苹果相机应用支持彩信功能,用于分享相机胶卷图像。你对此有什么想法吗?
    • @CornDogComputers,你在发送彩信(imessage)时能添加图片吗?
    猜你喜欢
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    相关资源
    最近更新 更多