پنجره های اطلاعات

پلتفرم را انتخاب کنید: Android iOS JavaScript

پنجره اطلاعاتی که روی یک نشانگر ظاهر می شود.

یک پنجره اطلاعات به شما امکان می دهد وقتی کاربر روی یک نشانگر ضربه می زند، اطلاعاتی را برای او نمایش دهید.

یک پنجره اطلاعات به سمت صفحه نمایش دستگاه کشیده شده است که در مرکز بالای نشانگر مرتبط با آن قرار دارد. پنجره اطلاعات پیش‌فرض شامل عنوان به صورت پررنگ و متن قطعه زیر عنوان است.

محتویات پنجره اطلاعات با title و ویژگی های snippet نشانگر تعریف می شود. اگر هر دو ویژگی title و snippet خالی یا nil باشند، با کلیک روی نشانگر، پنجره اطلاعاتی نمایش داده نمی شود.

فقط یک پنجره اطلاعات در یک زمان نمایش داده می شود. اگر کاربر روی نشانگر دیگری ضربه بزند، پنجره فعلی پنهان می شود و پنجره اطلاعات جدید باز می شود. اگر کاربر روی نشانگری کلیک کند که در حال حاضر پنجره اطلاعات را نشان می دهد، آن پنجره اطلاعات بسته می شود و دوباره باز می شود.

یک پنجره اطلاعات سفارشی برای اضافه کردن متن یا تصاویر اضافی ایجاد کنید. یک پنجره اطلاعات سفارشی به شما کنترل کامل ظاهر پنجره بازشو را می دهد.

یک پنجره اطلاعات اضافه کنید

قطعه زیر یک نشانگر ساده ایجاد می کند که فقط یک عنوان برای متن پنجره اطلاعات دارد.

سریع

let position = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127)
let london = GMSMarker(position: position)
london.title = "London"
london.map = mapView
      

هدف-C

CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127);
GMSMarker *london = [GMSMarker markerWithPosition:position];
london.title = @"London";
london.map = mapView;
      

با ویژگی snippet ، می توانید متن اضافی را اضافه کنید که در زیر عنوان با فونت کوچکتر ظاهر می شود. رشته هایی که بیشتر از عرض پنجره اطلاعات هستند به طور خودکار در چندین خط پیچیده می شوند. پیام های بسیار طولانی ممکن است کوتاه شوند.

سریع

london.title = "London"
london.snippet = "Population: 8,174,100"
london.map = mapView
      

هدف-C

london.title = @"London";
london.snippet = @"Population: 8,174,100";
london.map = mapView;
      

نمایش/پنهان کردن پنجره اطلاعات

پنجره های اطلاعات برای پاسخ به رویدادهای لمس کاربر روی نشانگر طراحی شده اند. با تنظیم ویژگی selectedMarker GMSMapView می‌توانید یک پنجره اطلاعات را به صورت برنامه‌نویسی نشان دهید یا پنهان کنید:

  • selectedMarker را روی نام نشانگر تنظیم کنید تا آن را نشان دهد.
  • selectedMarker را روی nil تنظیم کنید تا پنهان شود.

سریع

london.title = "London"
london.snippet = "Population: 8,174,100"
london.map = mapView
// Show marker
mapView.selectedMarker = london
// Hide marker
mapView.selectedMarker = nil
      

هدف-C

london.title = @"London";
london.snippet = @"Population: 8,174,100";
london.map = mapView;
// Show marker
mapView.selectedMarker = london;
// Hide marker
mapView.selectedMarker = nil;
      

تنظیم یک پنجره اطلاعات برای بازخوانی خودکار

اگر می‌خواهید ویژگی‌های جدید یا محتوای پنجره اطلاعات بلافاصله پس از تغییر نمایش داده شود، به جای اینکه منتظر بمانید تا پنجره اطلاعات پنهان شود و دوباره نمایش داده شود، tracksInfoWindowChanges روی نشانگر روی YES یا true تنظیم کنید. پیش فرض NO یا false است.

سریع

london.tracksInfoWindowChanges = true
      

هدف-C

london.tracksInfoWindowChanges = YES;
      

برای تصمیم گیری در مورد زمان تنظیم ویژگی tracksInfoWindowChanges ، باید ملاحظات عملکرد را در مقابل مزایای طراحی مجدد پنجره اطلاعات به طور خودکار بسنجید. مثلا:

  • اگر یک سری تغییرات برای ایجاد دارید، می توانید ویژگی را به YES تغییر دهید و سپس به NO برگردید.
  • هنگامی که یک انیمیشن در حال اجرا است یا محتویات به صورت ناهمزمان بارگذاری می شوند، باید ویژگی را روی YES تنظیم کنید تا زمانی که اقدامات کامل شوند.

هنگام استفاده از ویژگی iconView نشانگر، به یادداشت‌ها نیز مراجعه کنید.

تغییر موقعیت پنجره اطلاعات

یک پنجره اطلاعات به سمت صفحه نمایش دستگاه کشیده شده است که در مرکز بالای نشانگر مرتبط با آن قرار دارد. با تنظیم ویژگی infoWindowAnchor می توانید موقعیت پنجره اطلاعات را نسبت به نشانگر تغییر دهید. این ویژگی یک CGPoint را می پذیرد که به عنوان یک افست (x,y) تعریف می شود که در آن x و y هر دو بین 0.0 و 1.0 قرار دارند. آفست پیش فرض (0.5، 0.0) است، یعنی بالای مرکز. تنظیم افست infoWindowAnchor برای تراز کردن پنجره اطلاعات در برابر یک نماد سفارشی مفید است.

سریع

london.infoWindowAnchor = CGPoint(x: 0.5, y: 0.5)
london.icon = UIImage(named: "house")
london.map = mapView
      

هدف-C

london.infoWindowAnchor = CGPointMake(0.5, 0.5);
london.icon = [UIImage imageNamed:@"house"];
london.map = mapView;
      

مدیریت رویدادها در پنجره های اطلاعات

می توانید به رویدادهای پنجره اطلاعات زیر گوش دهید:

  • mapView:markerInfoWindow: - زمانی که یک نشانگر در شرف انتخاب شدن است، فراخوانی می شود. می‌تواند به صورت اختیاری یک پنجره اطلاعات سفارشی را به‌عنوان UIView بازگرداند تا برای نشانگر استفاده شود. برای اطلاعات بیشتر به پنجره های اطلاعات سفارشی زیر مراجعه کنید.

  • mapView:markerInfoContents: — زمانی که mapView:markerInfoWindow صفر برمی گرداند، فراخوانی می شود.

  • mapView:didCloseInfoWindowOfMarker: — زمانی که پنجره اطلاعات نشانگر بسته است، فراخوانی می شود.

  • mapView:didLongPressInfoWindowOfMarker: - پس از فشرده شدن طولانی پنجره اطلاعات نشانگر، فراخوانی می شود.

برای گوش دادن به رویدادها، باید پروتکل GMSMapViewDelegate را پیاده سازی کنید. راهنمای رویدادها و فهرست روش‌ها را در GMSMapViewDelegate ببینید.

GitHub شامل نمونه هایی است که نحوه مدیریت رویدادهای پنجره اطلاعات را نشان می دهد:

پنجره های اطلاعات سفارشی

با ایجاد یک زیر کلاس از UIView که طرح‌بندی پنجره اطلاعات سفارشی را مشخص می‌کند، محتویات پنجره‌های اطلاعات را سفارشی کنید. در آن زیر کلاس، نمای را هر طور که می خواهید تعریف کنید. برای مثال، می‌توانید از نمونه‌های سفارشی UILabel برای نمایش عنوان و متن قطعه و سایر نماها، مانند نمونه‌های UIImageView ، برای اضافه کردن تصاویر نمایش داده شده در پنجره اطلاعات استفاده کنید.

اطمینان حاصل کنید که ViewController شما پروتکل GMSIndoorDisplayDelegate را پیاده سازی می کند و یک شنونده برای رویداد mapView:markerInfoWindow: تعریف می کند. این شنونده رویداد زمانی فراخوانی می شود که یک نشانگر در شرف انتخاب شدن است و به شما امکان می دهد نمونه ای از کلاس UIView سفارشی خود را برای تعریف پنجره اطلاعات سفارشی مورد استفاده توسط نشانگر بازگردانید.

تصاویر زیر یک پنجره اطلاعات پیش فرض، یک پنجره اطلاعات با محتوای سفارشی شده و یک پنجره اطلاعات با قاب و پس زمینه سفارشی شده را نشان می دهد.

Info Window Comparison

نمونه کد در GitHub ارائه شده با Maps SDK برای iOS شامل نمونه هایی از پنجره های اطلاعات سفارشی است. به عنوان مثال، به تعریف MarkerInfoWindowViewController.m (Objective-C) یا MarkerInfoWindowViewController.swift (Swift) مراجعه کنید.

برای اطلاع از دانلود و اجرای این نمونه ها به نمونه کد مراجعه کنید.