【发布时间】:2012-06-14 09:19:13
【问题描述】:
我正在 actionSheet:clickedButtonAtIndex 委托方法上创建 UIActionSheet。
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
if(buttonIndex == 1){
[self.myFirstView removeFromSuperview];
if (!self.mySecondView) {
[[NSBundle mainBundle] loadNibNamed:@"MySecondView" owner:self options:nil];
}
[self.mySecondView setFrame:CGRectMake(0, 0, 320, 480)];
[[UIApplication sharedApplication].keyWindow addSubview: self.mySecondView];
UIActionSheet * action = [[UIActionSheet alloc]initWithTitle:@""
delegate:self
cancelButtonTitle: nil
destructiveButtonTitle: deleteContacts
otherButtonTitles: cancel, nil];
action.tag = 102;
[action showInView:self.view];
[action release];
}
我用与上面完全相同的方法处理这个UIActionSheet的点击事件。
if(actionSheet.tag == 102){
if(buttonIndex == 0){
if([[NSBundle mainBundle] loadNibNamed:@"MyThirdView" owner:self options:nil]) {
[self.myThirdView setFrame:CGRectMake(0, 0, 320, 480)];
[[UIApplication sharedApplication].keyWindow addSubview:self.myThirdView];
}
[self.mySecondView removeFromSuperview];
[self.doneButton.target performSelector:self.doneButton.action withObject:self.doneButton.target];
[self performSelector:@selector(RemoveView) withObject:self afterDelay:3.0];
}
}
我面临的问题是,UIActionSheet 需要太多时间来响应。当我单击UIActionSheet 按钮时,它会在myThirdView 加载之前处于冻结状态2 或3 秒。我无法理解,这种情况下的响应延迟是什么,因为我在UIActionSheet 按钮单击事件方法中做的第一件事是加载myThirdView。其余代码仅在加载 myThirdView 的代码之后执行。但即使是第一行代码似乎也会在延迟后执行。
有什么建议吗?
【问题讨论】:
-
将
[action showInView:self.view];改为[action showInView:self.mySecondView];是否有效? -
它有效。但action sheet的响应速度没有明显变化。
-
我认为正确的答案应该是结合 The Saad 和 Andrew Zimmer 的答案。应该在后台线程上运行的代码是这行代码
[self.doneButton.target performSelector:self.doneButton.action withObject:self.doneButton];。包括RemoveView方法在内的其余代码应该在主线程上运行。特别提到 Gabriel 模拟按钮触摸动作。 -
首先,我自己是一名反ARC编码员,所以我有一些提示。其次,我对你写导航的方式有点前卫,它看起来很乱,但我不能用这个最小的观点给出任何建议。 Tiptime:第一,断点,看看发生了什么线程。 2:performSelectorOnMainThread而不是performSelector。 3:在执行回调之前不要释放 UIActionSheet。 4:确保“自我”仍然存在。 5:使用断点和step-thru来衡量处理函数的速度
标签: iphone objective-c ios uiview uiactionsheet