iPhoneアプリ開発 芳名帳アプリ作成(6) -写真に保存-

公開日: : iPhone, IT


 今までの流れ

 画面構成

今回の芳名帳アプリは以下の画面で構成しています。

  • メイン画面(MainViewController)
  • 設定画面(SettingViewController)
  • 記帳画面(GuestBookViewController)

 記帳画面

 写真に保存する

書いてくれた名前を写真に保存するようにします。

今回の仕様としては以下。
(1) 記帳スペースを写真に保存
(2) 本アプリ用のアルバムを用意しそこに保存する
今回、面倒なのは(2)ですね。

 (1)記帳スペースを写真に保存

UIImageを写真に保存する場合は、以下でできます。
記帳部分はUIImageViewなので、UIImageView.imageにすればOKです。

    ALAssetsLibraryWriteImageCompletionBlock completeBlock = ^(NSURL *assetURL, NSError *error) {
        if (!error) {
        	//成功した際の処理
        }
        if(error) {
	        //失敗した際の処理
        }
    };
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    [library writeImageToSavedPhotosAlbum:[self.nameSpace.image CGImage]
                              orientation:(ALAssetOrientation)[self.nameSpace.image imageOrientation]
                          completionBlock:completeBlock];
 (2)本アプリ用のアルバムを用意しそこに保存

今のままでは、他の写真と紛れてしまうのでアプリ用のアルバムに保存します。
enumerateGroupsWithTypesメソッドで現在のアルバム名を取得し、その中に指定したアルバムが存在するかを確認します。

    albumExists = NO;
    [library enumerateGroupsWithTypes:ALAssetsGroupAlbum
                           usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
                               if (group) {
                               	   //指定した名前のアルバムが存在するかを確認
                                   if ([アルバム名 compare:[group valueForProperty:ALAssetsGroupPropertyName]] == NSOrderedSame) {
                                   	   //存在すればNSURLを取得
                                       groupURL = [group valueForProperty:ALAssetsGroupPropertyURL];
                                       albumExists = YES;
                                   }
                               }
                               if(!group) {
                                   //指定した名前のアルバムがなければ新たに作成
                                   if(!albumExists) {
                                       ALAssetsLibraryGroupResultBlock resultBlock = ^(ALAssetsGroup *group) {
                                           groupURL = [group valueForProperty:ALAssetsGroupPropertyURL];
                                           albumExists = YES;
                                       };
                                       //アルバム作成
                                       [library addAssetsGroupAlbumWithName:アルバム名
                                                                resultBlock:resultBlock
                                                               failureBlock: nil];
                                   }
                               }
                           } failureBlock:nil];
}
 //アルバムに画像を保存
 - (void)addGroup:(NSURL*)assetURL AlbumURL:(NSURL *)albumURL {
    [library groupForURL:albumURL
             resultBlock:^(ALAssetsGroup *group){
                 [library assetForURL:assetURL
                          resultBlock:^(ALAsset *asset) {
                              [group addAsset:asset];
                          } failureBlock: nil];
             } failureBlock:nil];
 }

これで、指定したアルバムに写真を保存することができます。

アルバム名の箇所は設定から取ってくるようにします。
[UserInfo albumName]を作成。

 残課題

現状のままではまだ良くない点が何点かあります。
そこで以下の点を改良します。

  • アルバム名をユーザーが指定できるようにする。
  • ボタンを押したら記帳を初期化する。
  • ボタンを押したら保存するかの確認用ダイアログを表示する。

[追記]ブログには詳細を書いていませんが、上記も実装しておきました。

広告

関連記事

no image

iPhoneアプリ開発 −タッチで線を描く(1)−

* やりたいこと 今回やりたいことは以下の2点。 -(1) 画面をタッチして、指を動かして線を描きた

記事を読む

no image

jQuery Mobileの1.0Beta3、1.0RC1で起きた現象 -iOS5で動かない!?-

最近おきたjQuery Mobile周りについてのメモ。 本来なら色々チェックしてちゃんと原因を調

記事を読む

no image

Androidアプリ開発 -ギャラリーから選んだ画像のサムネイルを取得-

* やりたいこと +ボタンをクリックしてギャラリーを表示。 +ギャラリーで画像を選んだら、その画像の

記事を読む

no image

PHP_CodeSniffer+ Eclipse + PHP Code Formatter Pluginでコーディング規約を守ったコーディング

1人でプログラミングをしているにしても、多人数でプログラミングをしているにしても、コーディング規約を

記事を読む

Jenkins + DeployGate(1) -DeployGateでAndroidアプリ開発-

TestFlight for Androidが発表されて1ヶ月ぐらいたちますが、音沙汰がありません。

記事を読む

iPhoneアプリ開発 -UIScrollViewでタッチを取得-

* やりたいこと UIScrollViewでタッチを取得する。 * 方法 通常のUIScrollV

記事を読む

iPhoneアプリ開発 芳名帳アプリ作成(1) -最初の一歩-

* 作るアプリ 結婚式や2次会で「自分の名前を書く」芳名帳 これをアプリで作ってみます。

記事を読む

スクリーンショット 2012-12-06 15.34.43

iPhoneアプリ開発 -端末がネットワークにつながっているかどうか知りたい-

* やりたいこと アプリがネットに繋がっていなければアラートボックスを表示させたい。 ネットに繋

記事を読む

Jenkins + スマホアプリ(1) -スマホアプリ用CI環境を作ってみよう-

前回までは、iPhoneアプリでのCI環境でした。 TestFlightがAndroidアプリにも

記事を読む

no image

研究室での進捗報告の方法について、ふと思ったこと

* 以下に加筆・修正して移動しました。

記事を読む

広告

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

広告

no image
[感想] Effective Objective-C 2.0 ☆☆☆☆★(4.5)

* 構成 - 第1章 Objective-Cに慣れる -

no image
[感想] iOSアプリテスト自動化入門 ☆☆☆(3.0)

* 構成 - Chapter 1 テスト自動化への取り組み

DeployGateを試してみた(iOS編) -DeployGateがiOSに対応-

今までのDeployGate - -[http://pplace.

iPhone/iPadアプリを開発するためにやったこと

今までに、iPhoneを3本ほどリリース((リリースしたアプリは全て1

no image
ターミナルでgitのコマンドを補完したりブランチ名を表示する – macでgitを便利に使うために –

* やりたいこと macのターミナルでgitをいじっていると -今の

→もっと見る

PAGE TOP ↑