1

シナリオ:

UIScrollViewにはUIButtonがあります。UIButtonをタップすると、指定されたrectからUIPopoverControllerが表示されます。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");

}

デバイスをXcodeに接続してアプリを実行すると、2つのNSLogステートメントの間に顕著な1秒以上の遅延があります。そのような遅れの理由は何でしょうか?

4

2 に答える 2

2

を置き換えることによって発行された問題を解決しました

dateViewController.view = datePicker;

[dateViewController.view addSubview:datePicker];
于 2012-09-04T11:35:47.107 に答える
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");
    });
}
于 2012-08-02T06:59:52.283 に答える