バッジ描画ライブラリを公開

2011年9月29日木曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

バッジ描画ライブラリを GitHub にて公開しました。

lakesoft/LKbadgeView - GitHub

バッジって何かというとメールの未読件数などで使われているアレ。

数字だけでなく文字列も表示できる。また背景色や文字色を変えたり、アウトライン(輪郭線)を付けられるようにした。


インストール


GitHubからプロジェクトをダウンロードし、その中から下記のファイルを自分のプロジェクトへコピーして追加する。
LKBadgeView.m
LKBadgeView.h


使い方


UIView のサブクラスなので生成してビューへ貼り付けるだけで使える。
(コード例)
LKBadgeView* badgeView =
    [[[LKBadgeView alloc] initWithFrame:CGRectMake(100, 200, 50, 20)] autorelease];
[self.view addSubview:badgeView];
badgeView.text = @"23";
XIB に配置してそれを使ってもいい。サンプルアプリではこの方法を使っている。
@property (nonatomic, retain) IBOutlet LKBadgeView* badgeView;
 :
self.badgeView.text = @"23";
この場合はインスペクタのクラス指定を LKBadgeView にすることを忘れずに。


カスタマイズ


色の変更の他、アウトラインの描画や水平位置の調整などが行える。

水平位置

LKBadgeView のビューとしての大きさとは別に角丸のバッジがその中に配置される。この時の水平位置を指定することができる。
@property (nonatomic, assign) LKBadgeViewHorizontalAlignment horizontalAlignment;
左寄せ、中央揃え、右寄せの3種類を指定することができる。デフォルトは中央揃え(LKBadgeViewHorizontalAlignmentCenter)。


 ※上の図の灰色の背景色は説明の都合上、意図的に付けてある。

最小サイズ

横幅の最小サイズは2種類設定することができる。
@property (nonatomic, assign) LKBadgeViewWidthMode widthMode;

・LKBadgeViewWidthModeSmall にした場合は1文字だと丸になる。
・LKBadgeViewWidthModeStandard の場合は2文字までは同じ横幅となる。3文字以上はそれより拡がる。

デフォルトは LKBadgeViewWidthModeStandard。

文字色とバッジの背景色を指定できる(デフォルトでは文字色=白、背景色=灰色)。
@property (nonatomic, retain) UIColor* textColor;
@property (nonatomic, retain) UIColor* badgeColor;

アウトライン

バッジの周りに輪郭線を描くことができる。こんな感じ。

アウトラインを描くには outline プロパティを YESにする。NOだと描画しない。色と線の太さを指定することができる(デフォルトは色=灰色、太さ=2.0)。
@property (nonatomic, retain) UIColor* outlineColor;
@property (nonatomic, assign) CGFloat outlineWidth;
@property (nonatomic, assign) BOOL outline;
もちろんバッジの背景色と組み合わせることもできる。


その他


切り捨て表示

ビューのサイズに対して文字数が多い場合は切り捨て表示( ...表示)になる。

※上の図の灰色の背景色は説明の都合上、意図的に付けてある。

バッジの高さ

バッジの高さは 20ピクセル固定で変更はできない。この値は定数として参照出来る他、実行時に取得できるようクラスメソッドを用意してある。
#define LK_BADGE_VIEW_STANDARD_HEIGHT       20.0
 :
+ (CGFloat)badgeHeight;
LKBadgeView の高さはこの値と同じか大きくする必要がある。大きい場合の縦位置は縦中寄せとなる。通常ビュー自体の高さはこの値と同じにしておくと良い。

サンプル


付属のサンプルを実行するとカスタマイズされた表示をひと通り確認できる。

右上のスイッチをONにするとアウトライン描画に切り替わる。



ソース解説


バッジの表示は UIBezierPath を使って drawRect: で描画している。文字は UILabel を使わず直接描画した。詳細はソースコードを参照のこと。


ライセンス


MIT ライセンスです。商用・非商用を問わず自由にご利用下さい。連絡も不要です(でもくれるとうれしい)。


LLVM GCC 4.2 Error - Internal compiler error: Bus error: 10

2011年9月5日月曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

Xcode 4.1にてコンパイル時にエラーが出た(GCC 4.2)。

シミュレータでこのエラーはでなくて、実機(3GS/iOS4.3.3) で実行すべくコンパイルをかけた時にエラーが出た。 元々は(確か)4.0で開発していたプロジェクトでコンパイル前に Modernize した(Xcodeプロジェクトのマイグレーション)。

エラーは .m ファイルの最後に出ていて最初は問題箇所もわからなかった。仕方が無いのでいくつかあるメソッド内のコードをコメントアウトしてエラーが消えるかどうかを一つ一つ確認して問題箇所を特定した。
self.status = kMLLicenseKeyValid;
status は assign プロパティで整数値を取る。 結局コードを次のように書きなおしたら治った。
[self setStatus:kMLLicenseKeyValid];
もしくは
status_ = kMLLicenseKeyValid;

調べると stackoverflow で同様の問題がいくつか見つかった。
iphone - Xcode Bus Error When Compiling - Stack Overflow
objective c - Internal compiler error: Bus error - Stack Overflow
iphone - internal compiler error: Bus error - Stack Overflow
ios4 - Internal compiler error: Bus error with LLVM GCC 4.2 compiler - Stack Overflow
原因はよくわからないようだ。
- - - - -
今回はオチはありません(わかる人いたら是非情報をコメントへ書きこんで下さい)。

人気の投稿(過去 30日間)