Hatena::Groupiphone-dev

exisの日記

2009-04-05RGB から UIColor への変換

iPhone Cookbook やネットを参考にして #123456 の RGB値からUIColor を作るのを次のようにやっています。

最初は Wall Calendar で表示しているマイカレンダーの色は Google Calendar の API が返す値を使用していたのですが、API が返す値はブラウザで見える色よりも、かなり濃い色のため結局対応表を作って、ブラウザで見る色と同じにしています。

#import <Foundation/Foundation.h>

@interface UIColor (Hex)
- (UIColor *) initWithHex:(NSString *)hexString alpha:(CGFloat)alpha;
@end

@implementation UIColor (Hex)
- (UIColor *) initWithHex:(NSString *)string alpha:(CGFloat)alpha {
    UIColor *color = nil;
    if (string && [string length] == 7) {
        NSString *colorString = [NSString stringWithFormat:
                                    @"0x%@ 0x%@ 0x%@", 
                                    [string substringWithRange:NSMakeRange(1, 2)],
                                    [string substringWithRange:NSMakeRange(3, 2)],
                                    [string substringWithRange:NSMakeRange(5, 2)]];
        
        unsigned red, green, blue;
        NSScanner *scanner = [NSScanner scannerWithString:colorString];
        if ([scanner scanHexInt:&red] && [scanner scanHexInt:&green] && [scanner scanHexInt:&blue]) {
            color = [[UIColor alloc] initWithRed:(float)red / 0xff
                                           green:(float)green / 0xff
                                            blue:(float)blue / 0xff
                                           alpha:alpha];
        }
    }
    return color;
}

gist にもあげてあります。

http://gist.github.com/89774

2009-04-03Wall Calendar リリース

exis20090403

Wall Calendar という Google Calendar のスケジュールを壁紙にするアプリをリリースしました。

Mac お宝鑑定団で紹介されたのが、かなり嬉しい。

スケジュールを見るために毎回カレンダーを表示するのが手間だったのが解消できたのと

会社で使っている Google Apps に対応出来たのが良かったなと思ってます。

バージョンアップで次の点を修正、追加していく予定です。

  • マイカレンダー以外の共有カレンダーの取得
  • Google Calendar 以外のカレンダーと連携
  • Remenber the milk とかのタスク管理サービスと連携
  • 画質の荒いのを修正

画質の荒いのは手抜きして、UITableView を作って、それをスクリーンショット撮っているからです。

手抜きできる!と思ったのですが、画質が荒いという罠がありました。

まず実用度を上げてから調整していきます。

2009-02-18翻訳

fladdictさんの記事を参考に、DSY Translationsに翻訳を頼んでみました。

英語、ドイツ語フランス語の3つの翻訳をお願いしたところ、元々あった英語の翻訳を参考にしてもらって少し安くなり、

1言語あたり32ユーロ、英語の翻訳が無ければ、1言語あたり35ユーロだそうです。文字数は1500ぐらいでした。

文字数が多いからかもしれませんが、id:ktakayama さんの記事の金額と比べると少し高いようです。

ドイツ語フランス語の質はわかりませんが、英語は知り合いに聞いたら「多分大丈夫」と言っていたので、多分大丈夫なんでしょう。

4営業日というスピードで返ってきていますし、値段も安く、返答してくれた人も丁寧だったので、また依頼しようとは思っています。

ktakayamaktakayama2009/02/18 17:55文字数毎に結構違うんですね
僕は、日本語が800文字くらいでした。

exisexis2009/02/18 18:11やっぱり文字数で金額が決まってる感じですね。
今度ドイツ語とフランス語の訳を調べてみようと思ってます。

2009-02-11Version 1.1 をリリースしました

やっとバージョンアップ出来ました。。。全然作る時間なしでした。

新機能は ipod touch を使っている人のために、ブックマークした商品はオフラインでも見えるようにしてみました。

それとステータスバーみたいなものを付けてみました。例えばブックマーク時に画面下のタブバーの上から、

半透明のバーを出してブックマーク対象を表示、数秒後に隠れるという感じです。

f:id:exis:20090211205829p:image f:id:exis:20090211211829p:image



ステータスバーのサンプルソースをつけておきます。

setProgress することで、プログレスバーも表示するようにしています。

#import "Statusbar.h"

@implementation Statusbar
@synthesize messageBar;
@synthesize indicator;
@synthesize messageLabel;
@synthesize progressbar;

#define STATUSBAR_HEIGHT    44.0
#define TABBAR_HEIGHT       49.0

- (id)initWithFrame:(CGRect)frame {
  if (self = [super initWithFrame:frame]) {
    [self setBackgroundColor:[UIColor clearColor]];
    
    messageBar = [[UIToolbar alloc] init];
    messageBar.barStyle = UIBarStyleBlackTranslucent;
    [messageBar sizeToFit];
    [self addSubview:messageBar];
        
    indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
    [indicator setFrame:CGRectMake(10, (STATUSBAR_HEIGHT-20)/2, 20, 20)];
    [self addSubview:indicator];
        
    messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, (STATUSBAR_HEIGHT-14)/2, 270, 14)];
    [messageLabel setBackgroundColor:[UIColor clearColor]];
    messageLabel.font = [UIFont systemFontOfSize:14.0];
    messageLabel.textColor = [UIColor whiteColor];
    [self addSubview:messageLabel];
        
    progressbar = [[UIProgressView alloc] initWithFrame:CGRectMake(150, (STATUSBAR_HEIGHT-10)/2, 160, 90)];
    progressbar.progressViewStyle = UIProgressViewStyleBar;
    progressbar.hidden = YES;
    [self addSubview:progressbar];
    openY = frame.origin.y - STATUSBAR_HEIGHT;
    closeY = openY + STATUSBAR_HEIGHT;
  }
  return self;
}

- (void)dealloc {
  [messageBar release];
  [indicator release];
  [messageLabel release];
  [progressbar release];
  [super dealloc];
}

- (void)setMessage:(NSString *)message {
  messageLabel.text = message;
}

- (void)setProgress:(float)value {
  progressbar.hidden = NO;
  [progressbar setProgress:value];
  messageLabel.frame = CGRectMake(40, (STATUSBAR_HEIGHT-14)/2, 110, 14);
}

- (void)open {
  CGContextRef context = UIGraphicsGetCurrentContext();
  [UIView beginAnimations:nil context:context];
  [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
  [UIView setAnimationDuration:0.3];
  CGRect rect = [self frame];
  rect.origin.y = openY;
  [self setFrame:rect];
  [UIView commitAnimations];
  [indicator startAnimating];    
}

- (void)close {
  CGContextRef context = UIGraphicsGetCurrentContext();
  [UIView beginAnimations:nil context:context];
  [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
  [UIView setAnimationDuration:0.3];	
  CGRect rect = [self frame];
  rect.origin.y = closeY;
  [self setFrame:rect];
  [UIView commitAnimations];
  [indicator stopAnimating];
  progressbar.hidden = YES;
}

@end

次のように使います。

[statusbar open];
[statusbar setMessage:[NSString stringWithFormat:@"%@... %@", NSLocalizedString(@"Bookmark", nil), title]];
[statusbar close];

2008-12-20Good Choice が公開されました

申請時にリジェクトされたボタンの使い方について

20:50

最初に申請した時に、左の画像の右上にあるようなアイコンを使っていました。

これが Human Interface Guidelineに沿っていないということでリジェクトされたようです。

特に一番右のボタンは Action というもので、押すと Action Sheet で選択を促すような作りにする必要があるようです。(詳しくは iPhone Human Interface Guidelines の Standard Buttons for Use in Toolbars and Navigation Bars を参照してください)

アプリ毎に違った使われ方をするとユーザが混乱するというためですね。

システムで用意されているボタンを使う時はご注意ください。

現在は右の画像のような作りになっています。

f:id:exis:20081220203738p:image f:id:exis:20081220203737p:image



Good Choice が公開されました

20:50

f:id:exis:20081219122601p:image

アイコンの使い方がまずく一度リジェクトされましたが、修正して無事通ったようです。

12/8 に最初に申請しましたので、10日で受理されました。

ただ申請し直したのに画像が少し古いようです。

こちらからダウンロードできます。


お気に入りの機能は各国アマゾンの商品を同じブックマークに入れておけることです。

下の画像だと、amazon.co.uk, amazon.fr, amazon.de, amazon.co.jp の商品が入ってます。

f:id:exis:20081220023259p:image



他には ISBN での検索なんかも出来ます。

普通にタイトルで検索した方が早いので使いませんが、

タイトルで見つからなかった時とかはいいかもしれませんね。

f:id:exis:20081220023445p:image


UI でどうしてもわかりにくいのが検索のカテゴリ選択。

検索フォームの左に付いてる青い検索マークがボタンになってます。

ここをもう少しわかりやすく出来るといいんですが、良い案が思いつかず。

f:id:exis:20081220023817p:image f:id:exis:20081220023818p:image


最初のバージョンで基本的な機能の実装が終わりましたので、

ここから独自の機能を追加していく予定です。