
پنجره اطلاعات به شما امکان میدهد وقتی کاربر روی نشانگر تکضرب میزند، اطلاعاتی را به او نمایش دهید.
پنجره اطلاعاتی در جهت صفحهنمایش دستگاه ترسیم میشود و در مرکز بالای نشانگر مربوطه قرار میگیرد. پنجره اطلاعات پیشفرض حاوی عنوان بهصورت پررنگ است، و نوشتار گزیده در زیر عنوان قرار دارد.
محتوای پنجره اطلاعات توسط ویژگیهای 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) را ببینید.
برای اطلاعات درباره بارگیری و اجرای این نمونهها، به نمونههای کد مراجعه کنید.