私は周りを見回しましたが、この件についてはほとんど見つけることができませんでした. 作成中のアプリに「車を探す」機能を実装しようとしています。
ユーザーが自分の車の位置を保存するために使用できるマップ ビューがあります。「車を探す」をクリックすると、現在地と車が mapView に表示されます。(下記参照)
私の問題: マップを回転させて、ユーザーがどちらを向いているかを示すにはどうすればよいですか? そのため、ユーザーがどの方向に歩く必要があるかを示すことができます。ネイティブ マップ ap によく似ています。
私が行った読書から、これは didUpdateToLocation: デリゲート メソッドで行われると信じていますが、よくわかりません。
(私のユーザーが湖にいることに気付きましたが、それは問題ではありません)
これは、ピンを追加して画面に合わせるために使用したコードです。
古いコード
編集:
コメントで fguchelaar によって提供されたリンクを使用して、何とか機能させることができました。コードを次のように変更しました。このコードは地図を回転させますが、奇妙な動作をします。こちらをご覧ください
- (IBAction)BTNPinCar:(id)sender {
CLLocation *location = [locationManager location];
// Configure the new event with information from the location
float longitude=location.coordinate.longitude;
float latitude=location.coordinate.latitude;
NSLog(@"dLongitude : %f", longitude);
NSLog(@"dLatitude : %f", latitude);
[self pins:latitude lon:longitude];
parked.latitude = latitude;
parked.longitude = longitude;
//set the reigion to the coords and a mile distance
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(parked, startZoom , startZoom );
//change the region and animate it
[MapView setRegion:viewRegion animated:YES];
}
- (IBAction)BTNFindCar:(id)sender {
MKMapRect zoomRect = MKMapRectNull;
for (id <MKAnnotation> annotation in MapView.annotations)
{
MKMapPoint annotationPoint = MKMapPointForCoordinate(annotation.coordinate);
MKMapRect pointRect = MKMapRectMake(annotationPoint.x, annotationPoint.y, 0.1, 0.1);
if (MKMapRectIsNull(zoomRect)) {
zoomRect = pointRect;
} else {
zoomRect = MKMapRectUnion(zoomRect, pointRect);
}
}
[MapView setVisibleMapRect:zoomRect animated:YES];\
// Start heading updates.
if ([CLLocationManager headingAvailable]) {
locationManager.headingFilter = 5;
[locationManager startUpdatingHeading];
}
}
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
// [MapView setTransform:CGAffineTransformMakeRotation(-1 * newHeading.magneticHeading * M_PI / 180)];
double rotation = newHeading.magneticHeading * 3.14159 / 180;
CGPoint anchorPoint = CGPointMake(0, -23); // The anchor point for your pin
[MapView setTransform:CGAffineTransformMakeRotation(-rotation)];
[[MapView annotations] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
MKAnnotationView * view = [MapView viewForAnnotation:obj];
[view setTransform:CGAffineTransformMakeRotation(rotation)];
[view setCenterOffset:CGPointApplyAffineTransform(anchorPoint, CGAffineTransformMakeRotation(rotation))];
}];
}
編集2:
ローテーションの問題を解決しました。
かわった
[MapView setTransform:CGAffineTransformMakeRotation(-rotation)];
為に
[MapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading animated:YES];