2017-01-19 14 views
5

Pimi, animasyonlu rotaya göre hareket ettirmek için Uber iOS uygulamasıyla aynı işlevselliği uyguladım.iOS: Hareketli pimle ilgili Callout görünümünü göster

Sorunlar: o zaman hareket ederken pim tıkladığımda Ben MKMapView ait didSelectAnnotationView temsilci almanız mümkün değilim. Ancak pim sabit olduğunda hareket etmiyor demektir.

Kodu: Güncelleme

- (void)updateLocation { 

    CLLocationCoordinate2D oldLocation; 
    CLLocationCoordinate2D newLocation; 

    oldLocation.latitude = [self convertStringToFloat:self.arrayCSV[self.index-1][@"Latitude"]]; 
    oldLocation.longitude = [self convertStringToFloat:self.arrayCSV[self.index-1][@"Longitude"]]; 
    newLocation.latitude = [self convertStringToFloat:self.arrayCSV[self.index][@"Latitude"]]; 
    newLocation.longitude = [self convertStringToFloat:self.arrayCSV[self.index][@"Longitude"]]; 
    float getAngle = [self angleFromCoordinate:oldLocation toCoordinate:newLocation]; 

    CLLocation *oldInfo = [[CLLocation alloc] initWithLatitude:oldLocation.latitude longitude:oldLocation.longitude]; 
    CLLocation *newInfo = [[CLLocation alloc] initWithLatitude:newLocation.latitude longitude:newLocation.longitude]; 

    [UIView animateWithDuration:3 
     animations:^{ 
      myAnnotation.coordinate = newLocation; 
      AnnotationView *annotationView = (AnnotationView *)[self.mapView viewForAnnotation:myAnnotation];     
      annotationView.transform = CGAffineTransformMakeRotation(getAngle); 
    }]; 
} 

cevap

2

bu deneyin koordinat pimi

-(MKAnnotationView*)mapView:(MKMapView*)mapView viewForAnnotation:(id<MKAnnotation>)annotation { 

    if([annotation isKindOfClass:[MKUserLocation class]]) 
     return nil; 

    else { 

     NSString *annotationIdentifier = @"CustomViewAnnotation"; 

     AnnotationView * annotationView = (AnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier]; 

     if(annotationView == nil) { 

      annotationView = [[AnnotationView alloc] initWithAnnotation:annotation 
                     reuseIdentifier:annotationIdentifier]; 
      UIImage *pinIcon = [UIImage imageNamed:@"carIcon"]; 
      annotationView.btnInfo = [[UIButton alloc] init]; 
      annotationView.frame = CGRectMake(0.0f, 0.0f, pinIcon.size.width, pinIcon.size.height); 
      annotationView.btnInfo.frame = annotationView.frame; 
      [annotationView.btnInfo setBackgroundImage:pinIcon forState:UIControlStateNormal]; 
      [annotationView addSubview:annotationView.btnInfo]; 
      [annotationView.btnInfo setUserInteractionEnabled:NO]; 
     } 

     else 
      annotationView.annotation = annotation; 

     annotationView.enabled = YES; 
     annotationView.canShowCallout = YES; 

     return annotationView; 
    } 
} 

oluşturun.

Gördüğünüz davranış, varsayılan olarak, kullanıcı etkileşiminin yeni blok çağrıları ile süre animasyonu devre dışı bırakılmasından kaynaklandığını düşünüyorum.

aşağıdaki gibi UIViewAnimationOptionAllowUserInteraction geçirerek bu geçersiz kılabilirsiniz:

[UIView animateWithDuration:3 
    delay:0 
    options:UIViewAnimationOptionAllowUserInteraction 
    animations:^{ 
     myAnnotation.coordinate = newLocation; 
     AnnotationView *annotationView = (AnnotationView *)[self.mapView viewForAnnotation:myAnnotation];     
     annotationView.transform = CGAffineTransformMakeRotation(getAngle); 
    } 
completion:nil]; 
+0

Sen benim gün sayesinde @wolverine kurtarmıştı. –

İlgili konular