0

アニメーション前のすべてのコード:

int height = 255;

//create new view
self.NewView = [[UIView alloc] initWithFrame:CGRectMake(0, 200, 320, height)];
self.NewView.backgroundColor = [UIColor colorWithWhite:1 alpha:1];

//add toolbar
UIToolbar * toolbar = [[UIToolbar alloc] initWithFrame: CGRectMake(0, 0, 320, 45)];
toolbar.barStyle = UIBarStyleBlack;

//add buttons
UIBarButtonItem *infoButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:nil action:@selector(dismissCustom:)];

UIBarButtonItem *flexible = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:nil action:@selector(cancelView:)];

toolbar.items = [NSArray arrayWithObjects:cancelButton, flexible, infoButtonItem, nil];
//add date picker
self.datePicker = [[UIDatePicker alloc] init];
self.datePicker.datePickerMode = UIDatePickerModeDateAndTime ;
self.datePicker.hidden = NO;
self.datePicker.date = [NSDate date];
self.datePicker.frame = CGRectMake(0, 40, 320, 250);
[self.datePicker addTarget:self action:nil forControlEvents:UIControlEventValueChanged];
[self.NewView addSubview:self.datePicker];

[self.NewView addSubview:toolbar];

ビューを表示するためのアニメーション コード:

 __block CGRect temp = self.NewView.frame;
    temp.origin.y = CGRectGetMaxY(self.view.bounds);
    [UIView animateWithDuration:0.5 animations:^{temp.origin.y -= height, self.NewView.frame = temp;} completion:^(BOOL finished) {
        [self.view addSubview:self.NewView];}];

私はそれを取り除くためにほとんど同じコードを持っていて、それはうまくいきます!

int height = 0;
__block CGRect temp = self.NewView.frame;
temp.origin.y = CGRectGetMaxY(self.view.bounds);
[UIView animateWithDuration:0.5 animations:^{temp.origin.y -= height, self.NewView.frame = temp;} completion:^(BOOL finished) {
    [self.NewView removeFromSuperview];}];

誰が何が間違っているのか考えていますか? ビューもスライドする予定の場所に表示されます。

4

1 に答える 1

1

問題は、アニメーションが完了した後にサブビューとしてのみ NewView を追加することです。次のように、前に追加する必要があります。

__block CGRect temp = self.NewView.frame;
temp.origin.y = CGRectGetMaxY(self.view.bounds);
[self.view addSubview:self.NewView];
[UIView animateWithDuration:0.5 animations:^{temp.origin.y -= height, self.NewView.frame = temp;} completion:nil];
于 2012-11-28T10:53:28.810 に答える