رویداد
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
پلتفرم را انتخاب کنید: Android iOS JavaScript با استفاده از Maps SDK برای iOS، میتوانید به رویدادهایی که روی نقشه رخ میدهند گوش دهید، مانند رویدادهای تغییر دوربین یا رویدادهای ضربه زدن نشانگر.
مقدمه
برای گوش دادن به رویدادها، باید پروتکل GMSMapViewDelegate
پیاده سازی کنید. به طور معمول، شما این پروتکل را بر روی view controller که نقشه را نمایش می دهد پیاده سازی می کنید. در زیر یک مثال آورده شده است:
سویفت
import GoogleMaps
class Events: UIViewController, GMSMapViewDelegate {
// ...
}
هدف-C
@import GoogleMaps;
@interface Events : UIViewController <GMSMapViewDelegate>
@end
وقتی GMSMapView
ایجاد شد، میتوانید نماینده آن را روی کنترلکننده view خود تنظیم کنید. GMSMapViewDelegate
فقط روش های اختیاری را ارائه می دهد. برای گوش دادن به هر رویداد خاص، باید روش مربوطه را پیاده سازی کنید.
سویفت
override func loadView() {
super.loadView()
let camera = GMSCameraPosition.camera(
withLatitude: 1.285,
longitude: 103.848,
zoom: 12
)
let mapView = GMSMapView.map(withFrame: .zero, camera: camera)
mapView.delegate = self
self.view = mapView
}
// MARK: GMSMapViewDelegate
func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {
print("You tapped at \(coordinate.latitude), \(coordinate.longitude)")
}
هدف-C
- (void)loadView {
[super loadView];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:1.285
longitude:103.848
zoom:12];
GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView.delegate = self;
self.view = mapView;
}
#pragma mark - GMSMapViewDelegate
- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate {
NSLog(@"You tapped at %f,%f", coordinate.latitude, coordinate.longitude);
}
موقعیت دوربین
با استفاده از GMSMapViewDelegate
، میتوانید به تغییرات موقعیت دوربین مورد استفاده برای ارائه نقشه گوش دهید. سه رویداد متمایز وجود دارد.
mapView:willMove:
نشان می دهد که موقعیت دوربین در شرف تغییر است. اگر آرگومان gesture
روی YES
تنظیم شده باشد، این به دلیل انجام یک حرکت طبیعی در GMSMapView
توسط کاربر است، مانند حرکت حرکتی یا شیب. در غیر این صورت، NO
نشان می دهد که این بخشی از یک تغییر برنامه ای است - برای مثال، از طریق روش هایی مانند animateToCameraPosition:
یا به روز رسانی مستقیم لایه نقشه. اگر کاربر روی دکمههای موقعیت مکانی من یا قطبنما ضربه زده باشد، این ممکن است NO
باشد، که انیمیشنهایی تولید میکنند که دوربین را تغییر میدهند.
این روش ممکن است چندین بار قبل از فراخوانی mapView:idleAtCameraPosition:
فراخوانی شود، اگرچه این معمولاً فقط در صورتی اتفاق میافتد که انیمیشنها و ژستها همزمان اتفاق بیفتند - برای مثال یک حرکت هر انیمیشن فعلی را لغو میکند و برای بار دوم mapView:willMove:
را فراخوانی میکند.
mapView:didChangeCameraPosition:
به طور مکرر در طول یک حرکت یا انیمیشن، همیشه پس از تماس با mapView:willMove:
می شود. از موقعیت دوربین میانی عبور می کند.
در نهایت، mapView:idleAtCameraPosition:
هنگامی که موقعیت دوربین در GMSMapView
غیرفعال شود، فراخوانی می شود و موقعیت دوربین مربوطه را مشخص می کند. در این مرحله، تمام انیمیشن ها و ژست ها متوقف شده اند.
برنامهها میتوانند از این رویداد برای راهاندازی بهروزرسانی نشانگرها یا محتوای دیگری که در GMSMapView
نمایش داده میشوند، بهجای بارگیری مجدد محتوا در هر تغییر دوربین استفاده کنند.
به عنوان مثال، یک برنامه کاربردی می تواند GMSMapView
را در حال حرکت پاک کند و سپس موقعیتی را که دوربین روی آن قرار می گیرد معکوس کند.
سویفت
let geocoder = GMSGeocoder()
func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
mapView.clear()
}
func mapView(_ mapView: GMSMapView, idleAt cameraPosition: GMSCameraPosition) {
geocoder.reverseGeocodeCoordinate(cameraPosition.target) { (response, error) in
guard error == nil else {
return
}
if let result = response?.firstResult() {
let marker = GMSMarker()
marker.position = cameraPosition.target
marker.title = result.lines?[0]
marker.snippet = result.lines?[1]
marker.map = mapView
}
}
}
هدف-C
GMSGeocoder *geocoder;
- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture {
[mapView clear];
}
- (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)cameraPosition {
id handler = ^(GMSReverseGeocodeResponse *response, NSError *error) {
if (error != nil) {
return;
}
GMSReverseGeocodeResult *result = response.firstResult;
GMSMarker *marker = [GMSMarker markerWithPosition:cameraPosition.target];
marker.title = result.lines[0];
marker.snippet = result.lines[1];
marker.map = mapView;
};
[geocoder reverseGeocodeCoordinate:cameraPosition.target completionHandler:handler];
}
رویدادهای مربوط به مشاغل و سایر نقاط مورد علاقه
به طور پیش فرض، نقاط مورد علاقه (POI) به همراه نمادهای مربوطه روی نقشه پایه ظاهر می شوند. POI ها شامل پارک ها، مدارس، ساختمان های دولتی و موارد دیگر و همچنین POI های تجاری مانند فروشگاه ها، رستوران ها و هتل ها می شود.
می توانید به رویدادهای کلیک در یک POI پاسخ دهید. راهنمای کسب و کارها و سایر نقاط مورد علاقه را ببینید.
رویدادهای دیگر
برای آشنایی با فهرست کامل روش ها در GMSMapViewDelegate
، به راهنمای مرجع مراجعه کنید.
جز در مواردی که غیر از این ذکر شده باشد،محتوای این صفحه تحت مجوز Creative Commons Attribution 4.0 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است.
تاریخ آخرین بهروزرسانی 2025-08-29 بهوقت ساعت هماهنگ جهانی.
[null,null,["تاریخ آخرین بهروزرسانی 2025-08-29 بهوقت ساعت هماهنگ جهانی."],[[["\u003cp\u003eThe Maps SDK for iOS allows you to listen to events like camera changes and marker taps by implementing the \u003ccode\u003eGMSMapViewDelegate\u003c/code\u003e protocol.\u003c/p\u003e\n"],["\u003cp\u003eYou can track camera position changes using events such as \u003ccode\u003ewillMove\u003c/code\u003e, \u003ccode\u003edidChangeCameraPosition\u003c/code\u003e, and \u003ccode\u003eidleAtCameraPosition\u003c/code\u003e to update map content dynamically.\u003c/p\u003e\n"],["\u003cp\u003eRespond to clicks on businesses and points of interest (POIs) using dedicated event handling mechanisms.\u003c/p\u003e\n"],["\u003cp\u003eRefer to the \u003ccode\u003eGMSMapViewDelegate\u003c/code\u003e reference for a comprehensive list of available events and methods.\u003c/p\u003e\n"]]],["To listen to events on the Maps SDK for iOS, implement the `GMSMapViewDelegate` protocol in your view controller. Set the `GMSMapView`'s delegate to your view controller during creation. Implement relevant methods from the `GMSMapViewDelegate` to listen to specific events. For camera position changes, use `mapView:willMove:`, `mapView:didChangeCameraPosition:`, and `mapView:idleAtCameraPosition:`. The example provided demonstrates how to clear the map on move and reverse geocode the final camera position.\n"],null,["\u003cbr /\u003e\n\nSelect platform: [Android](/maps/documentation/android-sdk/events \"View this page for the Android platform docs.\") [iOS](/maps/documentation/ios-sdk/events \"View this page for the iOS platform docs.\") [JavaScript](/maps/documentation/javascript/events \"View this page for the JavaScript platform docs.\")\n\n\u003cbr /\u003e\n\nUsing the Maps SDK for iOS, you can listen to events that occur on the\nmap, such as camera change events or marker tap events.\n\nIntroduction\n\nTo listen to events, you must implement the\n[`GMSMapViewDelegate`](/maps/documentation/ios-sdk/reference/objc/Protocols/GMSMapViewDelegate) protocol. Typically, you implement\nthis protocol on the view controller that displays the map. Below is an example:\n\n\nSwift \n\n```swift\nimport GoogleMaps\n\nclass Events: UIViewController, GMSMapViewDelegate {\n // ...\n}\n \n```\n\nObjective-C \n\n```objective-c\n@import GoogleMaps;\n\n@interface Events : UIViewController \u003cGMSMapViewDelegate\u003e\n\n@end\n \n```\n\n\u003cbr /\u003e\n\nWhen the `GMSMapView` is created, you can set its delegate to your view\ncontroller. The `GMSMapViewDelegate` provides only optional methods. To listen\nto any particular event, you must implement the relevant method.\n\n\nSwift \n\n```swift\noverride func loadView() {\n super.loadView()\n let camera = GMSCameraPosition.camera(\n withLatitude: 1.285,\n longitude: 103.848,\n zoom: 12\n )\n let mapView = GMSMapView.map(withFrame: .zero, camera: camera)\n mapView.delegate = self\n self.view = mapView\n}\n\n// MARK: GMSMapViewDelegate\n\nfunc mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {\n print(\"You tapped at \\(coordinate.latitude), \\(coordinate.longitude)\")\n}\n \n```\n\nObjective-C \n\n```objective-c\n- (void)loadView {\n [super loadView];\n GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:1.285\n longitude:103.848\n zoom:12];\n GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];\n mapView.delegate = self;\n self.view = mapView;\n}\n\n#pragma mark - GMSMapViewDelegate\n\n- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate {\n NSLog(@\"You tapped at %f,%f\", coordinate.latitude, coordinate.longitude);\n}\n \n```\n\n\u003cbr /\u003e\n\nCamera position\n\nUsing the `GMSMapViewDelegate`, you can listen to changes to the camera position\nused to render the map. There are three distinct events.\n\n- `mapView:willMove:` indicates that the camera position is about to change.\n If the `gesture` argument is set to `YES`, this is due to a user performing\n a natural gesture on the `GMSMapView`, such as a pan or tilt.\n Otherwise, `NO` indicates that this is part of a programmatic change -\n for example, via methods such as `animateToCameraPosition:` or updating the\n map's layer directly. This may also be `NO` if a user has tapped on the My\n Location or compass buttons, which generate animations that change the\n camera.\n\n This method may be called several times before\n `mapView:idleAtCameraPosition:` is invoked, although this typically\n happens only if animations and gestures occur at the same time - a gesture\n will cancel any current animation, for instance, and will call\n `mapView:willMove:` a second time.\n- `mapView:didChangeCameraPosition:` is called repeatedly during a gesture or\n animation, always after a call to `mapView:willMove:`. It is passed the\n intermediate camera position.\n\n- Finally, `mapView:idleAtCameraPosition:` is invoked once the camera position\n on `GMSMapView` becomes idle, and specifies the relevant camera position.\n At this point, all animations and gestures have stopped.\n\n Applications can use this event to trigger a refresh of markers or other\n content being displayed on the `GMSMapView`, rather than, for example,\n reloading the content on every camera change.\n\nFor example, an application can clear the `GMSMapView` on move, and then\nreverse geocode the position the camera comes to rest on.\n\n\nSwift \n\n```swift\nlet geocoder = GMSGeocoder()\n\nfunc mapView(_ mapView: GMSMapView, willMove gesture: Bool) {\n mapView.clear()\n}\n\nfunc mapView(_ mapView: GMSMapView, idleAt cameraPosition: GMSCameraPosition) {\n geocoder.reverseGeocodeCoordinate(cameraPosition.target) { (response, error) in\n guard error == nil else {\n return\n }\n\n if let result = response?.firstResult() {\n let marker = GMSMarker()\n marker.position = cameraPosition.target\n marker.title = result.lines?[0]\n marker.snippet = result.lines?[1]\n marker.map = mapView\n }\n }\n }\n \n```\n\nObjective-C \n\n```objective-c\nGMSGeocoder *geocoder;\n\n- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture {\n [mapView clear];\n}\n\n- (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)cameraPosition {\n id handler = ^(GMSReverseGeocodeResponse *response, NSError *error) {\n if (error != nil) {\n return;\n }\n GMSReverseGeocodeResult *result = response.firstResult;\n GMSMarker *marker = [GMSMarker markerWithPosition:cameraPosition.target];\n marker.title = result.lines[0];\n marker.snippet = result.lines[1];\n marker.map = mapView;\n };\n [geocoder reverseGeocodeCoordinate:cameraPosition.target completionHandler:handler];\n}\n \n```\n\n\u003cbr /\u003e\n\nEvents on businesses and other points of interest\n\nBy default, points of interest (POIs) appear on the base map along with their corresponding icons. POIs include parks, schools, government buildings, and more, as well as business POIs such as shops, restaurants, and hotels.\n\nYou can respond to click events on a POI. See the guide to\n[businesses and other points of interest](/maps/documentation/ios-sdk/poi).\n\nOther events\n\nTo learn about the full list of methods on `GMSMapViewDelegate`, see\n[the reference guide](/maps/documentation/ios-sdk/reference/objc/Protocols/GMSMapViewDelegate)."]]