2013-09-10 4 views
0

Я хотел бы скрыть multipleSearchView перед началом функции closestStation, но без успеха, она скрывает, но после того, как closestStation закончитьЯ не могу скрыть взгляд, прежде чем функция закончить

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath 
*)indexPath 
{ 
    if (tableView == self.localityTableView){ 
     [self.multipleSearchView setHidden:TRUE]; 
     [self closestStation:locality.latitude :locality.longitude]; 
    } 

} 


- (void) closestStation :(float) latitude :(float) longitude{ 
    // this function takes 3 or 4 second 
} 
+0

Возможно, это связано с рендерингом трубопровода. Вы устанавливаете представление скрытым, но не позволяете кадру рисования проходить и фактически скрываете геометрию представления, которая отображается перед запуском ближайшейStation. Вы можете попытаться установить промежуток времени ожидания между ними. – Lochemage

ответ

1

Это потому, что у вас есть тяжелый - операция подъема в основной очереди. Поместите свой -closestStation: в фоновый режим, чтобы решить эту проблему.

0

Обновления пользовательского интерфейса также занимают некоторое время (в следующем цикле). Попробуйте с этим:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath 
{ 
if (tableView == self.localityTableView){ 
    [self.multipleSearchView setHidden:TRUE]; 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     [self closestStation:locality.latitude :locality.longitude]; 
    }); 
    } 
} 


- (void) closestStation :(float) latitude :(float) longitude{ 

// SQLite query here to find the closest places 

if (self.places.count == 0){ 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No Results" 
                message:@"No results match your 
                search. try with other criteria" 
                delegate:nil 
              cancelButtonTitle:@"OK" 
              otherButtonTitles:nil]; 
    [alert show]; 

} 
else { 
    [self displayAnnotations]; 
} 

} 


-(void) displayAnnotations{ 
    NSMutableArray *annotations = [[NSMutableArray alloc] init]; 

    for (Station *item in self.places) 
    { 
     PlaceAnnotation *annotation = [[PlaceAnnotation alloc] init]; 
     annotation.coordinate = item.coordinate; 
     annotation.title = item.stationName; 
     annotation.subtitle = item.address1; 
     annotation.station = item; 
     [annotations addObject:annotation];  
    } 

if (annotations.count > 0){ 
    [self.mapView addAnnotations:annotations]; 
} 

} 
+0

Спасибо, что работает сейчас, функция multipleSearchView исчезает перед запуском ближайшейStation, но у меня есть еще одна проблема, при закрытой станции вызывать другую функцию displayAnnotations, чтобы отображать аннотации вывода в mapView, и кажется, что иногда есть задержка перед отображением аннотаций, и иногда ничего не происходит до тех пор, пока Я перемещаю карту, и в этот момент я вижу аннотации на карте. – user2762628

0

Попробуйте с performSelectorInBackground.

Смежные вопросы