2012年3月9日金曜日

iPhone開発で使えそうなベクターアイコン

以下のサイトで、photoshopのシェイプ形式で様々なアイコンが公開されています。

Shapes4FREE

ライセンスが「個人利用、商用利用可」などかなり緩めに設定されています。
ありがたし。重宝しそうです。


xcode4でのローカライズ

xcode4.2でのローカライズ方法をまとめてみます。

文字列のローカライズ


これはもっと良い方法があるような気がするのですが(ソースコードを解析するツールがあるみたい)、私は以下の方法でやっています。
  1. プロジェクトのツリーを右クリックし、[New File]を選択する
  2. [Other]の[Empty]で、Localizable.stringsという名前のファイルを作成する

  3. 作成したファイルを選択し、右側のファイルインスペクターを表示する
  4. Localizationの+を押すと、Englishが追加される
  5. もう一回+を押し、Japaneseを追加する

  6. これでen.lprojフォルダとja.lprojフォルダにLocalizable.stringsが作成されます。

  7. [Open as] → [Property List]でLocalizable.stringsを開きます。適当に何か書き込んでおかないと開けないみたいです。
  8. あとは、Keyにキーワードを、Valueに文字列を追加していきます。

ローカライズ文字列をプログラム内で参照するには以下のようにします。
NSString *string = NSLocalizedString(@"keyword", @"説明");
第1引数にキーワードを入れます。


アプリケーション名のローカライズ


上で、Localizable.stringsのLocalizationでEnglishとJapaneseを追加したのと同じ手順で、InfoPlist.stringsをローカライズします。
あとは、CFBundleDisplayNameというキー名でアプリケーション名を設定します。



画像のローカライズ


上で、Localizable.stringsのLocalizationでEnglishとJapaneseを追加したのと同じ手順で画像をローカライズします。


ちなみに、ファイルをローカライズすると、Englishのリソースはen.lprojディレクトリに、Japaneseのリソースはja.lprojディレクトリに、自動で振り分けられます。


2012年3月7日水曜日

iPhoneでバイブレーション

iPhoneでバイブレーションを鳴らす方法は、効果音を鳴らす方法と同じです。

まずは、AudioToolBox.frameworkをリンクする必要があります。

プロジェクト設定から[Build Phases]を選択し、[Link Binary With Libraries]のプラスボタンを押し、AudioToolBox.frameworkを追加します。


あとは、ヘッダをimportした上で、
#import <AudioToolbox/AudioServices.h>
AudioServicesPlaySystemSoundを呼ぶだけです。
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
kSystemSoundID_VibrateがバイブレーションのサウンドIDです。

iOS5で明朝を表示する

開発側の話です。
iOS5で明朝フォントを使って文字を描画するには、drawRect:中で
[nsstring drawAtPoint:CGPointMake(left, top) withFont:[UIFontfontWithName:@"HiraMinProN-W3"size:fontSize]];
とやります。

でもなんかsizeWithFontしたときの高さがおかしいです・・・。

ちなみに、全フォントのファミリー名を表示するには以下のようにします。
NSArray *families = [UIFont familyNames];
id aFamily;
for (aFamily in families) {
    NSLog(@"\nfamilyName=%@\n  fontname=%@", aFamily, [UIFont fontNamesForFamilyName:aFamily]);
}

再開

「日誌」といいつつ2年近く間が空くとかありがちすぎて・・・
熱が出て苦しい今、これを機会に再開したいと思います。
ここ最近やったことをつらつら書いていきます。
m(_ _)m

2010年9月2日木曜日

クラスの調査

objective-cで、あるオブジェクトがどのクラスに属しているかを調べる方法です。


こんな感じのようです。
- (void)method:(id)object
{
    // objectがNSStringクラスかどうかを確認
    if ([object isKindOfClass:[NSString class]]) {
      // NSStringクラスの場合
      ...
    }

編集が終わったらキーボードを閉じる

iPhoneのソフトウェアキーボードを閉じる方法です。

UITextFieldにフォーカスが当たるとソフトウェアキーボードが出てきます。
キーボードの改行ボタンを押すと、UITextFieldにUIControlEventEditingDidEndOnExitイベントが飛んできますので、それを捕まえてUITextFieldからフォーカスを外してあげます。
フォーカスが外れるとキーボードが閉じ、めでたしめでたし。

コードはこんな感じです。resignFirstResponderメソッドを呼ぶことでUITextFieldからフォーカスを外してます。

- (void)viewDidLoad {
    UITextField *textField = [[[UITextField alloc]
                               initWithFrame:CGRectMake(10, 10, 200, 31)]
                              autorelease];
    textField.borderStyle = UITextBorderStyleRoundedRect;
    [textField addTarget:self
                  action:@selector(editingDidEnd:)
        forControlEvents:UIControlEventEditingDidEndOnExit];
    [self.view addSubview:textField];
}

- (void)editingDidEnd:(id)sender {
    UITextField *textField = (UITextField *)sender;
    [textField resignFirstResponder];
}

Interface Builderで同じ事を行う場合は、UITextFieldの「Did End on Exit」というイベントにアクションを設定してあげます。