flutter_naver_map
flutter_naver_map copied to clipboard
[iOS] LocationTrackingMode 변경에 따라, NLocationOverlay의 Icon이 기본 아이콘으로 변경되는 현상
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);
}
이런식으로 구현을 하면
왼쪽이 안드로이드고 오른쪽이 ios인데 이렇게 차이가 발생합니다.
안녕하세요. 이슈를 제보해주셔서 감사드립니다. 해당 부분 확인되는대로 다시 답변드리겠습니다. 감사합니다.
혹시, iOS에서 에셋 이미지의 크기가 정상적으로 표출되지 않는 이슈를 말씀하시는 걸까요? 그렇다면, https://github.com/note11g/flutter_naver_map/issues/91 을 한번 확인해주세요. 만약, 중복 이슈라면 Close 부탁드립니다. 감사합니다.
이미지 크기의 문제도 있지만 왼쪽의 까만 원이 이미지인데 안드로이드, ios 동일하게 적용했지만 우측 ios에는 검은 원이 안나온 것으로 보아 이미지 적용 자체에 문제가 있는 것으로 보입니다.
여전히 같은 증상이 나타나는지 확인 부탁드려도 될까요? 증상이 나타난다면, 재현 단계를 요청드립니다.
현재도 동일하게 증상 발생하고 있고 재현에 필요한 코드는 먼저 올려둔 코드가 전부입니다.
사용한 이미지 파일입니다.
확인 후, 코멘트드리겠습니다. 감사합니다.
@Kwon-TaeHyoung 안녕하세요. 답변이 늦어 죄송합니다. 재현에 성공하였습니다.
해당 현상은 다음과 같은 상황에서 발생합니다.
iOS : setLocationTrackingMode
이 실행될 때 마다, NLocationOverlay
의 icon
와 subIcon
이 기본 아이콘으로 변경 됨.
Android : setLocationTrackingMode
이 실행될 때 마다, NLocationOverlay
의 subIcon
만 기본 아이콘으로 변경 됨.
네이버 맵의 기본 LocationTrackingMode
를 사용할 경우, bearing
(방향각)에 따라 subIcon
으로 방향을 표시합니다.
이 때, 방향각을 표시하는 모드(NLocationTrackingMode.follow
, NLocationTrackingMode.face
)와 표시하지 않는 모드(NLocationTracking.noFollow
)를 조작할 경우, subIcon
에 대한 조작이 동시에 이루어져서 그런 것으로 유추됩니다.
이때, iOS의 경우 NLocationOverlay
의 icon
까지 변경되어 이런 현상이 발생한 것 같습니다.
수정이 가능할지는 시도해보지 않아 정확히는 알 수 없습니다만, 임시적으로 해결할 수 있는 방법은, 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'));
}
}
감사합니다. 진척이 있다면, 코멘트로 남기도록 하겠습니다.
#173 이 구현완료되면, 해당 현상도 수정될 것으로 보입니다. 해결되면 다시 코멘트 드리겠습니다. 감사합니다.