【发布时间】:2012-07-31 03:02:30
【问题描述】:
场景:
UIScrollView 有一个 UIButton。点击 UIButton 会导致 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 并运行应用程序时,两个 NSLog 语句之间存在明显的 1 秒或更长时间的延迟。出现这种滞后的原因可能是什么?
【问题讨论】:
-
它可以在后台线程而不是主线程中吗?如果你有一个
IBAction调用这个方法,把这个方法放在 GCD 主队列中。 -
不。它在主线程上运行。
-
当按钮被按下时,这是调用的方法吗?或者这个方法是从另一个方法调用的? (即 IBAction 或其他)
-
另外,请在下面查看我的答案。开个玩笑,你能试着把
NSLog语句和presentPopover代码放到GCD 中,就像我在例子中展示的那样吗?这样做之后的延迟是多少? -
奇怪的问题,奇怪的解决方案。您使用的是 iOS 6 测试版吗?我有同样的问题,但从情节提要加载控制器。我的弹出框还包含一个日期选择器,但您的解决方案不适用于我的情况。如果您对根本原因有任何想法,请告诉我。
标签: iphone ios ipad uibutton uipopovercontroller