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]を作成。

 残課題

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

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

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

広告

関連記事

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

今までに、iPhoneを3本ほどリリース((リリースしたアプリは全て100万DL超えしました!))し

記事を読む

no image

ViewController単位で画面の向きを変えてみる

ViewController毎に画面の向きを変えたい!ということがあったのでやってみました。 *

記事を読む

no image

CakePHP1.3でスマートフォン対応

CakePHP1.3でスマートフォン対応のためにやったことをメモしておきます。 * 環境 -

記事を読む

no image

iPhoneアプリ開発 -UIScrollViewで画像を拡大・縮小-

* やりたいこと UIScrollViewでピンチアウト・インして上に乗っている画像を拡大・縮小した

記事を読む

no image

Selenium2.0でUIテスト(2) -Rubyでやってみよう-

前回は、Selenium + PHPを試しました。 今後はRubyでやってみようということでSele

記事を読む

no image

Androidアプリ開発 -リストをタッチして別ページ表示-

* 前提 -「設定画面」で各種項目を設定。 --Activity:ConfigActivity --

記事を読む

no image

CakePHPのモデルのキャッシュではまった -新しく追加したカラムに値が入らない-

タイトルのとおり、ちょこっとCakePHPではまったのでメモ。 * 作業内容 -MySQLで、ある

記事を読む

no image

カレログ騒動で考えたライフログのこと

今回、カレログというAndroidアプリが話題になり騒動になってます。 というわけで、ふとカレログ

記事を読む

setup

Google Appsで独自ドメインメールの利用

独自ドメインでメアドを持ちたかったのでGoogle Appsを利用してみました。 その各種設定の覚

記事を読む

no image

「Google Apps」無償版の新規登録が終了

以前、「Google Apps」を利用した以下の記事を書きましたが、とうとう無償版の新規登録が終了

記事を読む

広告

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 ↑