Hatena::Groupiphone-dev

exisの日記

 | 

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];
 |