4

アプリのユーザー注釈を変更して、通常の青い点が表示されるようにしようとしていますが、ユーザーが向いている方向を示すために三角形が表示されます (マップ全体よりもユーザー注釈を回転させたいと思います)。 、これは MKUserTrackingModeFollowWithHeading が行うことです)。初歩的なバージョンが動作していますが、奇妙な動作があります。

まず、いくつかのコード:

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
     if ([annotation isKindOfClass:[MKUserLocation class]]) {
          _userLocationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"userLocationIdentifier"];
          //use a custom image for the user annotation
          _userLocationView.image = [UIImage imageNamed:@"userLocationCompass.png"];

          return _userLocationView;

     } else {
          return nil;
     }

}

-(void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {

     //rotate user location annotation based on heading from location manager.
     if (!_locatorButton.hidden) {
          CLLocationDirection direction = newHeading.magneticHeading;

          CGAffineTransform transform = CGAffineTransformMakeRotation(degreesToRadians(direction));
          _userLocationView.transform = transform;
     }

}

-(void)GPSButtonPressed:(id)sender {
    if (self.GPSEnabled) {
        //if GPS is already on, disable it.
        _mapview.showsUserLocation = NO;
        [_mapview removeAnnotation:_mapview.userLocation];
        self.GPSEnabled = NO;

        [_locationManager stopUpdatingHeading];

    } else {
        //enable GPS.
        _mapview.showsUserLocation = YES;
        self.GPSEnabled = YES;

        if ([CLLocationManager headingAvailable]) {
            [_locationManager startUpdatingHeading];
        }


    }
}

ユーザーの場所の注釈画像は正常に表示され、見出しに基づいて回転しますが、奇妙な動作は次のとおりです。

1- 注釈が自分の位置に追従しません。注釈は 1 か所にしか留まりませんが、正しい見出しで回転します。「GPS ボタン」で GPS をオフにしてから再度オンにすると、注釈は正しい場所に表示されますが、歩いても追跡できません。

2- 地図をスクロールすると、注釈が真北に戻り、すぐに正しい方向に回転するため、ちらつきが発生します。

3- GPS をオフにしてユーザーの位置を削除すると、注釈は意図したとおりに削除されますが、マップをスクロールすると、注釈が非表示になるのではなく画面に戻ります。

私は何を間違っていますか?役立つヒントをありがとう!

4

1 に答える 1

2

2. 既に問題を解決している可能性が高い場合でも、同様の問題を解決するのに役立つ解決策を共有したいと思います。

同じ問題に遭遇しました。ユーザーがマップをスクロールまたはパンしたときに、カスタム ユーザーの位置矢印の回転が常に北に戻っていました。ここで修正を見つけました:https://stackoverflow.com/a/12753320/2030629

著者によると、それはios6であり、追加することで修正できます

if(is6orMore) {
        [annView setTransform:CGAffineTransformMakeRotation(.001)]; //iOS6 BUG WORKAROUND !!!!!!!
 }

mapView:viewForAnnotation に。

また、変換を - mapView:regionDidChangeAnimated: に再度設定します。これが私と同じくらい他の誰かを幸せにすることを願っています:)

于 2013-02-26T10:30:17.747 に答える