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

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

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

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

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

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

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

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

افزودن پنجره اطلاعات

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

Swift

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

آبجکتیو-سی

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

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

Swift

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

آبجکتیو-سی

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

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

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

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

Swift

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

آبجکتیو-سی

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 است.

Swift

london.tracksInfoWindowChanges = true
      

آبجکتیو-سی

london.tracksInfoWindowChanges = YES;
      

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

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

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

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

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

Swift

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

آبجکتیو-سی

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

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

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

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

  • mapView:markerInfoContents: — وقتی mapView:markerInfoWindow مقدار nil را برمی‌گرداند، فراخوانی می‌شود.

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

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

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

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

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

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

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

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

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

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

برای اطلاعات درباره بارگیری و اجرای این نمونه‌ها، به نمونه‌های کد مراجعه کنید.