× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
twitterやfacebookとの連動をする方法について。
Social.framework というのに入っている。このフレームワークはデフォルトで用意されている。 #import <Social/Social.h> で使用できる。 cocos2d-xの場合は、AppController.mmに以下のように書く。
要するに、twitter用のあのダイアログはViewController扱い。 起動時にデフォルトで入れる文章が initialText にあたる。 投稿ボタンやキャンセルボタンを押すとダイアログは閉じ、ViewController も閉じる。 再度投稿させる場合は、再度ViewControllerを作るわけ。 completionHandler にメソッドを登録しておくと、投稿ないしキャンセルしたときにコールバックが飛んでくる。
ただし、投稿に成功・失敗したとは違うことに注意。 「投稿」ボタンを押したが、twitterのパスワードが登録されていなくて投稿に失敗した、のような場合でも、resultは SLComposeViewControllerResultDone のほうが渡されてくる。 PR |
iPhone各機種の比較。
端末 画面サイズ 初期OS iPhone4S 640x960 5.0 iPhone5 640x1136 6.0 iPhone5c 640x1136 7.0 iPhone5s 640x1136 7.0 作ったアプリの画面サイズが 640x960 で動くか、640x1136 で動くかどうかの判断は、アプリ内に Default-568h@2x.png というファイルがあるかどうかによるらしい。 公式マニュアル ずいぶん分かりにくい。注意しよう。 |
レーティングしてもらうために出すダイアログ。
定番は iRate。 分かりやすい説明の記事。 iRate.h iRate.mm の2ファイルを置くだけで良い。 設定内容として以下のようなコードを起動直後に行っておく。
とある画面を一定回数通ったらダイアログを出す、をしたいときは
というのを呼べばいい。設定した内容に応じて、ダイアログを出してくれる。 ただしこれも、開発中(APP_IDが存在しない)ときはダイアログが出ないので注意。(後述) 自分で明示的に呼び出すこともできて、
とすれば良い。必ずダイアログが出る。 また、レーティング済みかどうかは
で分かる。 ただしこれは実際にApp Storeに書き込んだかどうかではなく、アプリ内で保存している変数値でチェックしていることに注意。
さて、コンパイルに失敗する場合があるが、それはARCが有効になっていないからかも。 このページを参考にして対応しよう。 問題はAPP_ID。アプリを申請したときに出てくる固有のID。これはサブミット作業を進めておかないと取得されない。 実際には、APP_IDでなく、バンドルIDでもレビュー画面に飛べる。 だからAPP_IDがなくてもいいんだけど、ぶっつけ本番になるから確認したいところ。 多分、サブミット作業をバイナリアップロード前(情報登録)のところまで進めておけば、APP_IDが発行されるんで、それを入れておくところまでやっておこう。 APP_IDまで入れた状態で、しかしまだAppStoreにページが存在していない状態(URLは決定しているけどね)で、 [[iRate sharedInstance] logEvent:NO]; を呼び出すと、ログに以下の文章が出る。
つまり、ダイアログは表示されなかったけど、AppStoreにページがないだけだから安心して、ということだ。 提出前のチェックとしては、このメッセージを信じて実装完了としよう。 |
サイズ違いの画像を同じ名前で扱える。
内部はディレクトリ構造で持っている(Finder)で確認可能。 使い方 images.xcassets ディレクトリ以下に置かれる。 なのでResourcesディレクトリとか作らなくていい(2重に持つことになる) しかしタブバーにもUIImageViewにもうまく表示されない。なぜだ 画像の種類が悪いのか??…そんなはずないと思うけど |
使い方は、曲のリスト表示するときと同じ。
曲のときと違って、フレームワークの追加やimportなどは特にする必要がない。 UIKitに含まれているようだ。 |
さて、サウンドを鳴らすにはどうするか。
前の記事で、MPMediaItemCollection 型の変数 mediaItemCollection は持っているので、話は早い。
でおしまい。 |
iPhoneアプリで、自分のiPhoneに入ってる好きな曲をBGMにできたりするものがある。
そういうときに表示される表(UITableViewController)の使い方。 iOS的には、ああいうのを「ピッカー」(picker)と呼ぶらしい。 iPhoneに入っている曲を表示するのは MPMediaPickerControllerView。 iPhoneに入っている画像を表示するのは UIImagePickerControllerView。 どっちも使い方はだいたい同じ。 (というか、書籍とか調べてもMPMediaPickerControllerViewについては全然書いてなくて、 XCodeからヘルプで名前の類推して"PickerControllerView"で検索してやっと探し当てた。 使い方は書籍に書いてあったUIImagePickerControllerViewとまったく同じにやってみたらそのままできた) |
今までずっとjpgを使って描画してたのだが、
アルファ抜きできないと当然困るわけで、pngを描画してみようと思った。 CoreGraphicsを使ったテクスチャロードは、pngだとなぜかサポート外フォーマットと言われる。 これは自分が普段使っているペイントソフトのせいじゃないかと疑っている。 iPhoneでpng で検索していると、 圧縮フォーマットのPVRを使うのがよさげな記事がいろいろ出てきた。 たとえばここ pngを作って、iPhoneSDKに入っているtexturetoolというのを使ってコンバートしてできたpvrファイルを使うらしい。 試しにやってみた。この記事のソースを組み込む。 ネット上から拾ってきたpngファイルだとちゃんと表示された。 自分の使ってるペイントソフトだとできない。なぜか白黒に。フォーマットおかしいかんじがすごくする。(もちろんアルファも抜けてない) 違うソフトを探してきてやってみるか。 |
iPhoneでタッチ点を取得する関数は
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event; - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event; タッチした点を取得する方法は以下のような感じ。
touches にその呼び出し間隔内にタッチされた点全部が入っている。 ここには書いていないが、touches は UITouch 型変数の配列。 UITouchから直接座標を求めることはできなくて、座標系つまりビューかウィンドウを渡すと、そのビュー内座標・ウィンドウ内座標に変換して取得できる。 locationInView メソッドにビューかウィンドウを渡す。 (ウィンドウクラスはビュークラスの子クラス。) 基本的には、上に書いたように、viewControllerクラスのビューを渡せばいい。 ビュー内座標で受け取れる。ビューが画面と一致しているとは限らないので注意が必要だが、画面が回転していてもちゃんとそのときの向きの左上点を原点とした座標で返してくれるから便利。 ウィンドウを渡すか、nilを渡すと、デバイスでの座標で取得することになる。 例えば以下のような感じ。 CGPoint p = [touch locationInView: ((UITouch*)touch).window]; これはデバイスを縦持ちしたときの左上点を原点とした座標系。デバイスを横持ちしても上限反転しても、あくまでデバイスの座標系で返すことになる。だから、横持ちするアプリとか、回転できるアプリだと使いにくい。 |