Objective-C:Sprite Kit ゲーム画面(SKScene)をキャプチャして twitter で画像を共有する

前回はゲーム画面をキャプチャした画像を、アルバムに保存する方法を説明しました。

今回はキャプチャした画像を twitter で共有する方法を説明したいと思います。

ゲーム画面をキャプチャして twitter で画像を共有する・インデックス

  1. 新規プロジェクトの作成(SpriteKit Game テンプレート)
  2. フレームワークのインポート
  3. ViewController へツイートのメソッドを記述
  4. キャプチャのメソッドの記述
  5. シーンから ViewController のツイートメソッドの呼び出し

ゲーム画面をキャプチャして twitter で画像を共有する・詳細手順

  1. 新規プロジェクトの作成(SpriteKit Game テンプレート)

    Xcode のメニューから File -> New -> Project… を選択し、SpriteKit Game のテンプレートを新規作成します。
    img_sk_capture2_01

  2. フレームワークのインポート

    twitter 共有のためのフレームワークをインポートします。
    img_sk_capture2_02

  3. ViewController へツイートのメソッドを記述

    先ほど追加したフレームワーク(Social.h)を ViewController.h にインポートし、インターフェースにメソッド名を記述します。ソースコード全体は以下のようになります。

    ViewController.h

    #import <UIKit/UIKit.h>
    #import <SpriteKit/SpriteKit.h>
    #import <Social/Social.h>
    
    @interface ViewController : UIViewController
    
    - (void)showTweetSheet:(NSData *)image;
    
    @end

    ViewController.m にツイートのメソッドを記述します。

    ViewController.m

    - (void)showTweetSheet:(NSData *)image
    {
        SLComposeViewController *tweetSheet = [SLComposeViewController
                                               composeViewControllerForServiceType:
                                               SLServiceTypeTwitter];
        
        tweetSheet.completionHandler = ^(SLComposeViewControllerResult result) {
            switch(result) {
                //  This means the user cancelled without sending the Tweet
                case SLComposeViewControllerResultCancelled:
                    break;
                //  This means the user hit 'Send'
                case SLComposeViewControllerResultDone:
                    break;
            }
        };
        
        [tweetSheet setInitialText:@"ゲーム画面のツイートサンプル"];
        
        if (![tweetSheet addImage:[UIImage imageWithData:image]]) {
            NSLog(@"Unable to add the image!");
        }
        
        if (![tweetSheet addURL:[NSURL URLWithString:@"http://twitter.com/"]]){
            NSLog(@"Unable to add the URL!");
        }
        
        [self presentViewController:tweetSheet animated:NO completion:^{
            NSLog(@"Tweet sheet has been presented.");
        }];
    }

  4. キャプチャのメソッドの記述

    シーンファイルから ViewController のメソッド呼び出すため、シーンのヘッダファイルに ViewController.h をインポートします。ソースコード全体は以下のようになります。

    MyScene.h

    #import <SpriteKit/SpriteKit.h>
    #import "ViewController.h"
    
    @interface MyScene : SKScene
    
    @end

    続いて画面をクリックしたとき、キャプチャを行うメソッドを touchesBegan: へ記述します。

    MyScene.m

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        [self captureGameScreen];
    }

  5. シーン から ViewController のツイートメソッドの呼び出し

    上記で記述した captureGameScreen を記述します。画面のキャプチャが完了したとき、(3)の ViewController メソッドへキャプチャ画像を引数で渡し、ツイート共有を実行します。

    MyScene.m

    - (void)captureGameScreen {
        CGRect rect = self.frame;
        UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale);
        [self.view drawViewHierarchyInRect:rect afterScreenUpdates:YES];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        NSData *dataSaveImage = UIImagePNGRepresentation(image);
        
        _VC = (ViewController *)[UIApplication sharedApplication].delegate.window.rootViewController;
        [_VC showTweetSheet:(dataSaveImage)];
    }

  6. アプリをビルドし、キャプチャボタンをクリックするとツイート画面が立ち上がります。
    img_sk_capture2_03

まとめ

ゲーム体験をソーシャルメディア等で共有することで、プレイヤーの達成感をより満たすことができます。

twitter やそのほかの SNS によるゲーム体験の共有は、今日のゲームにおいては実装すべき機能のうちのひとつだと言えます。多少面倒でも頑張って実装すれば、ゲームのダウンロード数にいい影響が生まれるかもしれませんね。

この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから

Related Contents

Pickup Contents