MKMapViewã§ã¦ã¼ã¶ã¼ã®ç¾å¨å°ã表示ãã¦ããå ´å、MKMapViewä½æç´å¾ã«ç ´æ£ããã¨ã¯ã©ãã·ã¥ããå ´åã®å¯¾å¦
MKMapViewã§ã¦ã¼ã¶ã¼ã®ç¾å¨å°ã表示ãã¦ããå ´å、ä½æããç´å¾ã«ç ´æ£ããã¨ã¯ã©ãã·ã¥ããå ´åãããã¨ããã£ã。
ãã¬ã¼ã¹ãè¦ãã¨「MKDotBounceAnimation animationDidStop:finished」ã§åé¡ãåºã¦ããããã 。ãã®æ®µéã§ã¯å°å³ä¸ã«ã¯ä½ã®ã¢ããã¼ã·ã§ã³ã追å ãã¦ããªã。
ã¤ã¾ã、ã©ãããMKMapViewçµã¿è¾¼ã¿ã®ã¦ã¼ã¶ã¼ç¾å¨å°è¡¨ç¤ºç¨ã®ã¢ããã¼ã·ã§ã³ã®ã¢ãã¡ã¼ã·ã§ã³ã«åå ãããããã 。å°å³ã§ã¦ã¼ã¶ã¼ã®ç¾å¨å°ã表示ããã¨ä¾ã®ãã®éããã¤ãã´ããã´ãããããã¢ãã¡ã¼ã·ã§ã³ãããã、å¤åããã 。
ãã®å¾ãã¤ãããã¹ãããçµæ、ãããã¢ãã¡ã¼ã·ã§ã³ã ãã§ãªã、誤差ç¯å²ã示ãåãæç»ããã¢ãã¡ã¼ã·ã§ã³ã§ãåé¡ãåºãå ´åããã£ã。
ä»ã«ãå°ã£ã¦ãã人ãããªãã調ã¹ãã、Appleã®Developer Forumã«ã、ãµã¤ãä¸ã«ããã。
OmegaDelta >> Blog Archive >> MKDotBounceAnimation animationDidStop bug
ä¸è¨ã®ãµã¤ãã§ã¯ããã¤ã対å¦æ¹æ³ãææ¡ããã¦ããã®ã§、ãããããã¹ã¦è©¦ãã¦ã¿ã。
1.ã¢ãã¡ã¼ã·ã§ã³ãè½ã¡çãã¾ã§å¾ ã£ã¦ããç ´æ£ãã
確ãã«ã¯ã©ãã·ã¥ãã確çã¯æ¸ã£ãã、ããã§ãã¯ã©ãã·ã¥ããªãããã§ã¯ãªã。ãããã、éçºè ã®é½åã§ã¦ã¼ã¶ã¼ãå¾ ãããããã«ã¯ãããªã。
2.MKDotBounceAnimationã®animationDidStop:finishedã®å®è£ ãæ¸ãæãã
1ã®æ¹æ³ã¨æ¯ã¹ã¦ããã«ç ´æ£ã§ããã¡ãªããããã£ãã、ããã§ãå®ç§ã«ã¯ã©ãã·ã¥ãé²ããã¨ã¯ã§ããªãã£ã。
3.ä¸åº¦MKMapViewãä½ã£ãã2度ã¨ç ´æ£ããªã
å½ããåã ã、ããã¯å®ç§ã ã£ã。
ããã、ã¡ã¢ãªã®ç¯ç´ã®ããã«ã©ããã¦ãMKMapViewãç ´æ£ããªããã°ãªããªãå ´åã¯ã©ãããã®ã?試è¡é¯èª¤ã®æ«ã«ãã©ãçããçµè«ã¯、MKMapViewçµã¿è¾¼ã¿ã®ã¦ã¼ã¶ã¼ç¾å¨å°è¡¨ç¤ºç¨ã®ã¢ããã¼ã·ã§ã³ã使ããªããã¨ã 。
「MKMapView.showUserLocation = NO;」ã¯ãã¡ããå¹æããã。ã¦ã¼ã¶ã¼ä½ç½®ã表示ããå¿ è¦ããªããªããããä¸çªç°¡åã 。
ããã、ã¦ã¼ã¶ã¼ä½ç½®ã表示ããå¿ è¦ãããå ´åã¯MKMapViewDelegate.viewForAnnotationã使ã£ã¦MKUserLocationãã«ã¹ã¿ã ã®ãã®ã¨å ¥ãæ¿ããã®ãä¸ã¤ã®æ¹æ³ã 。
ViewControllerã®åæåã¡ã½ãããIBã§「MKMapView.showUserLocation = YES;」ããã¦ãã。
ããã¦ViewControllerãªã©ã®MKMapViewDelegateã«、次ã®ããã«viewForAnnotationã¡ã½ããã追å ãã¦ãã。
ããã¨、å°å³ãèªã¿è¾¼ã¾ãã¦ã¦ã¼ã¶ã¼ä½ç½®ã表示ãããã¨ããæã«、ã«ã¹ã¿ã ã®MKAnnotationViewãMKUserLocationã®ä»£ããã¨ãã¦è¿½å ããã。
ããã、ãã®ã¾ã¾ã§ã¯åé¡ããã。ã¦ã¼ã¶ã¼ä½ç½®ãèªåçã«ã¯æ´æ°ãããªãã®ã 。ãã®äºãèããã¨、ã©ãããMKMapViewã®ã¦ã¼ã¶ã¼ä½ç½®è¡¨ç¤ºã¯、ã¢ããªã±ã¼ã·ã§ã³ã¨é¢ä¿ãªãç¬ç«ãã¦CLLocationManagerã使ã£ã¦ä½ç½®æ´æ°ãè¡ã£ã¦ããããã。
ããã§ã¾ãViewControllerãªã©ã®MKMapViewDelegateã«æ¬¡ã®ãããªã¡ã½ããã追å ãã¦ãã。GMGeocodedAnnotationã¯MKAnnotationãããã³ã«ãå®è£ ããé©å½ãªã¯ã©ã¹ã§æ§ããªã。
ããã¦、ã¢ããªã±ã¼ã·ã§ã³ã§ä½¿ã£ã¦ããCLLocationManagerã§å¼ã³åºãããdidUpdateToLocationã§ãã®ã¡ã½ãããå¼ã³åºãããã«ãã¦ããã°ãã。
MKUserLocationã¯ããããç¹æ» ãããè²ã é¢ç½ãå¹æãããã、ããããããã¢ãã¡ã¼ã·ã§ã³ãå¿ è¦ãªãMKAnnotationViewãããã«æ¹é ããã°ããã ãã。
ãã®åé¡ã¯æ©ã解決ãããã¹ãã ã¨æãã、å®éã«ãã£ã¦ã¿ãã¨ç¬èªã®ã¦ã¼ã¶ã¼ä½ç½®è¡¨ç¤ºãæªããªã、ããã¾ããããã(^^);
ãã¬ã¼ã¹ãè¦ãã¨「MKDotBounceAnimation animationDidStop:finished」ã§åé¡ãåºã¦ããããã 。ãã®æ®µéã§ã¯å°å³ä¸ã«ã¯ä½ã®ã¢ããã¼ã·ã§ã³ã追å ãã¦ããªã。
ã¤ã¾ã、ã©ãããMKMapViewçµã¿è¾¼ã¿ã®ã¦ã¼ã¶ã¼ç¾å¨å°è¡¨ç¤ºç¨ã®ã¢ããã¼ã·ã§ã³ã®ã¢ãã¡ã¼ã·ã§ã³ã«åå ãããããã 。å°å³ã§ã¦ã¼ã¶ã¼ã®ç¾å¨å°ã表示ããã¨ä¾ã®ãã®éããã¤ãã´ããã´ãããããã¢ãã¡ã¼ã·ã§ã³ãããã、å¤åããã 。
ãã®å¾ãã¤ãããã¹ãããçµæ、ãããã¢ãã¡ã¼ã·ã§ã³ã ãã§ãªã、誤差ç¯å²ã示ãåãæç»ããã¢ãã¡ã¼ã·ã§ã³ã§ãåé¡ãåºãå ´åããã£ã。
ä»ã«ãå°ã£ã¦ãã人ãããªãã調ã¹ãã、Appleã®Developer Forumã«ã、ãµã¤ãä¸ã«ããã。
OmegaDelta >> Blog Archive >> MKDotBounceAnimation animationDidStop bug
ä¸è¨ã®ãµã¤ãã§ã¯ããã¤ã対å¦æ¹æ³ãææ¡ããã¦ããã®ã§、ãããããã¹ã¦è©¦ãã¦ã¿ã。
1.ã¢ãã¡ã¼ã·ã§ã³ãè½ã¡çãã¾ã§å¾ ã£ã¦ããç ´æ£ãã
確ãã«ã¯ã©ãã·ã¥ãã確çã¯æ¸ã£ãã、ããã§ãã¯ã©ãã·ã¥ããªãããã§ã¯ãªã。ãããã、éçºè ã®é½åã§ã¦ã¼ã¶ã¼ãå¾ ãããããã«ã¯ãããªã。
2.MKDotBounceAnimationã®animationDidStop:finishedã®å®è£ ãæ¸ãæãã
1ã®æ¹æ³ã¨æ¯ã¹ã¦ããã«ç ´æ£ã§ããã¡ãªããããã£ãã、ããã§ãå®ç§ã«ã¯ã©ãã·ã¥ãé²ããã¨ã¯ã§ããªãã£ã。
3.ä¸åº¦MKMapViewãä½ã£ãã2度ã¨ç ´æ£ããªã
å½ããåã ã、ããã¯å®ç§ã ã£ã。
ããã、ã¡ã¢ãªã®ç¯ç´ã®ããã«ã©ããã¦ãMKMapViewãç ´æ£ããªããã°ãªããªãå ´åã¯ã©ãããã®ã?試è¡é¯èª¤ã®æ«ã«ãã©ãçããçµè«ã¯、MKMapViewçµã¿è¾¼ã¿ã®ã¦ã¼ã¶ã¼ç¾å¨å°è¡¨ç¤ºç¨ã®ã¢ããã¼ã·ã§ã³ã使ããªããã¨ã 。
「MKMapView.showUserLocation = NO;」ã¯ãã¡ããå¹æããã。ã¦ã¼ã¶ã¼ä½ç½®ã表示ããå¿ è¦ããªããªããããä¸çªç°¡åã 。
ããã、ã¦ã¼ã¶ã¼ä½ç½®ã表示ããå¿ è¦ãããå ´åã¯MKMapViewDelegate.viewForAnnotationã使ã£ã¦MKUserLocationãã«ã¹ã¿ã ã®ãã®ã¨å ¥ãæ¿ããã®ãä¸ã¤ã®æ¹æ³ã 。
ViewControllerã®åæåã¡ã½ãããIBã§「MKMapView.showUserLocation = YES;」ããã¦ãã。
ããã¦ViewControllerãªã©ã®MKMapViewDelegateã«、次ã®ããã«viewForAnnotationã¡ã½ããã追å ãã¦ãã。
- (MKAnnotationView *)mapView:(MKMapView *)_mapView viewForAnnotation:(id)_annotation { //annotationãã¦ã¼ã¶ã¼ä½ç½®è¡¨ç¤ºç¨ã®å ´å if ([_annotation isKindOfClass:[MKUserLocation class]]) { NSLog(@"viewForAnnotation() annotationãMKUserLocationã¯ã©ã¹"); //ã¦ã¼ã¶ã¼ä½ç½®è¡¨ç¤ºç¨MKAnnotationViewä½æ if (!ulocView) { UIImage *img = [UIImage imageNamed:@"userlocation.png"]; ulocView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"CustomUserLocation"]; ulocView.image = img; } return ulocView; } else { NSLog(@"viewForAnnotation() æ®éã®ã®〜"); return nil; } }
ããã¨、å°å³ãèªã¿è¾¼ã¾ãã¦ã¦ã¼ã¶ã¼ä½ç½®ã表示ãããã¨ããæã«、ã«ã¹ã¿ã ã®MKAnnotationViewãMKUserLocationã®ä»£ããã¨ãã¦è¿½å ããã。
ããã、ãã®ã¾ã¾ã§ã¯åé¡ããã。ã¦ã¼ã¶ã¼ä½ç½®ãèªåçã«ã¯æ´æ°ãããªãã®ã 。ãã®äºãèããã¨、ã©ãããMKMapViewã®ã¦ã¼ã¶ã¼ä½ç½®è¡¨ç¤ºã¯、ã¢ããªã±ã¼ã·ã§ã³ã¨é¢ä¿ãªãç¬ç«ãã¦CLLocationManagerã使ã£ã¦ä½ç½®æ´æ°ãè¡ã£ã¦ããããã。
ããã§ã¾ãViewControllerãªã©ã®MKMapViewDelegateã«æ¬¡ã®ãããªã¡ã½ããã追å ãã¦ãã。GMGeocodedAnnotationã¯MKAnnotationãããã³ã«ãå®è£ ããé©å½ãªã¯ã©ã¹ã§æ§ããªã。
- (void)moveUserLocationAnnotationView:(CLLocationCoordinate2D)coord { if (ulocView) { NSLog(@"ã¦ã¼ã¶ã¼ä½ç½®è¡¨ç¤ºç¨MKAnnotationView移å lat=%f, lng=%f", coord.latitude, coord.longitude); GMGeocodedAnnotation *anno = ulocView.annotation; anno.coordinate = coord; } }
ããã¦、ã¢ããªã±ã¼ã·ã§ã³ã§ä½¿ã£ã¦ããCLLocationManagerã§å¼ã³åºãããdidUpdateToLocationã§ãã®ã¡ã½ãããå¼ã³åºãããã«ãã¦ããã°ãã。
MKUserLocationã¯ããããç¹æ» ãããè²ã é¢ç½ãå¹æãããã、ããããããã¢ãã¡ã¼ã·ã§ã³ãå¿ è¦ãªãMKAnnotationViewãããã«æ¹é ããã°ããã ãã。
ãã®åé¡ã¯æ©ã解決ãããã¹ãã ã¨æãã、å®éã«ãã£ã¦ã¿ãã¨ç¬èªã®ã¦ã¼ã¶ã¼ä½ç½®è¡¨ç¤ºãæªããªã、ããã¾ããããã(^^);
ã³ã¡ã³ã
ã³ã¡ã³ããæ稿