Tworzę UIActionSheet
w actionSheet: clickButtonAtIndex delegate method.UIActionSheet trwa długo odpowiedź:
- (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];
}
obsłużyć zdarzenia click tego UIActionSheet
w dokładnie taki sam sposób jak powyżej.
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];
}
}
Problem jestem stoi to tym, UIActionSheet
zajmuje zbyt dużo czasu na odpowiedź. Kliknięcie przycisku UIActionSheet
powoduje jego zatrzymanie na 2 lub 3 sekundy przed załadowaniem myThirdView
. Nie jestem w stanie zrozumieć, jakie jest opóźnienie odpowiedzi w tym przypadku, ponieważ pierwszą czynnością w metodzie zdarzenia kliknięcia przycisku jest załadowanie myThirdView
. Reszta kodu jest wykonywana tylko po kodzie do załadowania myThirdView. Ale nawet pierwsza linia kodu wydaje się wykonywać po opóźnieniu. Jakieś sugestie?
to działa po zmianie '[działania showInView: self.view];' '[do działania showInView: self.mySecondView];'? – Felix
To działa. Ale nie ma znaczącej zmiany w szybkości odpowiedzi arkusza działania. –
Myślę, że właściwą odpowiedzią powinno być połączenie odpowiedzi Saada i Andrew Zimmera. Kod, który powinien być uruchomiony w wątku tła, jest linią kodu '[self.doneButton.target performSelector: self.doneButton.action withObject: self.doneButton];'. Reszta kodu, łącznie z metodą 'RemoveView' powinna działać w głównym wątku. Specjalne wyróżnienie dla Gabriela za symulację akcji dotykowej przycisku. –