Καθυστέρηση στην κλήση με τη μέθοδο εκπρόσωπος - MapView: regionDidChangeAnimated:

ψήφοι
3

Κάθε φορά που ο χρήστης κάνει κύλιση χάρτη ή ζουμ in / out, αυτή η μέθοδος παίρνει ονομάζεται ακαριαία. Θέλω να καθυστερήσει την κλήση με τη μέθοδο αυτή από ας πούμε 2 δευτερόλεπτα. Είναι δυνατόν να το κάνουμε αυτό;

Δημοσιεύθηκε 17/04/2010 στις 22:27
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
4

Θα μπορούσε να εφαρμόσει τη μέθοδο αυτή ως εξής:

-(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    NSNumber *animatedNumber = [NSNumber numberWithBool:animated];
    NSArray *args = [[NSArray alloc] initWithObjects:mapView,
                                                     animatedNumber,nil];

    [self performSelector:@selector(delayedMapViewRegionDidChangeAnimated:)
          withObject:args
          afterDelay:2.0f];

    [args release];
}

Στη συνέχεια, κάπου στην ίδια κατηγορία:

-(void)delayedMapViewRegionDidChangeAnimated:(NSArray *)args
{
  MKMapView *mapView = [args objectAtIndex:0];
  BOOL animated = [[args objectAtIndex:1] boolValue];

  // do what you would have done in mapView:regionDidChangeAnimated: here
}

Φυσικά, αν δεν χρειάζεστε ένα από τα επιχειρήματα αυτά (είτε mapViewή animated), θα μπορούσατε να κάνετε αυτό πολύ πιο απλή με το πέρασμα μόνο αυτό που χρειαζόταν.

Εάν δεν μπορείτε να επεξεργαστείτε τον κώδικα για σας MKMapViewDelegate, ίσως θα μπορούσατε να κάνετε κάτι παρόμοιο με τη μέθοδο swizzling, αν και στη συνέχεια παίρνετε πραγματικά Hacky.

Απαντήθηκε 18/04/2010 στις 00:43
πηγή χρήστη

ψήφοι
0

Μπορείτε να στείλετε ένα καθυστερημένο μήνυμα με performSelector:withObject:afterDelay:ή μία από τις σχετικές μεθόδους.

Απαντήθηκε 18/04/2010 στις 00:19
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more