poiOption1.addText로 일본어, 중국어 텍스트를 추가했는데 글자가 깨져서 나옵니다. 폰트 문제인가 생각해서
TextStyle에 font를 이것저것 넣어보았으나 모두 적용이 되지 않는거같네요.
무슨 이유일까요? 해결방법도 알려주시면 감사하겠습니다.
처음에는 폰트를 지정하지 않았습니다. 별도로 지정하지 않는 경우 엔진의 기본 폰트인 Noto Sans KR Medium을 사용 이라고 API 사용 가이드에 적혀있더라고요.
근데 깨져서 Arial, Hiragino 를 넣어보았으나 이슈가 해결되지 않았습니다.
func createPoiStyle(styleID: String, currentLocation: Bool = false, placeType: PlaceType?) {
let view = mapController?.getView("mapview") as! KakaoMap
let manager = view.getLabelManager()
var iconImage = UIImage(named: "map_ico_marker")
manager.removePoiStyle(styleID)
if let placeType = placeType {
switch placeType {
case .restaurant:
iconImage = UIImage(systemName: "fork.knife.circle.fill")?.withTintColor(.systemOrange)
case .shopping:
iconImage = UIImage(systemName: "handbag.circle.fill")?.withTintColor(.systemPurple)
case .touristAttraction:
iconImage = UIImage(systemName: "flag.circle.fill")?.withTintColor(.systemRed)
case .accommodation:
iconImage = UIImage(systemName: "bed.double.circle.fill")?.withTintColor(.systemBlue)
}
}
// PoiBadge는 스타일에도 추가될 수 있다. 이렇게 추가된 Badge는 해당 스타일이 적용될 때 함께 그려진다.
let iconStyle1 = PoiIconStyle(symbol: iconImage,
anchorPoint: CGPoint(x: 0, y: 0),
transition: PoiTransition(entrance: .alpha, exit: .alpha)
/*badges: [noti1]*/)
let textColor = TextStyle(fontSize: 20, fontColor: UIColor.black, strokeThickness: 2, strokeColor: UIColor.white)
let textStyle1 = PoiTextStyle(textLineStyles: [
PoiTextLineStyle(textStyle: textColor)
])
// 5~11, 12~21 에 표출될 스타일을 지정한다.
let poiStyle = PoiStyle(styleID: styleID, styles: [
PerLevelPoiStyle(iconStyle: iconStyle1, textStyle: textStyle1, level: 5)
])
manager.addPoiStyle(poiStyle)
}
func createPois(layerID: String, styleID: String, poiID: String, mapPoints: [MapPoint], titles: [String], ids: [String]) {
let view = mapController?.getView("mapview") as! KakaoMap
let manager = view.getLabelManager()
let layer = manager.getLabelLayer(layerID: layerID)
layer?.visible = true
for (idx, mapPoint) in mapPoints.enumerated() {
let poiOption1 = PoiOptions(styleID: styleID, poiID: ids[idx])
poiOption1.rank = 0
poiOption1.clickable = true
poiOption1.addText(PoiText(text: titles[idx], styleIndex: 0))
let poi = layer?.addPoi(option: poiOption1, at: mapPoint)
if let poi = poi {
let _ = poi.addPoiTappedEventHandler(target: self, handler: HomeViewController.poiTappedHandler)
}
}
layer?.showAllPois()
}
코드는 이렇습니다. titles[idx]에 일어 혹은 중국어가 들어오게 됩니다. print로 PoiText.text를 찍어보았을때는 깨지지 않고 출력이 되는걸 확인하였습니다
폰트 파일을 사용한게 아니라 iOS 기본 제공되는 시스템 폰트를 넣으려 시도했다는 뜻입니다.
TextStyle(fontSize: 20, fontColor: UIColor.black, strokeThickness: 2, strokeColor: UIColor.white, font: “arial”) 이런 식으로 시도했습니다. 그러면 폰트 파일을 직접 프로젝트에 추가한 후에 추가한 폰트 이름을 font: “폰트 이름” 이렇게 사용해야하는건가요?
@이인호4096 기본 내장된 폰트 외에 다른 폰트를 사용하시려면
mapController?.addFont(fontName: <#T##String#>, fontData: <#T##Data#>)
로 폰트를 먼저 추가해 주셔야 하며, 이를 위해서는 폰트의 바이너리를 Data 타입으로 읽어와야 합니다.
이렇게 추가한 후에 추가한 이름으로 지정하시면 해당 폰트를 사용하실 수 있습니다.
기본 내장 폰트에는 영문/한글/숫자/일부 특수문자 외에는 들어있지 않습니다. 폰트에 들어있지 않은 문자를 그리려고 할 경우, 위 스크린샷처럼 보이게 됩니다.
1개의 좋아요
감사합니다. 한번 시도해 보겠습니다