NSAttributedStringを使ってみる

NSAttributedStringを使うと文字列を装飾して描画することができます。

使いたい属性をNSDictionaryに設定して、NSAttributedStringのインスタンスを生成することで属性付きの文字列を使うことができます。

後から属性を追加したり変更する場合は、NSMutableAttributedStringの方を使います。

 

NSAttributedString UIKit Additions Referenceを見るとiPhoneで使える属性として以下のようなものがあるようです。

 

iPhoneで利用できるフォントを調べる(その2)

前回の記事で作成したフォントの一覧をHTMLに出力してみました。 出力サンプルは画像で出力しています。次のようにして画像(UIImage)に出力しました。

- (UIImage *)makeImageWithFont:(UIFont *)font
{
    static NSString *text = @"ABC abc 123 あいう カキク 漢字";
    CGSize size = [text sizeWithFont:font];
    
    UIGraphicsBeginImageContext(size);
    [text drawAtPoint:CGPointZero
             withFont:font];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}
出力に必要な画像のサイズを取得して、グラフィックコンテクストに設定し文字列を出力しています。

iPhoneで利用できるフォントを調べる

iPhoneを使ってワープロ文書やHTMLをごりごり書くなどという使い方は普段ほとんどしないためあまり意識しないのですが、iPhoneには実は標準で多くのフォントが内蔵されています。

当然、自分で作成するアプリでもそれらのフォントを利用することが出来ます。これまで作ったアプリではあまり積極的にフォントを変えるということはせず、デフォルトのフォントをそのまま使うことが多かったのですが、たまには変えてみようかなと思い、どんなフォントが使えるのか調べてみることにしました。

 

アプリを作る時には各コントロールで使用するフォントをXcode上で設定することができます。

fontSelect.png

しかし、フォント名は分っても、実際にどのように表示されるのか設定してみるまで分りません。これは少し面倒なので、フォント一覧を表示する簡単なアプリを作ってみることにしました。

 

ShapeClipperをリリースしました。

写真をいろいろな形に切り取るアプリ、ShapeClipperをリリースしました。

Clipperシリーズの第三弾です。

というか、実は最初はこの名前ではなくClipperもつかない全く別の名前を考えていたのですが、いざ申請という段になって、その名前は既に使用されているとのことで使うことができず、あえなくこの名前に落ち着きました。ちなみにその名前でiPhoneアプリを検索してみても出てこないのですが、Mac用のアプリとして見つかりました。アプリ名はMac版も含めて重複できないようになっているのでしょうか。

 

それと、お気づきの方もいるかもしれませんが、ShapeClipperは、このアプリの前に出したIconClipperというアプリと操作や画面構成がとても良く似ています。実際、多くの部分をIconClipperから流用して作成しました。そのため実質的な制作期間も2週間程という割と短い期間で完成できたのですが、その半分近くを、切り取り用の型の作成に費やしています。

 

次のアプリを申請しました。

本日、次のアプリを申請しました。

 

写真をいろいろな形に切り取ることができるアプリです。

画面はこんな感じです。

ss1.png  ss2.png

 

最近はAppleの審査期間が以前より短くなっている印象なので、うまくいけば来週の中頃にはリリース出来るかと思います。今度はリジェクトされなければいいんですが...

IconClipperをリリースしました。

IconClipperは写真をくり抜いてiPhoneのアイコン風に装飾するアプリです。

range_select.png

実はこのアプリ、先週リリースの予定だったのですがリジェクトされてしまいました。リジェクトの通知が届いた時、もしかしてiPhoneのアイコン風な加工はまずかった?と一瞬思ったのですが、原因はアプリが起動しないとのことでした。理由についてはホッとしたものの、こちらで試してみてもクラッシュの現象が再現できなかったので、特に原因究明もせず再提出して今日のリリースとなった次第です。もしかすると、最初に提出した後、iPadへの対応やら全体の調整等をしたので、その時にバグも直ってしまったのかもしれません。

 

Obj-Cの可変配列を簡潔に記述

Xcode4.4(?)からObjective-Cで配列や連想配列の初期化にリテラル記法が使えるようになっています。

文字列については、もともと NSString *s = @"ABC"; といった簡潔な書き方ができていたのですが、同じような記法が、NSArrayやNSDictionary、NSNumberについても出来るようになっています。

 

以前はNSArrayのインスタンス生成を次のように書いていました。


NSArray *a = [[NSArray alloc] initWithObjects:@"A", @"B", @"C", nil];

それが、次のように簡潔に書けるようになっています。(もちろん今までの書き方も出来ます)


NSArray *a = @[@"A", @"B", @"C"];

NSDictionaryは次のように書けます。


NSDictionary *d = @{@"Name":@"Yamada", @"Job":@"Programmer"};

NSNumberは次のように書けます。

バッチリサイズのv1.2.1をリリースしました。

ピンチイン/アウト操作でのサムネイルの表示サイズの変更と、JPEG品質の設定オプションを追加しました。

 

写真の選択画面で、二本指で広げたり狭めたりすると、サムネイルのサイズを3段階で変更できます。

pinch.png

ただ、操作する時にちょっとでも画面がスクロールしてしまうと、スクロールの方が優先されてしまい、うまく拡大、縮小できません。

操作にちょっとコツが要ります。あまり力を入れずにサムネイルの部分をそっとなでるように操作するとうまくいくと思います。

操作した後の大きさは設定値として保存されるので、次回起動時にはその大きさで表示されます。字が小さくて見づらい場合などは大きなサイズで使って頂ければと思います。

 

GoogleMap V2の終了日延期

以前の記事で、GoogleMap API V2が2013年5月19日で終了しますよと書きましたが、その終了日が2013年11月19日まで延期されたようです。

 

https://developers.google.com/maps/documentation/javascript/v2/?hl=ja

 

しかも、現行のAPI V3にV2へのある程度の下位互換性ももたせるとのことです。

間際になっての延期&下位互換性サポートの告知ですが、よっぼど移行が進んでなかったのでしょうか。

ちょうど、こちらでも移行の作業をやってた時だったので、微妙なタイミングです。ん~もう少し早めに発表されてれば...

まぁ、いずれにしても移行しとくにこしたことはないので、作業自体は無駄ではないと思うのですが。

iPhoneアプリの国際化

アプリをつくる時には国際化のことも考えないといけません。

App Store は、150 を超える国で利用され、40 を超える言語をサポートしているとのことですが、これら全ての言語をサポートするのは無理としても、日本語の他にせめて、英語ぐらいはサポートしておきたいところです。

 

最初からiPhoneアプリを国際化するつもりでいる場合は、通常、アプリで使用するメッセージ類は全て英語で書いておいて、後からそれらに対応する翻訳用のファイルを用意することで対応します。C言語等で利用するgettextとpoファイルの関係に似ています。

デフォルトの言語を英語にしておけば 、翻訳していない言語でアプリが使用される場合は英語で表示されることになります。

 

国際化する場合は、まずXCodeのプロジェクトの設定で、ターゲットの言語を追加します。

ss1.png

プロジェクトで使用中のストーリーボードや文字列リソースの一覧が表示されるので、翻訳するファイルを選びます。