忍者ブログ
  • 2024.10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 2024.12
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/11/23 10:37 】 |
twitter投稿機能
twitterやfacebookとの連動をする方法について。
Social.framework というのに入っている。このフレームワークはデフォルトで用意されている。

#import <Social/Social.h>
で使用できる。

cocos2d-xの場合は、AppController.mmに以下のように書く。

if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) {
SLComposeViewController *twitter = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[twitter setInitialText:initialText];
[self.viewController presentViewController: twitter animated:YES completion:NULL];
}





要するに、twitter用のあのダイアログはViewController扱い。
起動時にデフォルトで入れる文章が initialText にあたる。
投稿ボタンやキャンセルボタンを押すとダイアログは閉じ、ViewController も閉じる。
再度投稿させる場合は、再度ViewControllerを作るわけ。

completionHandler にメソッドを登録しておくと、投稿ないしキャンセルしたときにコールバックが飛んでくる。

typedef void (^SLComposeViewControllerCompletionHandler)
(SLComposeViewControllerResult result);
resultは以下のどっちか
SLComposeViewControllerResultCancelled
SLComposeViewControllerResultDone




ただし、投稿に成功・失敗したとは違うことに注意。
「投稿」ボタンを押したが、twitterのパスワードが登録されていなくて投稿に失敗した、のような場合でも、resultは SLComposeViewControllerResultDone のほうが渡されてくる。

PR
【2014/06/13 23:40 】 | iPhone | 有り難いご意見(0)
iPhoneシリーズ画面サイズやOS
iPhone各機種の比較。

端末     画面サイズ   初期OS
iPhone4S   640x960    5.0
iPhone5   640x1136    6.0
iPhone5c   640x1136    7.0
iPhone5s   640x1136    7.0

作ったアプリの画面サイズが 640x960 で動くか、640x1136 で動くかどうかの判断は、アプリ内に
Default-568h@2x.png
というファイルがあるかどうかによるらしい。
公式マニュアル

ずいぶん分かりにくい。注意しよう。

【2014/06/13 11:41 】 | iPhone | 有り難いご意見(0)
iRate導入
レーティングしてもらうために出すダイアログ。
定番は iRate

分かりやすい説明の記事

iRate.h
iRate.mm
の2ファイルを置くだけで良い。

設定内容として以下のようなコードを起動直後に行っておく。

[[iRate sharedInstance] setAppStoreID:APP_ID];

[[iRate sharedInstance] setUsesUntilPrompt:1]; //1回起動でプロンプト出す
[[iRate sharedInstance] setEventsUntilPrompt:1]; //1回イベント通過でプロンプト出す
[[iRate sharedInstance] setDaysUntilPrompt:2.f]; //「あとで」の場合、2日後に再度プロンプト出す

[[iRate sharedInstance] setMessageTitle:@"AppStoreレビュー"];
[[iRate sharedInstance] setMessage:@"このアプリをAppStoreでレビューしませんか?"];
[[iRate sharedInstance] setRateButtonLabel:@"いますぐレビューする"];
[[iRate sharedInstance] setRemindButtonLabel:@"あとで"];
[[iRate sharedInstance] setCancelButtonLabel:@"レビューしない"];





とある画面を一定回数通ったらダイアログを出す、をしたいときは

[[iRate sharedInstance] logEvent:NO];




というのを呼べばいい。設定した内容に応じて、ダイアログを出してくれる。
ただしこれも、開発中(APP_IDが存在しない)ときはダイアログが出ないので注意。(後述)

自分で明示的に呼び出すこともできて、

[[iRate sharedInstance] promptForRating];




とすれば良い。必ずダイアログが出る。


また、レーティング済みかどうかは

[[iRate sharedInstance] ratedAnyVersion];




で分かる。
ただしこれは実際にApp Storeに書き込んだかどうかではなく、アプリ内で保存している変数値でチェックしていることに注意。

- (void)setRatedThisVersion:(BOOL)rated
{
[[NSUserDefaults standardUserDefaults] setObject:(rated? self.applicationVersion: nil) forKey:iRateRatedVersionKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}




さて、コンパイルに失敗する場合があるが、それはARCが有効になっていないからかも。
このページを参考にして対応しよう。


問題はAPP_ID。アプリを申請したときに出てくる固有のID。これはサブミット作業を進めておかないと取得されない。
実際には、APP_IDでなく、バンドルIDでもレビュー画面に飛べる。
だからAPP_IDがなくてもいいんだけど、ぶっつけ本番になるから確認したいところ。
多分、サブミット作業をバイナリアップロード前(情報登録)のところまで進めておけば、APP_IDが発行されるんで、それを入れておくところまでやっておこう。

APP_IDまで入れた状態で、しかしまだAppStoreにページが存在していない状態(URLは決定しているけどね)で、
[[iRate sharedInstance] logEvent:NO];
を呼び出すと、ログに以下の文章が出る。

iRate could not find this application on iTunes. If your app is not intended for App Store release then you must specify a custom ratingsURL. If this is the first release of your application then it's not a problem that it cannot be found on the store yet



つまり、ダイアログは表示されなかったけど、AppStoreにページがないだけだから安心して、ということだ。
提出前のチェックとしては、このメッセージを信じて実装完了としよう。
【2014/06/11 19:07 】 | iPhone | 有り難いご意見(0)
アセットカタログ
サイズ違いの画像を同じ名前で扱える。
内部はディレクトリ構造で持っている(Finder)で確認可能。

使い方

images.xcassets ディレクトリ以下に置かれる。
なのでResourcesディレクトリとか作らなくていい(2重に持つことになる)

しかしタブバーにもUIImageViewにもうまく表示されない。なぜだ
画像の種類が悪いのか??…そんなはずないと思うけど
【2014/06/07 18:20 】 | iPhone | 有り難いご意見(0)
XCodeのビルド、scheme
ビルド種別を増やす方法
(デフォルトはDEBUG,RELEASEのふたつだけ。)

以下の場所。
プロジェクトを選択し、PROJECT(TARGETSではなく)を選択、Info の Configuration の部分。

ここの「+」記号を押す。
何をもとに追加するか(Duplicate "Debug" Configuration)とか選べるので、もとにしたいビルドを選ぶ。
で増やす。
そうすると、TARGETSの各種BuildSettingsとかにも追加される。

schemeの追加方法
schemeをクリックし、New Scheme をクリック。
Edit Scheme をクリックし、左ペインの各種を選択し、右ペインに出てくる BuildConfiguration を正しく選ぶ。
すると、スキームごとに決まったビルドで動作するようになる。
【2014/06/07 12:37 】 | iPhone | 有り難いご意見(0)
iPhone内の画像リストを表示する・カメラを使用する
使い方は、曲のリスト表示するときと同じ。


曲のときと違って、フレームワークの追加やimportなどは特にする必要がない。
UIKitに含まれているようだ。

【2011/08/18 16:15 】 | iPhone | 有り難いご意見(0) | トラックバック()
サウンドを鳴らす
さて、サウンドを鳴らすにはどうするか。


前の記事で、MPMediaItemCollection 型の変数 mediaItemCollection は持っているので、話は早い。

MPMusicPlayerController *player = [[MPMusicPlayerController alloc] init];
[player setQueueWithItemCollection:mediaItemCollection];
[player play];

でおしまい。
【2011/08/18 03:54 】 | iPhone | 有り難いご意見(0) | トラックバック()
iPhone内の曲のリストを表示する
iPhoneアプリで、自分のiPhoneに入ってる好きな曲をBGMにできたりするものがある。

そういうときに表示される表(UITableViewController)の使い方。

iOS的には、ああいうのを「ピッカー」(picker)と呼ぶらしい。
iPhoneに入っている曲を表示するのは MPMediaPickerControllerView。
iPhoneに入っている画像を表示するのは UIImagePickerControllerView。
どっちも使い方はだいたい同じ。
(というか、書籍とか調べてもMPMediaPickerControllerViewについては全然書いてなくて、
 XCodeからヘルプで名前の類推して"PickerControllerView"で検索してやっと探し当てた。
 使い方は書籍に書いてあったUIImagePickerControllerViewとまったく同じにやってみたらそのままできた)

【2011/08/18 03:04 】 | iPhone | 有り難いご意見(1) | トラックバック()
pngを描画したい人
今までずっとjpgを使って描画してたのだが、
アルファ抜きできないと当然困るわけで、pngを描画してみようと思った。

CoreGraphicsを使ったテクスチャロードは、pngだとなぜかサポート外フォーマットと言われる。
これは自分が普段使っているペイントソフトのせいじゃないかと疑っている。

iPhoneでpng で検索していると、
圧縮フォーマットのPVRを使うのがよさげな記事がいろいろ出てきた。
たとえばここ

pngを作って、iPhoneSDKに入っているtexturetoolというのを使ってコンバートしてできたpvrファイルを使うらしい。
試しにやってみた。この記事のソースを組み込む。
ネット上から拾ってきたpngファイルだとちゃんと表示された。
自分の使ってるペイントソフトだとできない。なぜか白黒に。フォーマットおかしいかんじがすごくする。(もちろんアルファも抜けてない)

違うソフトを探してきてやってみるか。
【2011/08/15 23:41 】 | iPhone | 有り難いご意見(0) | トラックバック()
タッチ点の取得の方法
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;

タッチした点を取得する方法は以下のような感じ。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
{
for (id touch in touches) {
CGPoint p = [touch locationInView:self.view];
}
}

touches にその呼び出し間隔内にタッチされた点全部が入っている。
ここには書いていないが、touches は UITouch 型変数の配列。

UITouchから直接座標を求めることはできなくて、座標系つまりビューかウィンドウを渡すと、そのビュー内座標・ウィンドウ内座標に変換して取得できる。
locationInView メソッドにビューかウィンドウを渡す。
(ウィンドウクラスはビュークラスの子クラス。)

基本的には、上に書いたように、viewControllerクラスのビューを渡せばいい。
ビュー内座標で受け取れる。ビューが画面と一致しているとは限らないので注意が必要だが、画面が回転していてもちゃんとそのときの向きの左上点を原点とした座標で返してくれるから便利。

ウィンドウを渡すか、nilを渡すと、デバイスでの座標で取得することになる。
例えば以下のような感じ。
CGPoint p = [touch locationInView: ((UITouch*)touch).window];
これはデバイスを縦持ちしたときの左上点を原点とした座標系。デバイスを横持ちしても上限反転しても、あくまでデバイスの座標系で返すことになる。だから、横持ちするアプリとか、回転できるアプリだと使いにくい。


【2011/08/10 16:45 】 | iPhone | 有り難いご意見(0) | トラックバック()
<<前ページ | ホーム | 次ページ>>