[KakaoMapsSDK v.2 for iOS] GuiImage, PoiIconStyle의 건

안녕하세요

다름이 아니라 GuiImage와 PoiIconStyle에 대해서 몇 가지 질문이 있습니다.
먼저
GuiImage

  1. imageSize로 이미지의 사이즈를 조정할 수 있다고 되어있는데 여러 값을 부여해도 변화가없음 원인이 뭘까요
  2. imageStretch를 설정하지않으면 에러가 발생하는데 imageStretch는 필수 설정인가요?
  3. uiview를 UIGraphicsImageRenderer로 image로 변환되어진 UIimage를 image를 설정시 이미지가 확대되어지는거 같은데 원인이 뭘까요

PoiIconStyle

  1. [GuiImage]의 질문 3번과 같은 질문입니다.

감사합니다

[FAQ] 지도/로컬 API 문의 전 꼭 읽어 주세요.
https://devtalk.kakao.com/t/faq-api/125610

@cgh2424

  1. 구체적으로 어떤식으로 사용하셨는데 안되는지 확인이 필요합니다.
  2. imageStretch는 필수 설정이 아닙니다.
  3. SDK로 전달되는 모든 이미지 데이터는 엔진 내부에서 렌더링 될 때, 정해진 scale factor에 따라 확대/축소 되어 렌더링됩니다.

죄송합니다 부연 설명이 부족했습니다.

  1. 구체적으로 어떤식으로 사용하셨는데 안되는지 확인이 필요합니다.
  • 아래와 같은 createInfoWindowTest 함수 로직에서 ‘bodyImage.imageSize = GuiSize(width: 58, height: 30)’ GuiImage의 사이즈를 변경하는 로직이 있음에도 불구하고 사이즈 변화는 없습니다
  1. imageStretch는 필수 설정이 아닙니다.
  • 아래와 같은 createInfoWindowTest 함수 로직에서 imageStretch를 주석 처리 할경우 ‘[E][K3fCore] unsupported image format.’ 라느 로그와 함께 ‘EXC_BAD_ACCESS’ 에러가 발생합니다 원인이 무엇인지 알 수 있을까요
  1. SDK로 전달되는 모든 이미지 데이터는 엔진 내부에서 렌더링 될 때, 정해진 scale factor에 따라 확대/축소 되어 렌더링됩니다.
  • 이미지 스케일이나 이미지 사이즈 조정은 불가한가요 혹은 poi, gui를 따로 커스텀 하는방법이 있을까요 처음에는 gui를 쓰려고 하였으나 외부 텍스트 폰트가 적용이 안되어 고난을 겪고있습니다.ㅠㅠ poi, gui에 uiview를 적용하는 방법은 없을까요
func createInfoWindowTest() -> InfoWindow {
        let view = mapController?.getView("mapview") as! KakaoMap
        let infoWindow = InfoWindow("infoWindow");
        // bodyImage
        let bodyImage = GuiImage("bgImage")
        bodyImage.image = UIImage(named: "white_black_round10.png")
        bodyImage.imageSize = GuiSize(width: 58, height: 30)

//        bodyImage.imageStretch = GuiEdgeInsets(top: 1, left: 1, bottom: 1, right: 1)
        
        // tailImage
        let tailImage = GuiImage("tailImage")
        tailImage.image = UIImage(named: "white_black.png")

        infoWindow.body = bodyImage
        infoWindow.tail = tailImage
        
        infoWindow.bodyOffset.y = -10
        
        infoWindow.position = MapPoint(longitude: 126.978365, latitude: 37.566691)
        infoWindow.positionOffset.y = 65

        let infoWindowLayer = view.getGuiManager().infoWindowLayer
        infoWindowLayer.addInfoWindow(infoWindow)
        infoWindow.hide()
        return infoWindow
    }

@cgh2424
올려주신 코드가 정상적으로 수행되고 있는 것이 맞나요? 저 코드대로 테스트 했을 때 정상적으로 의도한 대로 수행되고 있습니다.
부연 설명을 드리면

  1. 일반적으로 InfoWindow의 body 에 지정하는 Image는 child의 크기대로 resize 되는 걸 의도하기 때문에 size를 지정하면 안됩니다. size를 지정하지 않아야 GUI 연산과정에서 child 크기가 계산되어 bodyImage의 크기가 결정됩니다.
  2. 해당에러는 현재 이슈와 무관해 보입니다. 익셉션이 발생하는 원인은 좀 더 구체적인 원인을 확인해 보셔야 할 것 같습니다. 올려주신 코드에서 bad access 익셉션은 발생하지 않습니다.
  3. 의도하신 결과를 정확히 구현하려면 scale 2.0 을 기준으로 해서 원하는 크기의 이미지를 넣으시면 됩니다.
    UIView를 SDK를 통해 직접 적용하는 방법은 없습니다. UIView를 렌더링한 결과를 이미지로 생성해서 넣으실 수 있으나 user interaction 이 필요하면 그 부분은 따로 처리하셔야 합니다.
  4. 외부 폰트는 추후 지원 예정입니다.
1개의 좋아요

답변 감사합니다!

여러번 질문드려서 죄송합니다 아래의 답변에 대한 질문입니다.

  1. 의도하신 결과를 정확히 구현하려면 scale 2.0 을 기준으로 해서 원하는 크기의 이미지를 넣으시면 됩니다.
    UIView를 SDK를 통해 직접 적용하는 방법은 없습니다. UIView를 렌더링한 결과를 이미지로 생성해서 넣으실 수 있으나 user interaction 이 필요하면 그 부분은 따로 처리하셔야 합니다.
  • uiview를 scale 2.0를 기준으로 이미지 변환시에 원하는 사이즈가 나왔지만 문제는 디바이스가 scale 3.0기준으로 되어있는 경우 이미지의 품질이 많이 떨어지게 되는데 scale 3.0 해상도에서 사이즈만 scale 2.0으로 변환하는 좋은 방법이 있을까요?|

참고로 리사이즈 및 이미지 변환은 UIGraphicsImageRenderer을 사용했습니다.

매번 빠른 답변 감사합니다!

@cgh2424
안타깝게도 말씀하신 이슈에 대한 KakaoMapsSDK 를 통한 해결 방안은 딱히 없을 것 같습니다. SDK 에서는 일관성있는 결과물 제공 및 효율성을 위해 일괄적으로 scaling 작업을 하도록 구성되어 있습니다. UIView 상의 텍스트 같이 리사이징 과정에서의 품질 저하가 이슈가 되는 경우 UIView를 SDK를 통해 그리기 보다 적당한 위치를 계산하여 UIView를 지도 뷰 위에 직접 그리는 방법을 고려하시는 것이 적당할 것 같습니다.

1개의 좋아요