Tag Archives: iPhone

PullToRefresh:「引っ張って更新」のためのライブラリ

0
Filed under iOS SDK
Tagged as , , , , ,

「テーブルをグイッと引っ張ったらデータをリロード」…もう誰もが当たり前だと思っているこの操作をUITableViewControllerに追加してくれるのがPullToRefreshライブラリです。

商用利用にも安心のMITライセンス

プロジェクトに追加する

まずは、いつものように、Gitで取得。

1
git clone git://github.com/leah/PullToRefresh.git

次に必要な下記のファイルをコピーして、自分のプロジェクトに追加します。

  • PullRefreshTableViewController.h
  • PullRefreshTableViewController.m
  • arrow.png

最後に、必要なFrameworkとして、QuartzCore framework を追加します。

使い方、カスタマイズ

自分のプロジェクト内では、UITableViewControllerの派生クラスとして作られているPullRefreshTableViewControllerクラスを派生させて使います
既にUITableViewControllerを使っているプロジェクトなら、ほんとうに簡単に機能追加ができます
読み込みのためのセルに表示されているメッセージ系は、下記のようにそれぞれプロパティが用意されているのでこれを使い変更できます。

1
2
3
@property (nonatomic, copy) NSString *textPull; // for "Pull down to refresh…"
@property (nonatomic, copy) NSString *textRelease; // for "Release to refresh…"
@property (nonatomic, copy) NSString *textLoading; // for "Loading..."

肝心のリフレッシュ処理ですが、PullRefreshTableViewController.m では下記のようなrefreshメソッドが定義されており、引っ張った後の処理はこれをオーバーライドして定義します。

1
2
3
4
5
- (void)refresh {
    // This is just a demo. Override this method with your custom reload action.
    // Don't forget to call stopLoading at the end.
    [self performSelector:@selector(stopLoading) withObject:nil afterDelay:2.0];
}

別のライブラリ

@xcatsanさんが、実装している同様のライブラリも紹介しておきます。
どうやって実現しているかの詳細な説明があり、ためになります。

「Cocoaの日々」、いつも参考にしています!

特許について:GJ! Loren Brichter

このライブラリを試しているときには気にしていなかったのですが、引っ張ってリロード、という操作方法は「Tweetie」というTwitterクライアントアプリで初めて実装され、その際に特許をとられているそうです。

ただ、特許保持者のLoren Brichterはこの操作方法を他の開発者が使うことは禁止しない、と明言しています。


素晴らしい!!!


[AD]

↓WordPressとの連携とか、GPSとか、チューニング、デバッグ方法まで、素晴らしいノウハウが詰まっている良書!

iPhoneアプリネットワーク+GPSプログラミング

著者/訳者:橋本 佳幸

出版社:秀和システム( 2009-11-19 )

定価:¥ 2,940

Amazon価格:¥ 2,940

単行本 ( 279 ページ )

ISBN-10 : 4798024244

ISBN-13 : 9784798024240


↓バージョンが古く見えるけど、特に問題なく分かりやすい書籍です。

iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)

著者/訳者:木下 誠

出版社:アスキー・メディアワークス( 2009-09-08 )

定価:¥ 2,940

Amazon価格:¥ 2,940

大型本 ( 416 ページ )

ISBN-10 : 4048679910

ISBN-13 : 9784048679916


MBProgressHUD:簡単ナウローディング表示ライブラリ

0
Filed under iOS SDK
Tagged as , , ,

iOSアプリでローディング表示(activity indicator)を使おうとするとちょっと面倒なんです。
UIActivityIndicatorViewを表示させ、その背景のボタンを押せないようにして、、まぁ、結局何かしらユーティリティライブラリを作ってしまうと思うんです。で、そういうのをオープンソースで公開してくれているのが、この MBProgressHUD!
超簡単!シンプル!
MITライセンスなんで、安心して商用にも使えますので、紹介+使い方メモ。

プロジェクトに追加する

上記GitHubサイトからzipなり、gitなりで取得して MBProgressHUD.h と、MBProgressHUD.m をプロジェクトに追加します。
特に関連フレームワークなどは無いので、これで準備は完了!

使い方

基本的な呼び出しコードはも簡単で、次のように書くことで表示ができます!

1
[MBProgressHUD showHUDAddedTo:viewForHUD animated:YES];

ただ、これだけだと、ちょっと設定がやりにくいので、次のようにローカル変数に代入すると便利です。

1
2
MBProgressHUD*	hud	= [MBProgressHUD showHUDAddedTo:viewForHUD animated:YES];
[hud setLabelText:@"接続中"]; // ラベル設定.

viewの設定メモ

showHUDAddedTo: メソッドに与えたView以下は、HUD表示中にはボタン等の処理が出来ません。
できないというか、そうしてくれたほうが大抵の場合ありがたいので非常に助かります。
ただ、UINavigationControllerで管理されているUIViewController内から呼び出すときには一点注意が必要です。
与えるViewを、self.view とすると、UINavigationController上にあるボタンに触れてしまうのです。
これがちょっと問題ある場合、self.navigationController.view のように指定すると、UINavigationController上のボタンもタッチできないようにすることが出来ます。


[AD]

↓人が触るものを作る人、全員にオススメ!教科書として。

誰のためのデザイン?―認知科学者のデザイン原論 (新曜社認知科学選書)

著者/訳者:ドナルド・A. ノーマン D.A. ノーマン

出版社:新曜社( 1990-02 )

定価:¥ 3,465

Amazon価格:¥ 3,465

単行本 ( 427 ページ )

ISBN-10 : 478850362X

ISBN-13 : 9784788503625


↓こういうのデスクの間にあるとなごみそう!

ザ・樹木015 ココヤシ

ザ・樹木015 ココヤシ

定価:¥ 714

Amazon価格:¥ 536

カテゴリ:おもちゃ&ホビー

発売日:2009-09-21


Reachability:iOSでネット接続を確認する公式ライブラリ

0
Filed under iOS SDK
Tagged as , , , ,

Reachabilityは、私も過去に使ったことがあるライブラリですが、最近また別のアプリでも使ったので、メモしておきます。

本ブログ執筆時の最新バージョンであるバージョン2.2では、対応iOSは、「iOS4.0以降」となっています。

インストール

ソースですが、上記ページ(iOS Developer Library内)にある [Download Sample Code]ボタン からダウンロード出来ます。

必要なのはこの中にあるReachability.hとReachability.m 。さらにプロジェクトには、SystemConfiguration.framework というフレームワークも追加しておく必要があるので、設定しておきましょう。
無事プロジェクトに追加できたら、下記のようなコードでネット接続状況を判別できます!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Reachability *reachablity = [Reachability reachabilityForInternetConnection];
NetworkStatus status = [reachablity currentReachabilityStatus];
switch (status) {
    case NotReachable:
        NSLog(@"インターネット接続出来ません");
        break;
    case ReachableViaWWAN:
        NSLog(@"3G接続中");
        break;
    case ReachableViaWiFi:
        NSLog(@"WiFi接続中");
        break;
    default:
        NSLog(@"??[%d]", status);
        break;
}

Warning対策

最近の開発環境では、ビルド時にReachabilityで下記のようなWarningが出ることがあります。

Declaration of ‘struct sockaddr_in’ will not be visible outside of this function

この場合、次の #import 指定を Reachability.h に追記すればこのWarningは消えます。

1
#import <netinet/in.h>

ARC対応のアプリでは要注意

私が今手がけているアプリではどれもARC対応とかしていないのですが、ARC対応のプロジェクトでは現在公開されている Reachability(Version 2.2, 2010-07-20)はそのままでは使えないようなので要注意です。
いろいろとネットに情報は転がっているので、必要な方はそれぞれ参考して修正してください!

↑2つ目のGistというのはそのままGitHubに上がっているので便利そうですね!


[AD]

↓購入しました!VMWare Playerとそこで動く仮想環境が入ったCD-ROM付き!さぁ、やるぞ!

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践

著者/訳者:徳丸 浩

出版社:ソフトバンククリエイティブ( 2011-03-03 )

定価:¥ 3,360

Amazon価格:¥ 3,360

大型本 ( 496 ページ )

ISBN-10 : 4797361190

ISBN-13 : 9784797361193


↓次のステップへ行きたいiOSアプリ開発者は必携!

エキスパートObjective-Cプログラミング -iOS/OS Xのメモリ管理とマルチスレッド-

著者/訳者:坂本 一樹

出版社:インプレスジャパン( 2011-11-18 )

定価:¥ 2,100

Amazon価格:¥ 2,100

単行本(ソフトカバー) ( 224 ページ )

ISBN-10 : 4844331094

ISBN-13 : 9784844331094


iOS SDK:他のアプリからドキュメントを取り込む仕組み

0
Filed under iOS SDK, iPadアプリ, iPhoneアプリ
Tagged as , , ,

他アプリと連携

iOSアプリを作っていて、「他のアプリからドキュメント(データファイルや画像ファイル)を取り込めるようにしたい」と思って調べた内容のまとめです。

「自分のアプリ内のドキュメントを他のアプリで開く」というのは UIDocumentInteractionController あたりをキーワードに検索してみるといろいろ出てくると思います。
この辺りの、iOSでファイルを共有する概要や実装手順については、下記ページが分かりやすいです。

今回やりたかったのは、↑このページの、項目3. Accepting Incoming Documents (Document Reader)というのがそれで、「他のアプリからドキュメントを取り込む」仕組みです。

取り込みの概要

ファイル取り込みの仕組みは本当にシンプルで、するべきことは次の2つ。

  • 対応ファイル形式の定義
  • 送られてきたドキュメントの処理

これを順番に説明したいと思います。

対応ファイル形式の定義

Xcodeでプロジェクトを選択し(1)、”ターゲット”(2) の “Info”(3) を開き、リスト内にある “Document Types”(4) に追記します。
Addボタンから、Add Document Typeを選択します(5)。
これで、
Document Typesに項目が追加(6)されるので、これを編集します。

次に、この項目の設定内容について説明します。

Document Types – Name

上記画像では「型紙(ZIP)」としているところですが、これは単に項目の名前。
他のアプリから見たときにこの名前が見えるわけでも無いようです。
自分で分かりやすいように命名すればOKです。

Document Types – Types

ここが肝で、対応ファイルの形式を書きますが、ファイルの拡張子ではありません。
Uniform Type Identifiers、略して UTI と呼ばれる識別子を列挙します。
一覧はiOS Developer Libraryの Uniform Type Identifiers Reference というページにあります。
例を挙げると、次のような感じになります。

  • PDF — com.adobe.pdf
  • PNG — public.png
  • ZIP — com.pkware.zip-archive

複数のファイル形式に対応することも可能で、例えば、PNG/JPEG/GIFを同等に扱う場合、次のようにTypesに入力します。

public.png, public.jpeg, com.compuserve.gif

Document Types – Icon

Iconには他のアプリで対応ファイルを開いたときにPOP内に表示するアイコン画像を指定できます。
指定しない場合、デフォルトのアプリアイコンを使った画像が表示されます。
自分で準備する場合、iPhone用には、22×29, 44×58、iPad用には、64×64、320×320の画像を用意する必要があり、ドロップシャドウとページカールエフェクトがかかるので、それを想定して作る必要があり、他にもマージンの設定が細かく決まっていて結構面倒なので、オリジナルを用意するのは相当余裕がある人だけでいいんじゃないでしょうか。
詳しくはこちらです↓

なんと、ここまでの設定だけで、特定のファイル形式に対して自分のアプリを開けるようにする準備は完了です!
かなり簡単ですね。

読み込みの仕組み

で、次にやるべきは、他のアプリから特定のファイルを指定し、自分のアプリを開いたあとの処理の実装。
UIApplicationDelegate インターフェイスの実装をしているクラスの、次のメソッドが呼び出されますので、この中に処理を書けばOKです。
- (BOOL)application:(UIApplication *)application openURL:(NSURL*)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
urlには次のようなファイルパスが入ってきます。

file://localhost/private/var/mobile/Applications/XXXXX/Documents/Inbox/sample.zip

自分のアプリの、Documents/Inbox/ フォルダ内にコピーされており、そのファイルへのパスが関数に渡ってくる、という仕組みです。
この Documents/Inboxフォルダですが、ここは書き込みできず、読み込みと削除しか出来ません。
そのため、もらったファイルは、自分でどこか適当な場所に移動することから始めるとよさそうです。

読み込みコード – サンプル

例えば、openURLに渡ってきたファイルの拡張子を判定し、Documentsディレクトリ直下に移動するには、次のようなコードになります。( application:openURL:sourceApplication:annotation: 内に書くことを想定しています)

1
2
3
4
5
6
7
8
9
10
11
12
// 拡張子で処理分岐:zipの場合.
if( [[url pathExtension] isEqualToString:@"zip"] ){
  // ここでzipの処理.
  NSArray* paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
  NSString* pathDocumentRoot = [paths objectAtIndex:0];
  NSString*	pathTempZip	= [pathDocumentRoot stringByAppendingPathComponent:[url lastPathComponent]];
  NSFileManager* fm	= [NSFileManager defaultManager];
  NSError* error = nil;
  if( [fm moveItemAtPath:[url path] toPath:pathTempZip error:&error] ){
    // zip移動成功後の処理.
  }
}

テストできるアプリ

さて、これで準備は出来たのですが、一般的に出回っているアプリ内のうち、どのアプリからなら送れるか?ということですが、やっぱりDropboxが便利ですね。
ただ、テキストファイル(.txt)、zipファイル(.zip)、はいけるんだけど、PNGとか画像そのものはダメでした。
これは、標準メーラーも同じ。
GoodReaderでは、画像も書き出しが出来たので、これを使ってみるといいと思います。
GoodReader for iPhone 3.13.1(¥450)
カテゴリ: 仕事効率化, ユーティリティ
現在の価格: ¥450(サイズ: 24.2 MB)
リリース日: 2009/02/28

ss1 ss2


[AD]

↓iOS SDK, Objective-Cの本、まだまだ出ていますね!最近のチェックしていないのですが、本書はこれから学ぶ人にはよさそう。

Objective-C超入門――ゼロからしっかり学べるiPhoneプログラミング【Xcode4.2対応】

著者/訳者:大川内隆朗

出版社:ラトルズ( 2012-01-25 )

定価:¥ 3,129

Amazon価格:¥ 3,129

単行本(ソフトカバー) ( 520 ページ )

ISBN-10 : 4899772874

ISBN-13 : 9784899772873


↓enchant.jsの書籍が出るらしい!

HTML5とJavaScriptでスマートフォンゲーム作成! ゼロからはじめるenchant.js入門【公式ガイド】

著者/訳者:布留川英一 伏見遼平 田中諒

出版社:アスキー・メディアワークス( 2012-02-18 )

定価:¥ 3,150

大型本 ( 272 ページ )

ISBN-10 : 4048862588

ISBN-13 : 9784048862585