2013年4月26日金曜日

UILocalNotification の soundName でハマる

UILocalNotification には soundName というプロパティがあるのをご存知でしょうか?

実はこのプロパティに音声ファイル名を設定すると通知時の音を変更できるのですが、、、


何度やっても音が再生されない。。。


実はここに設定できる音声ファイルは長さが30秒のものまでなのです。

stackoverflowに書いてありました。
http://stackoverflow.com/questions/6543726/how-do-i-play-an-alarm-sound-for-more-than-30-seconds-like-the-alarm-clock-pro-a

これで、小一時間ハマりました。

とりあえず、GWに持ち込まなかっただけ良かったとします。

ちなみに30秒を超える長さのファイルを設定した場合は、デフォルトの通知音が鳴ります。

UITableViewのセルの下線をシンプルにしたい

UITableViewをグループ表示(UITableViewStyleGrouped)で表示すると、セルになんか変な白いのが表示されます。
実はこれはセルの影という事なのですが、これをシンプルな1ラインにしたい事もあるかと思います。

デフォルトはこの様な表示








テーブルビューに以下の様な設定をすると、すっきりしたラインになります。

[tableView setSeparatorStyle:UITableViewCellSeparatorStyleSingleLine];

この様な感じ。

2013年4月25日木曜日

UISegmentedControl の文字が小さい









この画像を見て、UIControlSegmented内の文字列は大きいと感じますか?小さいと感じますか?
私は小さいと感じますので、デフォルトの文字サイズから変更したいと思います。

ですが、UIControlSegmented には各アイテムの文字サイズを変更するメソッドは用意されていません。
しかし、各アイテムの文字の設定を変更するメソッドは用意されています。


- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state;

(iOS5からですね。)


今回は試しにフォントサイズを16で太字に変更してみましょう。
UISegmentedControl *monthSegmented = [[UISegmentedControl alloc] initWithFrame:CGRectMake(8, 4, 304, 32)];
[monthSegmented setTitleTextAttributes:@{ UITextAttributeFont:[UIFont boldSystemFontOfSize:16],   } forState:UIControlStateNormal];









見やすくはなったのでは無いでしょうか?

どの様な項目が変更できるかは UIStringDrawing.h に記述されています。

UIKIT_EXTERN NSString *const UITextAttributeFont;             // フォント
UIKIT_EXTERN NSString *const UITextAttributeTextColor;        // 文字色
UIKIT_EXTERN NSString *const UITextAttributeTextShadowColor;  // 文字影色
UIKIT_EXTERN NSString *const UITextAttributeTextShadowOffset; // 文字影幅
一通りはいじれるようですね。

2013年4月23日火曜日

CoreDataのSQL実行ログをXCodeのログビューに吐き出す

アプリの実行中にSQLのログを吐き出させたい時があると思います。

設定方法は以下のような手順

1.Xcodeの左上のアプリ名のところをクリックして「Edit Scheme...」をします。

2.「Run アプリ名」の「Arguments」タブ。
「Arguments Passed On Launch」の箇所に「-com.apple.CoreData.SQLDebug 1」と入力します。
3.表示されます。


2013年4月22日月曜日

UIImageVIewで画像を貼付けると歪む

皆さん画像をviewに貼付ける時は、以下のようなコードを利用すると思います。

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 240)];
[imageView setImage: [UIImage imageNamed:@"hoge.png"]];
[[self view] addSubview:imageView];

ただ、この方法でうまく行くのは画像サイズが320x240の時だけで、その他のサイズの場合は、勝手に伸び縮みしてしまいます。

「ちょっと見苦しい」だけですめばいいのですが、人間の画像の場合は後から何を言われるかわからないのでヒヤヒヤものです。

そんな場合は1行コードを足してあげましょう。
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 240)];
[imageView setContentMode:UIViewContentModeScaleAspectFit]; // ここを追加
[imageView setImage: [UIImage imageNamed:@"hoge.png"]];
[[self view] addSubview:imageView];

ContentMode プロパティに UIViewContentModeScaleAspectFit を設定するだけで、勝手にアスペクト比を保った拡大縮小をしてくれます。


※この手法は、webなどから画像を引用してきた際などの画像サイズが一定では無い場合に有用です。最初から画像のサイズがわかっている場合は、面倒臭がらず画像修正ソフトでリサイズする事をオススメします。

2013年4月9日火曜日

【朗報】AppleDeveloperで一度登録したAppIDが消せるようになりました。

前々より、AppleDeveloperで登録したAppIDが削除できないという事で、テスト的に登録したAppIDが目障りで仕方なかったそこのあなた!朗報です。消せるようになりました。

https://developer.apple.com/membercenter/index.action

消せるAppIDの条件は「AppStoreで公開しているアプリで利用していない事」だと思いますので、
出来心で登録してしまったIDは消せる模様です。

削除の仕方は以下の通り。

  1. AppleDeveloper MemberCenter にログイン
  2. Certificates, Identifiers & Profiles にアクセス
  3. Identifiers にアクセス
  4. App IDs にアクセス
  5. 消したいAppID の行を選択
  6. Settings ボタンを押下
  7. 下の方に Delete ボタンが配置されています
簡単!



さきほどAppleから、「See what's new in Member Center.」とメールが来て気づいたので、今日(2013/04/09)からだと思います。

操作画面のスクショがあれば分かりやすいのでしこしことブログに貼り付ける準備をしていたのですが、
「あれ、これってログイン後の画面だから勝手にアップするのは危険だな。。。」って思ってやめました(^^;)

2013年4月2日火曜日

nend広告で"IE430: Ad is out of stock. info"エラーがでて広告が表示されない。

nend広告で、以下の様なエラーが出る場合があります。

[nendSDK Error] IE430: Ad is out of stock. info[statuscode=501].

これは、広告切れの場合に表示されるエラーだそうなのですが、複数のiPhoneで試しても1台だけこのエラーが吐き出され、広告が表示されないという場合がありました。

私の場合は、その対象のiPhoneを英語モードにしていた事が原因でした。

nend広告は日本の業者ですし、英語広告のストックがそうそう無い事にはうなずけます。
(これは、私の場合の解決策ですので、英語広告のストック切れというのは仮説です。)

iOS6のUITableViewで背景色が変わらない

iOS5でUITableViewの背景処理を変更する場合、以下の様なコードで背景色を変更します。

[[self tableView] setBackgroundColor:[UIColor redColor]];


ですが、このコードではiOS6の背景色は変わりません。
以下の様にする必要があります。

[[self tableView] setBackgroundView:nil];
[[self tableView] setBackgroundColor:[UIColor redColor]];

一旦、背景ビューを nil にしてしまわないと、背景ビューの方が優先されてしまい、背景色の変更が表示されません。
おそらく、背景色を設定しているビューの上に、背景ビューを載せているのでしょう。

色変更をしたい場合ですから、ビューの方を nil にしても問題ありません。
iOS5でも特別エラーやワーニングも出ません。