27

iOS 6の新機能を試してみたのですUIActivityViewControllerが、起動して実行するのは非常に簡単ですが、思い通りに制御する方法がわかりません。記事へのリンクを投稿したいので、リンクの画像も添付したいと思います。URLのサムネイルとして、その画像をFacebookのアルバムにアップロードしたくありません。

これは、Facebook SDK で完全に制御できるため簡単に実行できますが、それを行う方法はありUIActivityViewControllerますか? これが私が得たものです:

    NSArray *activityItems = @[[NSURL URLWithString:[article link]], [UIImage imageNamed:@"myStockImage"]];
    UIActivityViewController *viewCont = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
    [self presentViewController:viewCont animated:YES completion:nil];

これは機能しますが、画像を「iOSアルバム」にアップロードします。配列に画像を追加しないと、Facebook シートは空白のように見え、添付ファイルにはグレー表示されたサファリ ロゴが表示されます (サムネイルが表示されないなど)。サファリでリンクを Facebook にしようとすると、ページのサムネイルとしてのスクリーングラブ、私はそのようなことをしたい

アップデート :

これが私のアプリからの外観です(UIActivityViewControllerまたはSLComposeの方法を使用)。写真をフォト アルバムにアップロードする方法を確認するiOS Photos

写真の配置がおかしい

これが私が望むものです(Safariも参照してください):

ここに画像の説明を入力

4

4 に答える 4

50

私はこれについて検索しましたが、 を使用してUIActivityViewControllerも意図したことを実行する方法がないという結論に達しました。写真を共有しようとするたびに、デフォルトで「iOS」アルバムの 1 つに写真を入れるだけです。

私の場合、共有する必要のあるリンクから画像が取得されている限り、写真を投稿する必要はありませんでした (Facebook のタイムラインにリンクを投稿すると、そのリンクから自動的に写真が取得され、写真がリンクになります)。そのために、URLだけを投稿してもうまくいかないことがわかりました。最初のテキストを投稿してから URL を投稿する必要があります。これは、オブジェクトをその順序でactivityItems配列内に配置することによって行います。

これは私の作業コードです:

NSArray * activityItems = @[[NSString stringWithFormat:@"Some initial text."], [NSURL URLWithString:@"http://www.google.com"]];
NSArray * applicationActivities = nil;
NSArray * excludeActivities = @[UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypePostToWeibo, UIActivityTypePrint, UIActivityTypeMessage];

UIActivityViewController * activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:applicationActivities];
activityController.excludedActivityTypes = excludeActivities;

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

また、これらのオブジェクトに沿って写真を投稿すると、リンクから画像が取得されないことにも気付きました.

これが役立つことを願っています。

于 2013-01-24T21:31:49.683 に答える
1

特に UIActivityViewController を使用する必要がない場合は、SLComposeViewController を使用するのが簡単です。

+(void)presentShareWidgetWithText:(NSString*)text url:(NSURL*)url images:(NSArray*)images toService:(NSString*)service presentIn:(UIViewController*)parentViewController {
    SLComposeViewController* controller = [SLComposeViewController composeViewControllerForServiceType:service];
    if (controller == nil) {
        DLog(@"Could not initialize SLComposeViewController for %@!", service);
        return;
    }
    if (url != nil) {
        if (![controller addURL:url])
            DLog(@"Failed adding url %@!", url);
    }
    if (images != nil) {
        for (UIImage* image in images) {
            if (![controller addImage:image]) {
                DLog(@"Failed adding image: %@", image);
            }
        }
    }
    if (![controller setInitialText:text]) {
        DLog(@"Failed setting initial text: %@", text);
    }

    SLComposeViewControllerCompletionHandler handler = ^(SLComposeViewControllerResult result) {
        switch (result) {
            case SLComposeViewControllerResultCancelled:
                DLog(@"SLComposeViewControllerResultCancelled");
                break;

            case SLComposeViewControllerResultDone:
                DLog(@"SLComposeViewControllerResultDone, Shared on service: %@", service);
                break;

            default:
                DLog(@"Unhandled result: %d", result);
                break;
        }

        dispatch_async(dispatch_get_main_queue(), ^{
            [parentViewController dismissViewControllerAnimated:YES completion:^{
                DLog(@"Dismissed a controller here!");
            }];
        });
    };

    [controller setCompletionHandler:handler];

    [parentViewController presentViewController:controller animated:YES completion:^{
        DLog(@"Presented %@!", controller);
    }];
}
于 2012-09-30T02:35:33.257 に答える
0
- (void)tweetURL:(NSString *)url title:(NSString *)title {
    TWTweetComposeViewController *twitter = [[TWTweetComposeViewController alloc] init];
    NSString *format = @"“%@” %@ /via @DesignSceneApp";
    NSString *message = [NSString stringWithFormat:format, title, url]
    NSUInteger idx = title.length;
    while (![twitter setInitialText:message]) {
        idx -= 5;
        if (idx > 5) {
            message = [NSString stringWithFormat:format,
                [NSString stringWithFormat:@"%@…", [title substringToIndex:idx]],
                url
            ];
        } else {
            // Give up on the title.
            message = [NSString stringWithFormat:@"%@ /via @DesignSceneApp", url];
            [twitter setInitialText:message];
            break;
        }
    }

    [self presentViewController:twitter animated:YES completion:nil];
}
于 2012-11-28T10:54:51.300 に答える