flutter_naver_map icon indicating copy to clipboard operation
flutter_naver_map copied to clipboard

[iOS] LocationTrackingMode 변경에 따라, NLocationOverlay의 Icon이 기본 아이콘으로 변경되는 현상

Open Kwon-dev opened this issue 1 year ago • 8 comments

 void onMapReady(BuildContext context, NaverMapController controller) async {
    naverMapController = controller;
    final nLocationOverlay = await naverMapController.getLocationOverlay();
    nLocationOverlay.setIcon(
        const NOverlayImage.fromAssetImage('assets/icons/map/my_overlay.png'));
    nLocationOverlay.setIconSize(Size(28.35,28.35));
    naverMapController.setLocationTrackingMode(NLocationTrackingMode.noFollow);
  }

이런식으로 구현을 하면

andorid ios

왼쪽이 안드로이드고 오른쪽이 ios인데 이렇게 차이가 발생합니다.

Kwon-dev avatar Jun 01 '23 06:06 Kwon-dev

안녕하세요. 이슈를 제보해주셔서 감사드립니다. 해당 부분 확인되는대로 다시 답변드리겠습니다. 감사합니다.

note11g avatar Jun 07 '23 04:06 note11g

혹시, iOS에서 에셋 이미지의 크기가 정상적으로 표출되지 않는 이슈를 말씀하시는 걸까요? 그렇다면, https://github.com/note11g/flutter_naver_map/issues/91 을 한번 확인해주세요. 만약, 중복 이슈라면 Close 부탁드립니다. 감사합니다.

note11g avatar Jul 07 '23 02:07 note11g

이미지 크기의 문제도 있지만 왼쪽의 까만 원이 이미지인데 안드로이드, ios 동일하게 적용했지만 우측 ios에는 검은 원이 안나온 것으로 보아 이미지 적용 자체에 문제가 있는 것으로 보입니다.

Kwon-dev avatar Jul 07 '23 03:07 Kwon-dev

여전히 같은 증상이 나타나는지 확인 부탁드려도 될까요? 증상이 나타난다면, 재현 단계를 요청드립니다.

note11g avatar Jul 07 '23 03:07 note11g

현재도 동일하게 증상 발생하고 있고 재현에 필요한 코드는 먼저 올려둔 코드가 전부입니다. my_overlay 사용한 이미지 파일입니다.

Kwon-dev avatar Jul 07 '23 03:07 Kwon-dev

확인 후, 코멘트드리겠습니다. 감사합니다.

note11g avatar Jul 07 '23 03:07 note11g

@Kwon-TaeHyoung 안녕하세요. 답변이 늦어 죄송합니다. 재현에 성공하였습니다.

해당 현상은 다음과 같은 상황에서 발생합니다. iOS : setLocationTrackingMode이 실행될 때 마다, NLocationOverlayiconsubIcon이 기본 아이콘으로 변경 됨. Android : setLocationTrackingMode이 실행될 때 마다, NLocationOverlaysubIcon만 기본 아이콘으로 변경 됨.

네이버 맵의 기본 LocationTrackingMode를 사용할 경우, bearing(방향각)에 따라 subIcon으로 방향을 표시합니다. 이 때, 방향각을 표시하는 모드(NLocationTrackingMode.follow, NLocationTrackingMode.face)와 표시하지 않는 모드(NLocationTracking.noFollow)를 조작할 경우, subIcon에 대한 조작이 동시에 이루어져서 그런 것으로 유추됩니다.

이때, iOS의 경우 NLocationOverlayicon까지 변경되어 이런 현상이 발생한 것 같습니다.

수정이 가능할지는 시도해보지 않아 정확히는 알 수 없습니다만, 임시적으로 해결할 수 있는 방법은, 2가지가 있습니다.

1. 내장 위치 추적 기능을 사용하지 않고, setPosition을 통해 직접 수행하는 방법

// onLocationChanged는 임의의 함수입니다. 3rd-party 위치 추적 라이브러리를 사용하여 구현하시면 됩니다.
onLocationChanged((nowPosition) {
      nLocationOverlay
        ..setPosition(nowPosition)
        ..setIcon(const NOverlayImage.fromAssetImage('assets/my_overlay.png'))
        ..setIconSize(const Size(24, 24))
        ..setIsVisible(true);
    });

2. 내장 위치 추적 기능을 사용하되, location 정보가 바뀔때마다 setIcon 실행 (noFollow 모드 사용시, 추천하지 않음)

NLocationOverlay? locationOverlay;

void onMapReady(NaverMapController controller) async {
  mapController = controller;

  locationOverlay = await controller.getLocationOverlay();
  locationOverlay!
    ..setCircleRadius(0)
    ..setIconSize(const Size(24, 24)); // icon, subIcon 외에 나머지 설정은 유지됩니다.
  await controller.setLocationTrackingMode(NLocationTrackingMode.follow); 
  // 만약, noFollow를 사용하셔야 하신다면, follow로 위치가 변경된 이후(onCameraChange) noFollow로 바꿔주신 후에, 다시 아이콘을 바꿔주세요.
}

void onCameraChange(NCameraUpdateReason reason, bool isGesture) {
  // follow / face 대응.
  if (reason == NCameraUpdateReason.location) {
    locationOverlay?.setIcon(const NOverlayImage.fromAssetImage('assets/my_overlay.png'));
  }
}

감사합니다. 진척이 있다면, 코멘트로 남기도록 하겠습니다.

note11g avatar Dec 28 '23 06:12 note11g

#173 이 구현완료되면, 해당 현상도 수정될 것으로 보입니다. 해결되면 다시 코멘트 드리겠습니다. 감사합니다.

note11g avatar Jan 28 '24 23:01 note11g