شما میتوانید از Places SDK برای iOS (جدید) برای درخواست عکسهای مکان جهت نمایش در برنامه خود استفاده کنید. عکسهایی که توسط سرویس عکس برگردانده میشوند از منابع مختلفی از جمله صاحبان مشاغل و عکسهای ارائه شده توسط کاربران میآیند.
عکسها تصاویر بیتمپ هستند که توسط یک شیء UIImage نمایش داده میشوند. یک تصویر بیتمپ حداکثر اندازه ۴۸۰۰ در ۴۸۰۰ پیکسل دارد.
درخواست تصویر
شما میتوانید تا ۱۰ عکس برای یک مکان درخواست کنید:
فراخوانی
[GMSPlacesClient lookUpPhotosForPlaceID]، ارسال یک شناسه مکان و یک فراخوانیGMSPlacePhotoMetadataResultCallback. این درخواست فراخوانیGMSPlacePhotoMetadataResultCallbackرا با یک شیءGMSPlacePhotoMetadataListفراخوانی میکند.از شیء
GMSPlacePhotoMetadataListدر تابع فراخوانی، ویژگی آرایهresultsشامل عکسها است که در آن هر عکس توسط یک شیءGMSPlacePhotoMetadataنمایش داده میشود.از شیء
GMSPlacePhotoMetadataبرای ایجاد یکGMSFetchPhotoRequestاستفاده کنید، که شامل حداکثر اندازه تصویر درخواستی نیز میشود.برای هر شیء
GMSPlacePhotoMetadataدر آرایه، تابع[GMSPlacesClient fetchPhotoWithRequest:callback:]را با ارسال شیءGMSFetchPhotoRequestفراخوانی کنید. این متد، تابعGMSFetchPhotoResultCallbackرا با یک تصویر بیتمپ قابل استفاده به عنوان یک تصویر رابط کاربری (UIImage) فراخوانی میکند.
راه دیگر برای درخواست عکس برای یک مکان، ایجاد یک درخواست Place Details (جدید) است که شامل GMSPlacePropertyPhotos در لیست فیلدها میشود. مزیت ایجاد فراخوانی Place Details این است که شیء GMSPlace پاسخ میتواند شامل عکسها و هر فیلد داده دیگری باشد که برای مکان میخواهید.
کد نمونه
متد مثال زیر یک شناسه مکان را دریافت میکند و اولین عکس را در لیست برگردانده شده برمیگرداند. میتوانید از این متد به عنوان الگو برای متدی که در برنامه خود ایجاد خواهید کرد، استفاده کنید.
مکانهای Swift SDK
// First fetch place details // A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" let fetchPlaceRequest = FetchPlaceRequest( placeID: placeID, placeProperties: [ . name, .website ] ) var fetchedPlace: Place switch await placesClient.fetchPlace(with: fetchPlaceRequest) { case .success(let place): fetchedPlace = place case .failure(let placesError): // Handle error } // Use the place details to fetch a photo's image. guard let photo = fetchedPlace.photos?.first else { // Handle place without photos. } let fetchPhotoRequest = FetchPhotoRequest(photo: photo, maxSize: CGSizeMake(4800, 4800)) switch await placesClient.fetchPhoto(with: fetchPhotoRequest) { case .success(let uiImage): // Handle image. case .failure(let placesError): // Handle error }
سویفت
// A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" // Request list of photos for a place placesClient.lookUpPhotos(forPlaceID: placeID) { (photos, error) in guard let photoMetadata: GMSPlacePhotoMetadata = photos?.results[0] else { return } // Request individual photos in the response list let fetchPhotoRequest = GMSFetchPhotoRequest(photoMetadata: photoMetadata, maxSize: CGSizeMake(4800, 4800)) self.client.fetchPhoto(with: fetchPhotoRequest, callback: { (photoImage: UIImage?, error: Error?) in guard let photoImage, error == nil else { print("Handle photo error: ") return } print("Display photo Image: ") } ) }
هدف-سی
// A hotel in Saigon with an attribution. NSString *placeID = @"ChIJV4k8_9UodTERU5KXbkYpSYs"; [placesClient lookUpPhotosForPlaceID:placeID callback: ^(GMSPlacePhotoMetadataList *list, NSError *error) { GMSPlacePhotoMetadata *photoMetadata = [list results][0]; // Request individual photos in the response list GMSFetchPhotoRequest *fetchPhotoRequest = [[GMSFetchPhotoRequest alloc] initWithPhotoMetadata:photoMetadata maxSize:CGSizeMake(4800, 4800)]; [placesClient fetchPhotoWithRequest:fetchPhotoRequest callback: ^(UIImage *_Nullable photoImage, NSError *_Nullable error) { if (error == nil) { // Display photo } }]; }];
ذخیره سازی
عکسهایی که با استفاده از [GMSPlacesClient loadPlacePhoto:callback:] یا [GMSPlacesClient loadPlacePhoto:constrainedToSize:scale:callback:] بارگذاری میشوند، توسط سیستم بارگذاری URL بنیاد در NSURLCache مشترک، هم روی دیسک و هم در حافظه کش میشوند.
برای پیکربندی رفتار ذخیرهسازی، میتوانید حافظه پنهان URL مشترک را با استفاده از متد [NSURLCache setSharedURLCache:] در نماینده برنامه خود به application:didFinishLaunchingWithOptions: تغییر دهید.
اگر نمیخواهید برنامه شما NSURLCache با Places SDK برای iOS به اشتراک بگذارد، میتوانید یک NSURLCache جدید ایجاد کنید و آن را منحصراً درون برنامه خود بدون تنظیم آن به عنوان حافظه پنهان مشترک استفاده کنید.
انتسابها
در بیشتر موارد، عکسهای مکان را میتوان بدون ذکر منبع استفاده کرد، یا اینکه منبع مورد نیاز به عنوان بخشی از تصویر در آن گنجانده میشود. با این حال، اگر نمونه GMSPlacePhotoMetadata برگردانده شده شامل هرگونه attributions یا authorAttribution باشد، باید این منابع را در برنامه خود، هر کجا که تصویر را نمایش میدهید، وارد کنید. به مستندات مربوط به منابع مراجعه کنید.