[React Native] react-native-naver-map
νκ·Έ: development · reactnative · react-native-naver-map · android · docs
1. react-native-naver-map
μ°Έμ‘°
μλ³Έ: react-native-naver-map
μ€μΉ
npm install react-native-nmap --save;
- React Native 0.60+
$ cd ios/ && pod install
- React Native <= 0.59
$ react-native link react-native-nmap
$ cd ios/ && pod install
iosμ κ²½μ° git-lfs μ€μΉκ° νμν©λλ€. μ°Έκ³
μλλ‘μ΄λ μΆκ° μ€μ
λ€μ΄λ² 맡 μλλ‘μ΄λ SDK λ¬Έμλ₯Ό λ°λΌ APIν€μ λ ν¬μ§ν°λ¦¬ κ²½λ‘λ₯Ό μΆκ°ν©λλ€
/android/build.gradle
νμΌμ μλμ κ°μ΄ λ ν¬μ§ν°λ¦¬λ₯Ό μΆκ°ν©λλ€
β οΈ Bintray μ§μ μ€λ¨μ μν΄ jfrogλ‘ μμ λμμ΅λλ€
allprojects {
repositories {
google()
jcenter()
// λ€μ΄λ² μ§λ μ μ₯μ
maven {
url '<https://naver.jfrog.io/artifactory/maven/>'
}
}
}
/android/app/src/AndroidManifest.xml
μ μλμ κ°μ΄ μΆκ°νκ³ λ°κΈλ°μ ν΄λΌμ΄μΈνΈ μμ΄λλ‘ λ°κΏμ€λλ€.
<manifest>
<application>
<meta-data
android:name="com.naver.maps.map.CLIENT_ID"
android:value="YOUR_CLIENT_ID_HERE" />
</application>
</manifest>
IOS μΆκ° μ€μ
λ€μ΄λ² 맡 IOS SDK λ¬Έμλ₯Ό λ°λΌ APIν€μ λ ν¬μ§ν°λ¦¬ κ²½λ‘λ₯Ό μΆκ°ν©λλ€.
info.plist
μ μλμ κ°μ΄ λ°κΈλ°μ ν΄λΌμ΄μΈνΈ μμ΄λλ₯Ό μΆκ°ν΄μ€λλ€.
!https://user-images.githubusercontent.com/49827449/66392740-b2fd5f00-ea0b-11e9-8c38-23e604b1009d.png
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "<http://www.apple.com/DTDs/PropertyList-1.0.dtd>">
<plist version="1.0">
<dict>
...
<key>NMFClientId</key>
<string>YOUR_CLIENT_ID_HERE</string>
...
<dict>
<plist>
μ»΄ν¬λνΈ
νμ μ€ν¬λ¦½νΈ νμ μ μκ° ν¬ν¨λμ΄ μμ΄ νμ μ€ν¬λ¦½νΈ μ¬μ©μ μΆμ²ν©λλ€.
κΈ°λ³Έ νμ
export interface Coord {
latitude: number;
longitude: number;
}
export interface Region extends Coord {
latitudeDelta: number;
longitudeDelta: number;
}
export interface Rect {
left?: number;
top?: number;
right?: number;
bottom?: number;
}
NaverMapView
center?: Coord & { zoom?: number; tilt?: number; bearing?: number; }
: μ€μ¬ μ’νλ₯Ό λνλ λλ€.Coord
λ μ’νλ₯Ό λνλ΄λ κ°μ²΄μ΄λ©°,zoom
μ νλ/μΆμ μμ€,tilt
λ μμΌμ κΈ°μΈκΈ°,bearing
μ μ§λμ νμ κ°λλ₯Ό λνλ λλ€.tilt?: number
: μμΌμ κΈ°μΈκΈ°λ₯Ό λνλ λλ€.bearing?: number
: μ§λμ νμ κ°λλ₯Ό λνλ λλ€.mapPadding?: Rect
: μ§λμ μ¬λ°±μ λνλ΄λ μμμ μ€μ ν©λλ€.logoMargin?: Rect
: λ‘κ³ μ μ¬λ°±μ λνλ΄λ μμμ μ€μ ν©λλ€.logoGravity?: Gravity
: λ‘κ³ μ μμΉλ₯Ό μ€μ ν©λλ€.onInitialized?: Function
: μ§λκ° μ΄κΈ°νλ ν νΈμΆλλ μ½λ°± ν¨μμ λλ€.onCameraChange?: (event: { latitude: number; longitude: number; zoom: number; contentsRegion: [Coord, Coord, Coord, Coord, Coord]; coveringRegion: [Coord, Coord, Coord, Coord, Coord]; }) => void
: μΉ΄λ©λΌμ μμΉκ° λ³κ²½λ λ νΈμΆλλ μ½λ°± ν¨μμ λλ€.onMapClick?: (event: { x: number; y: number; latitude: number; longitude: number; }) => void
: μ§λλ₯Ό ν΄λ¦νμ λ νΈμΆλλ μ½λ°± ν¨μμ λλ€.onTouch?: () => void
: μ§λ ν°μΉ μ΄λ²€νΈκ° λ°μνμ λ νΈμΆλλ μ½λ°± ν¨μμ λλ€.showsMyLocationButton?: boolean
: λ΄ μμΉ λ²νΌμ νμ μ¬λΆλ₯Ό μ€μ ν©λλ€.compass?: boolean
: λμΉ¨λ°μ νμ μ¬λΆλ₯Ό μ€μ ν©λλ€.scaleBar?: boolean
: μΆμ² λ§λμ νμ μ¬λΆλ₯Ό μ€μ ν©λλ€.zoomControl?: boolean
: μ€ μ»¨νΈλ‘€μ νμ μ¬λΆλ₯Ό μ€μ ν©λλ€.mapType?: MapType
: μ§λμ μ νμ μ€μ ν©λλ€.minZoomLevel?: number
: μ΅μ μ€ λ 벨μ μ€μ ν©λλ€.maxZoomLevel?: number
: μ΅λ μ€ λ 벨μ μ€μ ν©λλ€.buildingHeight?: number
: 건물μ λμ΄λ₯Ό μ€μ ν©λλ€.nightMode?: boolean
: μΌκ° λͺ¨λμ μ¬μ© μ¬λΆλ₯Ό μ€μ ν©λλ€.scrollGesturesEnabled?: boolean
: μ€ν¬λ‘€ μ μ€μ²μ μ¬μ© μ¬λΆλ₯Ό μ€μ ν©λλ€.zoomGesturesEnabled?: boolean
: μ€ μ μ€μ²μ μ¬μ© μ¬λΆλ₯Ό μ€μ ν©λλ€.tiltGesturesEnabled?: boolean
: μμΌ κΈ°μΈκΈ° μ μ€μ²μ μ¬μ© μ¬λΆλ₯Ό μ€μ ν©λλ€.rotateGesturesEnabled?: boolean
: νμ μ μ€μ²μ μ¬μ© μ¬λΆλ₯Ό μ€μ ν©λλ€.stopGesturesEnabled?: boolean
: μ€μ§ μ μ€μ²μ μ¬μ© μ¬λΆλ₯Ό μ€μ ν©λλ€.animateToCoordinate: (coord: Coord) => void
: νΉμ μ’νλ‘ μ λλ©μ΄μ μ μ¬μ©νμ¬ μ΄λν©λλ€.animateToTwoCoordinates: (c1: Coord, c2: Coord) => void
: λ κ°μ μ’ν μ¬μ΄λ‘ μ λλ©μ΄μ μ μ¬μ©νμ¬ μ΄λν©λλ€.animateToCoordinates: (coords: Coord[], bounds?: { top: number; bottom: number; left: number; right: number; }) => void
: μ¬λ¬ μ’νλ‘ μ λλ©μ΄μ μ μ¬μ©νμ¬ μ΄λν©λλ€.bounds
맀κ°λ³μλ₯Ό μ¬μ©νμ¬ μ§μ λ κ²½κ³ λ΄μμ μ΄λν©λλ€.animateToRegion: (region: Region) => void
: νΉμ μμμΌλ‘ μ λλ©μ΄μ μ μ¬μ©νμ¬ μ΄λν©λλ€.setLocationTrackingMode: (mode: number) => void
: μμΉ μΆμ λͺ¨λλ₯Ό μ€μ ν©λλ€.setLayerGroupEnabled: (group: LayerGroup, enabled: boolean) => void
: λ μ΄μ΄ κ·Έλ£Ήμ νμ±ν μ¬λΆλ₯Ό μ€μ ν©λλ€.showsMyLocationButton: (show: boolean) => void
: λ΄ μμΉ λ²νΌμ νμ μ¬λΆλ₯Ό μ€μ ν©λλ€.handleOnCameraChange: (event: React.SyntheticEvent<{}, { latitude: number; longitude: number; zoom: number; }>) => void
: μΉ΄λ©λΌ λ³κ²½ μ΄λ²€νΈλ₯Ό μ²λ¦¬νλ νΈλ€λ¬ ν¨μμ λλ€.handleOnMapClick: (event: React.SyntheticEvent<{}, { x: number; y: number; latitude: number; longitude: number; }>) => void
: μ§λ ν΄λ¦ μ΄λ²€νΈλ₯Ό μ²λ¦¬νλ νΈλ€λ¬ ν¨μμ λλ€.
interface NaverMapViewProps {
center?: Coord & {
zoom?: number;
tilt?: number;
bearing?: number;
};
tilt?: number;
bearing?: number;
mapPadding?: Rect;
logoMargin?: Rect;
logoGravity?: Gravity;
onInitialized?: Function;
onCameraChange?: (event: {
latitude: number;
longitude: number;
zoom: number;
contentsRegion: [Coord, Coord, Coord, Coord, Coord]; // <https://navermaps.github.io/android-map-sdk/reference/com/naver/maps/map/NaverMap.html#getContentRegion()>
coveringRegion: [Coord, Coord, Coord, Coord, Coord];
}) => void;
onMapClick?: (event: {
x: number;
y: number;
latitude: number;
longitude: number;
}) => void;
onTouch?: () => void;
showsMyLocationButton?: boolean;
compass?: boolean;
scaleBar?: boolean;
zoomControl?: boolean;
mapType?: MapType;
minZoomLevel?: number;
maxZoomLevel?: number;
buildingHeight?: number;
nightMode?: boolean;
scrollGesturesEnabled?: boolean;
zoomGesturesEnabled?: boolean;
tiltGesturesEnabled?: boolean;
rotateGesturesEnabled?: boolean;
stopGesturesEnabled?: boolean;
useTextureView?: boolean; // android only
}
/// component method
animateToCoordinate: (coord: Coord) => void;
animateToTwoCoordinates: (c1: Coord, c2: Coord) => void;
animateToCoordinates: (coords: Coord[], bounds?: {
top: number;
bottom: number;
left: number;
right: number;
}) => void;
animateToRegion: (region: Region) => void;
setLocationTrackingMode: (mode: number) => void;
setLayerGroupEnabled: (group: LayerGroup, enabled: boolean) => void;
showsMyLocationButton: (show: boolean) => void;
handleOnCameraChange: (event: React.SyntheticEvent<{}, {
latitude: number;
longitude: number;
zoom: number;
}>) => void;
handleOnMapClick: (event: React.SyntheticEvent<{}, {
x: number;
y: number;
latitude: number;
longitude: number;
}>) => void;
Marker
coordinate
(νμ): λ§μ»€μ μ’νλ₯Ό λνλ΄λCoord
νμ μ λλ€.anchor
: λ§μ»€ μ΄λ―Έμ§μ μ΅μ»€ μ’νλ₯Ό λνλ΄λ{ x: number, y: number }
νμ μ λλ€.pinColor
: λ§μ»€μ ν μμμ λνλ΄λ λ¬Έμμ΄μ λλ€.alpha
: λ§μ»€μ ν¬λͺ λλ₯Ό λνλ΄λ μ«μμ λλ€.rotation
: λ§μ»€μ νμ κ°λλ₯Ό λνλ΄λ μ«μμ λλ€.flat
: λ§μ»€ μ΄λ―Έμ§λ₯Ό νλ©΄μΌλ‘ νμν μ§ μ¬λΆλ₯Ό λνλ΄λ λΆμΈ κ°μ λλ€.image
: λ§μ»€λ‘ μ¬μ©ν μ΄λ―Έμ§λ₯Ό λνλ΄λImageSourcePropType
νμ μ λλ€.onClick
: λ§μ»€λ₯Ό ν΄λ¦νμ λ νΈμΆλ μ½λ°± ν¨μμ λλ€.width
: λ§μ»€ μ΄λ―Έμ§μ λλΉλ₯Ό λνλ΄λ μ«μμ λλ€.height
: λ§μ»€ μ΄λ―Έμ§μ λμ΄λ₯Ό λνλ΄λ μ«μμ λλ€.angle
: λ§μ»€ μ΄λ―Έμ§μ νμ κ°λλ₯Ό λνλ΄λ μ«μμ λλ€.hidden
: λ§μ»€λ₯Ό μ¨κΈΈμ§ μ¬λΆλ₯Ό λνλ΄λ λΆμΈ κ°μ λλ€.zIndex
: λ§μ»€μ μμ΄λ μμλ₯Ό λνλ΄λ μ«μμ λλ€.iconPerspectiveEnabled
: λ§μ»€ μμ΄μ½μ μκ·Ό ν¨κ³Ό μ¬μ© μ¬λΆλ₯Ό λνλ΄λ λΆμΈ κ°μ λλ€.isHideCollidedSymbols
: μΆ©λνλ μ¬λ³Όμ μ¨κΈΈμ§ μ¬λΆλ₯Ό λνλ΄λ λΆμΈ κ°μ λλ€.isHideCollidedMarkers
: μΆ©λνλ λ§μ»€λ₯Ό μ¨κΈΈμ§ μ¬λΆλ₯Ό λνλ΄λ λΆμΈ κ°μ λλ€.isHideCollidedCaptions
: μΆ©λνλ μΊ‘μ μ μ¨κΈΈμ§ μ¬λΆλ₯Ό λνλ΄λ λΆμΈ κ°μ λλ€.isForceShowIcon
: μμ΄μ½μ κ°μ λ‘ νμν μ§ μ¬λΆλ₯Ό λνλ΄λ λΆμΈ κ°μ λλ€.caption
: λ§μ»€μ νμλ μΊ‘μ μ κ΄λ ¨λ μμ±λ€μ μ μνλ κ°μ²΄μ λλ€. μμ±μ λ€μκ³Ό κ°μ΅λλ€:text
: μΊ‘μ μ νμλ ν μ€νΈμ λλ€.align
: μΊ‘μ μ μ λ ¬ λ°©λ²μ λνλ΄λAlign
νμ μ λλ€.textSize
: μΊ‘μ μ ν μ€νΈ ν¬κΈ°λ₯Ό λνλ΄λ μ«μμ λλ€.color
: μΊ‘μ μ ν μ€νΈ μμμ λνλ΄λ μ«μμ λλ€.haloColor
: μΊ‘μ μ ν μ€νΈ μ£Όλ³μ νμλ ν¨κ³Ό μμμ λνλ΄λ λ¬Έμμ΄μ λλ€.offset
: μΊ‘μ μ μμΉλ₯Ό μ‘°μ νκΈ° μν μ€νμ κ°μ λνλ΄λ μ«μμ λλ€.requestedWidth
: μΊ‘μ μ μμ²λ λλΉλ₯Ό λνλ΄λ μ«μμ λλ€.minZoom
: μΊ‘μ μ νμν μ΅μ μ€ λ 벨μ λνλ΄λ μ«μμ λλ€.maxZoom
: μΊ‘μ μ νμν μ΅λ μ€ λ 벨μ λνλ΄λ μ«μμ λλ€.subCaption
: λ§μ»€μ νμλ 보쑰 μΊ‘μ μ κ΄λ ¨λ μμ±λ€μ μ μνλ κ°μ²΄μ λλ€. μμ±μ λ€μκ³Ό κ°μ΅λλ€:text
: 보쑰 μΊ‘μ μ νμλ ν μ€νΈμ λλ€.textSize
: 보쑰 μΊ‘μ μ ν μ€νΈ ν¬κΈ°λ₯Ό λνλ΄λ μ«μμ λλ€.color
: 보쑰 μΊ‘μ μ ν μ€νΈ μμμ λνλ΄λ μ«μμ λλ€.haloColor
: 보쑰 μΊ‘μ μ ν μ€νΈ μ£Όλ³μ νμλ ν¨κ³Ό μμμ λνλ΄λ μ«μμ λλ€.requestedWidth
: 보쑰 μΊ‘μ μ μμ²λ λλΉλ₯Ό λνλ΄λ μ«μμ λλ€.minZoom
: 보쑰 μΊ‘μ μ νμν μ΅μ μ€ λ 벨μ λνλ΄λ μ«μμ λλ€.maxZoom
: 보쑰 μΊ‘μ μ νμν μ΅λ μ€ λ 벨μ λνλ΄λ μ«μμ λλ€
interface MarkerProps {
coordinate: Coord;
anchor?: { x: number; y: number };
pinColor?: string;
alpha?: number;
rotation?: number;
flat?: boolean;
image?: ImageSourcePropType;
onClick?: () => void;
width?: number;
height?: number;
angle?: number;
hidden?: boolean;
zIndex?: number;
iconPerspectiveEnabled?: boolean;
isHideCollidedSymbols?: boolean;
isHideCollidedMarkers?: boolean;
isHideCollidedCaptions?: boolean;
isForceShowIcon?: boolean;
caption?: {
text?: string;
align?: Align;
textSize?: number;
color?: string;
haloColor?: string;
offset?: number;
requestedWidth?: number;
minZoom?: number;
maxZoom?: number;
};
subCaption?: {
text?: string;
textSize?: number;
color?: number;
haloColor?: number;
requestedWidth?: number;
minZoom?: number;
maxZoom?: number;
};
}
μλλ‘μ΄λ νλ«νΌμμ λ§μ»€λ΄ 컀μ€ν λ·°λ₯Ό μ§μν©λλ€. 0.0.57
<Marker coordinate={P5} width={96} height={96}> <View style=> <View style= > <Image source={require("./marker.png")} style= fadeDuration={0} /> <Text>Image</Text> </View> <ImageBackground source={require("./marker.png")} style= > <Text>image background</Text> </ImageBackground> </View> </Marker>
Polyline
coordinates: Coord[]
: μ μ μ’ν λ°°μ΄μ λνλ λλ€.strokeWidth?: number
: μ μ λλΉλ₯Ό μ€μ ν©λλ€. (μ νμ )strokeColor?: string
: μ μ μμμ μ€μ ν©λλ€. (μ νμ )onClick?: () => void
: ν΄λ¦ μ΄λ²€νΈ μ²λ¦¬λ₯Ό μν μ½λ°± ν¨μλ₯Ό μ€μ ν©λλ€. (μ νμ )
interface PolylineProps {
coordinates: Coord[];
strokeWidth?: number;
strokeColor?: string;
onClick?: () => void;
}
Path
coordinates: Coord[]
: κ²½λ‘μ μ’ν λ°°μ΄μ λνλ λλ€.width?: number
: κ²½λ‘μ λλΉλ₯Ό μ€μ ν©λλ€. (μ νμ )color?: string
: κ²½λ‘μ μμμ μ€μ ν©λλ€. (μ νμ )outlineWidth?: number
: κ²½λ‘μ μΈκ³½μ λλΉλ₯Ό μ€μ ν©λλ€. (μ νμ )passedColor?: string
: κ²½λ‘μ ν΅κ³Όλ λΆλΆμ μμμ μ€μ ν©λλ€. (μ νμ )outlineColor?: string
: κ²½λ‘μ μΈκ³½μ μμμ μ€μ ν©λλ€. (μ νμ )passedOutlineColor?: string
: κ²½λ‘μ ν΅κ³Όλ λΆλΆμ μΈκ³½μ μμμ μ€μ ν©λλ€. (μ νμ )pattern?: ImageSourcePropType
: κ²½λ‘μ μ¬μ©ν ν¨ν΄ μ΄λ―Έμ§λ₯Ό μ€μ ν©λλ€. (μ νμ )patternInterval?: number
: ν¨ν΄ μ΄λ―Έμ§μ κ°κ²©μ μ€μ ν©λλ€. (μ νμ )onClick?: () => void
: ν΄λ¦ μ΄λ²€νΈ μ²λ¦¬λ₯Ό μν μ½λ°± ν¨μλ₯Ό μ€μ ν©λλ€. (μ νμ )
interface PathProps {
coordinates: Coord[];
width?: number;
color?: string;
outlineWidth?: number;
passedColor?: string;
outlineColor?: string;
passedOutlineColor?: string;
pattern?: ImageSourcePropType;
patternInterval?: number;
onClick?: () => void;
}
Circle
coordinate: Coord[]
: μμ μ€μ¬ μ’νλ₯Ό λνλ΄λ λ°°μ΄μ λλ€.radius?: number
: μμ λ°μ§λ¦μ μ€μ ν©λλ€. (μ νμ )color?: string
: μμ μμμ μ€μ ν©λλ€. (μ νμ )outlineWidth?: number
: μμ μΈκ³½μ λλΉλ₯Ό μ€μ ν©λλ€. (μ νμ )outlineColor?: string
: μμ μΈκ³½μ μμμ μ€μ ν©λλ€. (μ νμ )zIndex?: number
: μμ Z μΈλ±μ€λ₯Ό μ€μ ν©λλ€. (μ νμ )onClick?: () => void
: ν΄λ¦ μ΄λ²€νΈ μ²λ¦¬λ₯Ό μν μ½λ°± ν¨μλ₯Ό μ€μ ν©λλ€. (μ νμ )
export interface CircleProps {
coordinate: Coord[];
radius?: number;
color?: string;
outlineWidth?: number;
outlineColor?: string;
zIndex?: number;
onClick?: () => void;
}
Polygon
coordinate: Coord[]
: λ€κ°νμ μ’νλ₯Ό λνλ΄λ λ°°μ΄μ λλ€.outlineWidth?: number
: λ€κ°νμ μΈκ³½μ λλΉλ₯Ό μ€μ ν©λλ€. (μ νμ )outlineColor?: string
: λ€κ°νμ μΈκ³½μ μμμ μ€μ ν©λλ€. (μ νμ )color?: string
: λ€κ°νμ μμμ μ€μ ν©λλ€. (μ νμ )holes?: Coord[][]
: λ€κ°ν λ΄λΆμ μλ ꡬλ©μ μ’νλ₯Ό λνλ΄λ λ°°μ΄μ λλ€. (μ νμ )onClick?: () => void
: ν΄λ¦ μ΄λ²€νΈ μ²λ¦¬λ₯Ό μν μ½λ°± ν¨μλ₯Ό μ€μ ν©λλ€. (μ νμ )
export interface PolygonProps {
coordinate: Coord[];
outlineWidth?: number;
outlineColor?: string;
color?: string;
holes?: Coord[][];
onClick?: () => void;
}
LayerGroup
LAYER_GROUP_BUILDING = "building"
: 건물 λ μ΄μ΄ κ·Έλ£Ήμ λνλ΄λ μμμ λλ€.LAYER_GROUP_TRANSIT = "transit"
: λμ€κ΅ν΅ λ μ΄μ΄ κ·Έλ£Ήμ λνλ΄λ μμμ λλ€.LAYER_GROUP_BICYCLE = "bike"
: μμ κ±° λ μ΄μ΄ κ·Έλ£Ήμ λνλ΄λ μμμ λλ€.LAYER_GROUP_TRAFFIC = "ctt"
: κ΅ν΅ μ 보 λ μ΄μ΄ κ·Έλ£Ήμ λνλ΄λ μμμ λλ€.LAYER_GROUP_CADASTRAL = "landparcel"
: ν μ§ λ§€ν λ μ΄μ΄ κ·Έλ£Ήμ λνλ΄λ μμμ λλ€.LAYER_GROUP_MOUNTAIN = "mountain"
: μ° λ μ΄μ΄ κ·Έλ£Ήμ λνλ΄λ μμμ λλ€.
export declare enum LayerGroup {
LAYER_GROUP_BUILDING = "building",
LAYER_GROUP_TRANSIT = "transit",
LAYER_GROUP_BICYCLE = "bike",
LAYER_GROUP_TRAFFIC = "ctt",
LAYER_GROUP_CADASTRAL = "landparcel",
LAYER_GROUP_MOUNTAIN = "mountain",
}
μ°Έκ³
- react-navigationμ μ€ν μ€ν¬λ¦° μ¬μ©μ μλλ‘μ΄λμμ λ§΅λ·°κ° κ²Ήμ³ λ³΄μ΄λ νμμ΄ μμ κ²½μ°
useTextureView
μ΅μ μ μΆκ°ν΄ μ£ΌμΈμ. - μλλ‘μ΄λμμ
ScrollView
λ΄λΆμ μΆκ°ν κ²½μ°scrollGesturesEnabled
λ₯Ό μ΄μ©ν΄ 맡 μ€ν¬λ‘€μ μ μ΄ν μ μμ΅λλ€. - λ§μ»€ ν΄λ¬μ€ν°λ§μ νμν μ§λ 컨ν
μΈ μμμ
onCameraChange
μ΄λ²€νΈλ₯Ό ν΅ν΄ μ»μ μ μμ΅λλ€.