2012-07-28 35 views
1

当我将UIToolbar添加到视图中时,出现“奇怪”的动画故障。我将UIToolbar制作成动画,使其从底部向上滑动,并与UIPickerViewUIDatePicker一起滑动。起初我看到它在滑动,但动画完成后很快消失。这种情况发生在我滑下(动画UIPickerView以滑下屏幕)并在此之后,我有另一个UIPickerView向上滑动。iOS - 使用UIToolbar动画故障

我注意到,如果我在滑动呼叫上设置了延迟(- performSelector...)0.3秒,它将正确显示UIToolbar(小于0.3秒的任何内容仍将具有相同的毛刺)。什么可能导致这种情况?

编辑:也许我应该把两者在新UIView容器UIToolbarUIDatePicker

这是我正在使用的代码:

if ([self.view.subviews containsObject:self.dateRepeatPicker]) { 

     [self dismissDateRepeatPickerSegmentChanged:NO]; 

     // "Hack", if I don't delay this call the UIToolbar will not display 
     [self performSelector:@selector(showDatePicker) withObject:nil afterDelay:0.3]; 

} else if (![self.view.subviews containsObject:self.datePicker]) { 

     [self showDatePicker]; 
} 


- (void)dismissDateRepeatPickerSegmentChanged:(BOOL)segmentChanged { 

    CGRect toolbarTargetFrame = CGRectMake(0, self.view.bounds.size.height, 320, 44); 
    CGRect dateRepeatPickerTargetFrame = CGRectMake(0, self.view.bounds.size.height+44, 320, 216); 

    [UIView animateWithDuration:0.2 

        animations:^{ 
         self.pickerToolbar.frame = toolbarTargetFrame; 
         self.dateRepeatPicker.frame = dateRepeatPickerTargetFrame; 
        } 

        completion:^(BOOL finished) { 

         if (segmentChanged) { 

          [self.pickerToolbar removeFromSuperview]; 
          [self.dateRepeatPicker removeFromSuperview]; 
          [self.remindMeTableView reloadData]; 

         } else { 

          [self.pickerToolbar removeFromSuperview]; 
          [self.dateRepeatPicker removeFromSuperview]; 
         } 

        }]; 
} 

- (void)showDatePicker { 


    // Create the Toolbar over the Picker 
    CGRect toolbarTargetFrame = CGRectMake(0, self.view.bounds.size.height-216-44, 320, 44); 

    if (self.pickerToolbar == nil) { 

     self.pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height, 320, 44)]; 
     self.pickerToolbar.barStyle = UIBarStyleBlack; 
     self.pickerToolbar.translucent = YES; 
    } 

    UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"picker-dismiss.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(dismissDatePickerToolbar)]; 
    [self.pickerToolbar setItems:[NSArray arrayWithObjects:spacer, doneButton, nil]]; 
    [self.view addSubview:self.pickerToolbar]; 


    // Create the Picker under the Toolbar 
    CGRect datePickerTargetFrame = CGRectMake(0, self.view.bounds.size.height-216, 320, 216); 

    if (self.datePicker == nil) { 

     self.datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height+44, 320, 216)]; 
     [self.datePicker setMinuteInterval:5]; 

     [self.datePicker addTarget:self action:@selector(changeDate:) forControlEvents:UIControlEventValueChanged]; 

    } 

    [self.view addSubview:self.datePicker]; 

    [UIView animateWithDuration:0.2 animations:^{ 

     self.pickerToolbar.frame = toolbarTargetFrame; 
     self.datePicker.frame = datePickerTargetFrame; 

    }]; 
} 

回答

0

通过添加UIPickerViewUIToolbar于含UIView然后动画含UIView的解决。