2012-08-02 35 views
1

場景:從UIButton Popover從設備上很慢

UIScrollView有一個UIButton。點擊UIButton會導致UIPopoverController從一個指定的rect中呈現它自己。 UIPopoverController的contentViewController是一個帶有UIDatePicker的UIViewController。當按鈕被點擊,其燒製

代碼(按鈕的類型是自定義的帶觸摸起來註冊內部抽頭):

- (void)showCalendar:(id)sender { 
    dateViewController = [[UIViewController alloc] init]; 

    datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 240, 200)]; 
    datePicker.datePickerMode = UIDatePickerModeDate; 
    datePicker.hidden = NO; 
    datePicker.date = [NSDate date]; 

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

    NSLocale *US = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
    NSCalendar *cal = [NSCalendar currentCalendar]; 
    [cal setLocale:US]; 
    [datePicker setCalendar:cal]; 
    [datePicker setMaximumDate:[NSDate date]]; 


    dateViewController.view = datePicker; 

    dateViewController.contentSizeForViewInPopover = CGSizeMake(240, 200); 
    self.popoverController = [[UIPopoverController alloc] 
           initWithContentViewController:dateViewController]; 
    self.popoverController.delegate = self; 

    NSLog(@"YESYESYES"); 

     [self.popoverController presentPopoverFromRect:CGRectMake(753, 513, 1, 1) inView:parentView permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES]; 

    NSLog(@"NONONO"); 

} 

有兩個的NSLog語句之間明顯的1秒以上的滯後時,我將設備連接到Xcode並運行該應用程序。可能是這種滯後的原因是什麼?

+0

更換

dateViewController.view = datePicker; 

它可以在後臺線程而非主線程發出?如果您有一個調用此方法的'IBAction',請將該方法放在GCD主隊列中。 – Baub 2012-08-02 06:55:07

+0

沒有。它在主線程上運行。 – Bourne 2012-08-02 09:39:57

+0

當按鈕被按下時,這個方法叫做?或者是從另一種方法調用此方法? (即IBAction或其他) – Baub 2012-08-02 15:25:31

回答

2

解決了用

[dateViewController.view addSubview:datePicker]; 
1

你在哪個隊列中運行此方法?

要在主隊列中運行它,請嘗試此操作。如果您未使用Interface Builder,請用適當的代碼替換IB代碼。

- (void)showCalendar:(id)sender { 

    // your setup code here... then: 

    dispatch_sync(dispatch_get_main_queue(), ^{ 
     NSLog(@"YESYESYES"); 
     [self.popoverController presentPopoverFromRect:CGRectMake(753, 513, 1, 1) inView:parentView permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES]; 
     NSLog(@"NONONO"); 
    }); 
}