یک پنجره اطلاعات به شما امکان می دهد وقتی کاربر روی یک نشانگر ضربه می زند، اطلاعاتی را برای او نمایش دهید.
یک پنجره اطلاعات به سمت صفحه نمایش دستگاه کشیده شده است که در مرکز بالای نشانگر مرتبط با آن قرار دارد. پنجره اطلاعات پیشفرض شامل عنوان به صورت پررنگ و متن قطعه زیر عنوان است.
محتویات پنجره اطلاعات با 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
سفارشی خود را برای تعریف پنجره اطلاعات سفارشی مورد استفاده توسط نشانگر بازگردانید.
تصاویر زیر یک پنجره اطلاعات پیش فرض، یک پنجره اطلاعات با محتوای سفارشی شده و یک پنجره اطلاعات با قاب و پس زمینه سفارشی شده را نشان می دهد.
نمونه کد در GitHub ارائه شده با Maps SDK برای iOS شامل نمونه هایی از پنجره های اطلاعات سفارشی است. به عنوان مثال، به تعریف MarkerInfoWindowViewController.m (Objective-C) یا MarkerInfoWindowViewController.swift (Swift) مراجعه کنید.
برای اطلاع از دانلود و اجرای این نمونه ها به نمونه کد مراجعه کنید.