2011年1月31日月曜日

2011/01/30 [Sun] Office L on Twitter

Powered by twtr2src.

UISlider をコードで描画してつまみ部分の当たり領域を大きくする

  sld = [[[UISlider alloc] initWithFrame:CGRectMake(0, 0, 200, 40)] autorelease];
  sld.minimumValue = 0.0;  // 最小値
  sld.maximumValue = 1.0;  // 最大値
  sld.value = 0.5;         // 初期値を250に設定
  [sld addTarget:self action:@selector(onChangeSlider:)
      forControlEvents:UIControlEventValueChanged];
  [self.view addSubview:sld];

IBを使ってスライダーを作ると、つまみの画像をセットしても、サイズは変わらないみたい。そしてIBからUISliderの高さは変更できない?(グレーになっていて変更できないし、ビューに配置したオブジェクトの高さを変える事もできない)

なので、コードでスライダーを描画して、高さをしてあげて、当たり領域を大きくすることにした。このままだとデフォルトのパーツで描画されるので、わかりにくいが、40x40のつまみ画像を用意して、

  [sld setThumbImage:thumb1 forState:UIControlStateNormal ];

などすれば、当たり領域が大きくなっているのがわかる。

iPhoneの標準UIはよくできてると思うけど、少し小さくて操作しにくいと思う人もいるので(だからこうしてるんだけど)、高さ等々もうちょっとフレキシブルに変更できるようになってるといいのになぁ。

2011年1月30日日曜日

2011/01/29 [Sat] Office L on Twitter

Powered by twtr2src.

マルチタスク非対応にする

ホームボタンでアプリケーションを停止し、すぐに復帰した場合などに、停止前の状況からの続きになる場合があるが、最初からやり直して欲しい場合がある。

その場合は、アプリケーションの Info.plist にキーを追加し、"Application does not run in background"を選択する。チェックマークにチェックをつけてビルドすることで、マルチタスク非対応になり、再起動時に常に最初から処理されるようになる。

今作成しているアプリは、一時停止からの復旧は必要ないので設定した。具体的には、処理実行中に停止したあと、再起動すると、それまでの経過の一部が反映されてしまうのを避けるため、停止からの復帰は常に最初からやり直してもらうことにした。

ホーム画面のアプリ名を決める

xcodeでアプリケーションの Info.plist の Bundle display name の値を設定する。デフォルトは ${PRODUCT_NAME} で、プロジェクト名が使われる。文字数が長いとホーム画面で省略されてしまうので、英数字半角小文字なら12文字前後、英字大文字だと10文字前後、全角文字で6文字前後までにする必要がある。

xcode中のグループとファイルの項目の並べ替え

xcode の左ペインにある、グループとファイルの、グループ内のファイルは、追加の仕方で並び順が変わったり、手動で並べ替えることができる。が、時にはそれが邪魔くさい。

並び替えの方法はないものかと探した結果、グループを選択した状態で、編集メニューの並び替えで名前順か種類順にソートできた。右クリックで出てきてくれればわかりやすいのだけど。

2011年1月29日土曜日

旧バージョンと新バージョンの両方で動作するビルド設定

iOS 4.0 と iPhone OS 3.x の両方で動作するアプリケーションをビルドする設定に書いてあるとおりでできた。

xcodeでターゲット内のアプリケーションを選択して右クリック、情報を見る、から、ビルドタブ。
構成を”すべての構成”にしてから、ベース SDK を "Latest iOS(currently set to iOS X.X)"にする。
iPhone OS Deployment Target をサポートする OS の最も低いバージョンにする。

今作っているアプリの動作バージョンを聞かれて、どう作るのかわかってなかったのでよかった。今現在は3.2で動作するメソッド類しか使っていないつもりなので問題ないはずだけど、そのうち3.2もサポート外にするのかな。。。

背景いろいろ

// 灰色
self.view.backgroundColor = [UIColor lightTextColor];
// 黒
self.view.backgroundColor = [UIColor darkTextColor];
// テーブルビューの背景     
self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
// フィリップサイドビューの背景
self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor];
// スクロールビューの背景
self.view.backgroundColor = [UIColor scrollViewTexturedBackgroundColor];

定義済みの背景のテスト。ちなみに、navigationController に viewController を add してある。

NSLog のフォーマットあれこれ

NSLog(@"log: %@ ", myString);
NSLog(@"log: %f ", myFloat);
NSLog(@"log: %i ", myInt);

NSLog(@"int : %10d",123);   // 整えて出力
NSLog(@"int : %10d",-123);  // マイナス表示
NSLog(@"int : %+10d",123);  // プラス表示は%の後に
NSLog(@"int : %+10d",-123); // マイナス値ならちゃんとマイナスになる
NSLog(@"int : %010d",123);  // 0で埋める
NSLog(@"int : %-10d",123);  // マイナス表示、、ではなくて左詰め
NSLog(@"int : %-10d",-123); // 左詰めしてマイナスの値

NSLog(@"float : %.2f",123.01f); // 小数点

NSLog() のフォーマットメモ。printf フォーマットとほぼ同じ。文字列が@なのでそこは注意。%sはだめ。

一覧表はiOS Reference Libraryにある。

追記:辞書も%@で出力できるので、NSUserDefaults の中身を表示するのも %@ でOK

アプリケーションアイコンの右肩に数字をつける

  application.applicationIconBadgeNumber = 7;

ホーム画面のメールやカレンダーアプリのアイコンの右肩につく数字のあれ(バッジ)。
0 をセットすると非表示。

application は UIApplication* application = [UIApplication sharedApplication];でもOK

アラートビューとデリゲート

UIAlertView *alert = [[UIAlertView alloc]
        initWithTitle:@"タイトル"
              message:@"アラートメッセージ"
             delegate:self
    cancelButtonTitle:@"あか"
    otherButtonTitles:@"あお",@"きいろ",@"みどり",nil];
[alert show];
[alert release];

アラートビューを表示する。alloc の後、init だけして処理を個別にするのも可。

ちなみに、otherButtonTitles は s で複数形なので配列を受け取るから最後にnilが必要。

-(void)alertView:(UIAlertView*)alertView
 clickedButtonAtIndex:(NSInteger)buttonIndex {
  
  switch (buttonIndex) {
    case 0:
      self.view.backgroundColor = [UIColor redColor];
      break;
    case 1:
      self.view.backgroundColor = [UIColor blueColor];
      break;
    case 2:
      self.view.backgroundColor = [UIColor yellowColor];
      break;
    case 3:
      self.view.backgroundColor = [UIColor greenColor];
      break;
  }

アラートビューのボタンが押された時の処理。ボタンに追加した順にインデックスされている? cancelButtonIndex プロパティでキャンセルボタンの順番は変更できる。

ステータスバーの透明化、フルスクリーン

    // ステータスバーを透明にして
  [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackTranslucent;
    // ナビゲーションバーも透明にして
  self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
    // フルスクリーンにするとナビゲーションバーとステータスバーの下まで表示領域になる
  self.wantsFullScreenLayout = YES;

ステータスバーを黒の半透明にして、その下までビュー領域にする。写真アプリケーションのカメラロールのアレ。

ステータスバーのネットワークインジケーター

UIApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = YES;

ネットワークを使用中のくるくるまわってるあれ。終了したらもちろん NO にしてあげること。

2011年1月27日木曜日

2011/01/26 [Wed] Office L on Twitter

  • 03:08  最近またブログとかさぼってるというか google buzz があるからまあいいか、的な流れだったので、buzz に垂れ流した分をブログに転載してみた。後で検索かけたりするにはブログのほうが便利っぽいし。
  • 02:52  [OfficeL.jp] 自動的にロックしないようにする http://bit.ly/dL7pcV
Powered by twtr2src.

2011年1月26日水曜日

自動的にロックしないようにする

[UIApplication sharedApplication].idleTimerDisabled = YES;

こうすると、アプリ実行中は設定によらず自動スリープしなくなるらしい。電池が少なくなってきた時とかどうなるのかはまだ試していない。

アプリ終了時には NO をセットして、元に戻しておくのが作法らしい。戻してない場合にどうなっちゃうかは試していない。

デバイス名を取得

[[UIDevice currentDevice] name]

シミュレータだと iPhone Simulator と返って来る。

Blogger のラベル管理

Blogger のラベル管理はいまひとつですね。もう少し gmail 並みの使い方ができるといいと思うのですが。

Blogger › ヘルプ記事 › 公開およびアーカイブ › ラベル にあるように、ラベル自体の変更はできないみたい。一度消して新しいの作れってことらしい。gmail ならラベル書き換えたら全部ちゃんと変わってくれるのに。。。

ステータスバーを非表示にする

[[UIApplication sharedApplication] setStatusBarHidden:YES];

ステータスバーを隠す。

きちんと検証できてないけど、windows に 最初のviewがaddされる前に実行しないとダメ?

具体的にはAppDelegate の- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions; の中で、windows alloc した直後までではちゃんと消えるけど、ViewController を addSubview した後に実行すると、ステータスバーそのものは非表示になるようだけど、フルスクリーンは使えない。(ステータスバーが見えなくなっただけにみえる)

シリアル番号を取得

NSLog(@"uniqueIdentifier: %@", [[UIDevice currentDevice] uniqueIdentifier]);

シリアル番号が返る。UDIDとは別?。シミュレータと実機では番号体系が違う。

システムのバージョン

NSLog(@"systemVersion : %@", [[UIDevice currentDevice] systemVersion]);

4.2 などのバージョンが返る。

2011年1月6日木曜日

Project Hosting on Google Code と Google Group を接続

タイトルのとおりなだけですけれどもw

別のアカウントで管理していた、Office L Project Hosting on Google Codeと、その管理グループのOffice L Discussを、このアカウントでも管理できるようにしてみました。

やり方は簡単で、どちらも管理画面からメールアドレスで招待をかけるだけです。ホスティングのほうは、メールアドレスを入れるだけで通ってしまい、??な感じでしたが、グループのほうは、招待メッセージが短いと、短すぎますというエラーになるのと、メールが届いてから、自身で参加しないと参加したことにならないのが違いました。

ホスティングのほうは、最初から管理者(オーナー)とコミッターとコントリビューターが別々なので、どこにメールを入れるかだけで権限が決まります。グループのほうは、デフォルトで制限付(管理対象)ユーザとして扱われ、管理者アカウントで別途許可を与えないと権限が変更されません。

最近のgoogleのサービスは、手が回りきってないというか、マネタイズされにくいところはどうでもいいと思っているっていうか、グループもコードもちょっとほったらかしサービスになっているようですが、もっと工夫すればいくらでも伸びると思うのになぁと思うと、いろいろ残念な気がします。いつかwaveみたいになくなっちゃわないといいんですけれども。。。

2011年1月3日月曜日

2011/01/02 [Sun] Office L on Twitter

  • 16:24  [OfficeL.jp] 2011/01/01 [Sat] Office L on Twitter http://bit.ly/ev6LcW
  • 10:17  おはようございます。Twtr2srcは昨日、来ない来ない言った後にこっそり来ました。今日の分はまだ来ていません。
Powered by twtr2src.

2011年1月2日日曜日

2011/01/01 [Sat] Office L on Twitter

  • 09:13  Twtr2srcのメールが来ないのは仕方ないにしても、Twitter Feedまでフィードを拾わないのはなんでだろう。。。?ちょうど九時間ずれてる気がするんだけど、タイムゾーンの問題?
  • 09:04  [OfficeL.jp] 2010/12/31 [Fri] Office L on Twitter http://bit.ly/g43nt7
  • 02:11  やっぱりTwtr2srcからメール来ない。。。?
  • 02:10  あけましておめでとうございます。本年もどうぞよろしくお願いします。
Powered by twtr2src.

2011年1月1日土曜日

2010/12/31 [Fri] Office L on Twitter

  • 18:15  お、今年もあと6時間足らずか。。。皆様よいお年をお迎えください。
  • 12:54  Bloggerは投稿時間を過去に設定してもちゃんと入るっぽいので並べて出せるのいいな。
  • 12:51  Twtr2srcからメール来ないっぽいんだけど。。。
  • 03:16  [OfficeL.jp] twtr2src で投稿を記録 http://bit.ly/fP5w0L
Powered by twtr2src.