LINEで送る

今回はUUIDを利用する方法と実装上の注意点を紹介します。

Intuos Creative Stylusには個体ごとにUUIDという一意なIDが割り振られており、まずはUUIDを利用した画像保存・閲覧を実装します。
実装する機能としては以下の機能となります。

・保存時にペアリングしたデバイスでのみ閲覧できる画像一覧画面
・保存した画像を表示するプレビュー画面

今回の説明は、画像一覧画面へ遷移するところまでですが、サンプルソースには全てのソースコードが入っていますので、興味のある方は、最後のダウンロードリンクからプロジェクトをダウンロードしてみてください。

1. ボタンの設置
まず保存処理を行うボタン・保存したファイルを表示するためのボタンを画面上に設置します。

スクリーンショット 2013-11-04 17.52.36

2. 画像の保存処理追加
保存ボタンをタッチした時に、以下のメソッドを実行するよう設定します。
このメソッドは、ペアリングしたデバイスが存在した場合、UUIDを取得して画像の保存先を変更しています。
デバイスが存在しない場合には、デフォルトの保存先に画像を保存しています。

// 保存ボタンのタッチ
- (IBAction)onSaveTouched:(id)sender {
    // 保存先のパス
    NSString *saveDir = [self getSavePath];
    
    // ディレクトリが存在しない場合は作成する
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:saveDir isDirectory:nil] == NO) {
        [fileManager createDirectoryAtPath:saveDir
               withIntermediateDirectories:YES
                                attributes:nil
                                     error:nil];
    }
    
    // ファイル名は現在の時刻に設定
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyyMMddHHmmss"];
    NSString *nowDate = [formatter stringFromDate:[NSDate date]];
    NSString *savePath = [saveDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", nowDate]];
    NSLog(@"保存先:%@", savePath);
    
    // 画像をPNGに変換し保存する
    NSData *pngData = UIImagePNGRepresentation(self.lastImage);
    [pngData writeToFile:savePath atomically:YES];
    
    // 保存完了
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"SignAppDemo"
                                                    message:@"保存が完了しました"
                                                   delegate:nil
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles: nil];
    [alert show];
}

onSaveTouchedの最初で実行しているgetSavepathは、ペアリングしたデバイスが存在した場合、UUIDを取得して画像の保存先を変更しています。
デバイスが存在しない場合には、デフォルトの保存先となります。

// 保存するディレクトリのパス取得
- (NSString*)getSavePath {
    // 認識しているデバイスがない場合は、デフォルトの保存先へ
    NSString *saveTarget = @"default";
    
    // 現在ペアリングしているデバイスの取得
    WacomDevice *device = [[WacomManager getManager] getSelectedDevice];
    if (device != nil) {
        // ペアリングしているデバイスのIDを保存先にする
        saveTarget = [device getUUIDAsNSString];
    }
    
    // Documentsディレクトリにファイルを保存する
    NSArray *dirs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDir = [dirs objectAtIndex:0];
    NSString *saveDir = [docDir stringByAppendingPathComponent:saveTarget];
    
    return saveDir;
}

3. 一覧画面への遷移
一覧画面に遷移する時に、ペアリングしているデバイスのUUIDから作成したパスを渡します。
一覧画面ではそのパスから保存した画像の一覧を表示しています。

// 一覧ボタンのタッチ
- (IBAction)onListTouched:(id)sender {
    [self performSegueWithIdentifier:@"listModalSegue" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"listModalSegue"]) {
        UINavigationController *navigationController = segue.destinationViewController;
        WDListViewController *viewController = (WDListViewController*)navigationController.visibleViewController;
        // 画像の保存先を一覧表示のViewControllerに設定
        viewController.savePath = [self getSavePath];
    }
}

今回のプロジェクトはStoryBoardに対応したプロジェクトになっていますので、
prepareForSegueで一覧画面のViewControllerに画像の保存先パスを渡しています。
デバイスがペアリングされていれば、そのデバイスで保存した画像の一覧が表示され、保存した画像を閲覧することができます。

以下のスクリーンショットは実際に画像を保存し、一覧やプレビュー画面に表示した時のものです。

IMG_0044

IMG_0045

最後にWacom Stylus SDKを実装する上での注意点として、アプリケーションはバックグラウンド・フォアグラウンドに遷移する際に以下の処理を追加する必要があります。

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[NSNotificationCenter defaultCenter] postNotificationName:kAlarmServiceEnteredBackgroundNotification object:self];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
    [[NSNotificationCenter defaultCenter] postNotificationName:kAlarmServiceEnteredForegroundNotification object:self];
}

この辺りはリファレンスにも記載されているので、読んでいない方は一度リファレンスを読むことをお勧めします。

以上でWacom Stylus SDKを利用したサインアプリの実装は終りとなります。
次回からはまた別のOSのお話をする予定ですので、楽しみにお待ちください!

今回実装したソースコードはこちらからダウンロードできます。
実際に、ダウンロードして試していただければと思います。
ソースコードには、Wacom Stylus SDKは付属しておりませんので、以下のページからWacom Stylus SDKを入手し、WacomDevice.frameworkを追加してください。

Wacom Stylus SDK入手申込み

Top