2012-07-28 34 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的解決。