[iOS]下からニョキッと表示されるDatePickerの実装(Part2)

前回DatePickerが画面の下半分だけキーボードみたいにせり上がるタイプのサンプルをご紹介しましたが、アニメーションの方法としてiOS4.0以降の「UIView#animateWithDuration」を使用したが方が簡潔に書けるため、サンプルに追記しました。

「UIView#animateWithDuration」を使用すると下記コードのようにシンプルに書くことができます。ポイントは^(caret)から始まるBlocksというiOS4.0からの新しい構文を利用している点です。Blocksについては別途またエントリで紹介できたらと思います。正直まだ不勉強な点が多いので。。

-(void)showUpDatePickerWithBlocks
{
    self.pickerView.date = [self.dateFormatter dateFromString:self.labelDate.text];
    
	if (self.pickerView.superview == nil)
	{
    	[self.view.window addSubview: self.pickerView];
        
        CGRect screenRect = [[UIScreen mainScreen] applicationFrame];
        CGSize pickerSize = [self.pickerView sizeThatFits:CGSizeZero];
        CGRect startRect = CGRectMake(0.0,
                                      screenRect.origin.y + screenRect.size.height,
                                      pickerSize.width, pickerSize.height);
        self.pickerView.frame = startRect;
		
		CGRect pickerRect = CGRectMake(0.0,
									   screenRect.origin.y + screenRect.size.height - pickerSize.height,
									   pickerSize.width,
									   pickerSize.height);
        
        [UIView animateWithDuration:0.3
						 animations:^{
                             self.pickerView.frame = pickerRect;
                             
                             CGRect newFrame = self.view.frame;
                             newFrame.size.height -= self.pickerView.frame.size.height;
                             
                             self.view.frame = newFrame;
                             
                             [buttonShowWithBlocks setTitle:@"showDownDatePickerWithBlocks" forState:UIControlStateNormal];
                         }];
        
    }else{
        
        [self showDownDatePickerWithBlocks];
    }
    
}

また全ソースコードはgithubより取得してください。

harusou-apps/DatePickerShowAnimatedSample

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>