Загрузка нескольких изображений / сопоставление изображений с продуктами

Я ищу решение (API и т. Д.) Для обработки аналогичного опыта, как cafepress.com , Мне нужно иметь возможность загружать изображения (желательно по нескольку за раз) и иметь возможность сопоставлять свои загруженные изображения с различными изображениями продуктов (чистые стоковые изображения рубашек, кружек и т. Д.). Я также хочу дать пользователю некоторые основные элементы управления загружаемыми ими изображениями, такие как обрезка, изменение размера, уровни и т. Д. Будем весьма благодарны за любые предложенные библиотеки или API. Я ищу .NET решения (если на стороне сервера). ...

Я реализовал

application:didFinishLaunchingWithOptions:

и

application:handleOpenURL:

UIApplicationDelegate в соответствии со спецификацией, т.е.

application:didFinishLaunchingWithOptions:
returns YES 

и

application:handleOpenURL: opens the URL. 

Код работает под iOS 4 (в обоих случаях, то есть когда приложение запускается и когда становится активным из приостановленного состояния). Тем не менее, код не работает под iOS 3.2.

11
задан Priyal 18 August 2015 в 09:46
поделиться

1 ответ

Отвечаю на свой вопрос. Поиск решения занял у меня некоторое время и был довольно разочаровывающим. Если вы выполните поиск в Интернете, вы найдете некоторые частичные ответы, но мне все же потребовалось некоторое время, чтобы выработать следующее решение, и я надеюсь, что оно внесет некоторую ясность.

Итак, во-первых, рекомендуемое поведение вашего приложения выглядит следующим образом (см. Открытие поддерживаемых типов файлов в iOS Ref Lib):

  • Не реализовывать applicationDidFinishLaunching: ( см. примечание в UIApplicationDelegate).
  • Реализуйте application:didFinishLaunchingWithOptions: и проверьте URL-адрес, верните YES, если вы можете его открыть, в противном случае NO, но не открывайте его.
  • Реализуйте application:handleOpenURL: и откройте URL-адрес, верните YES в случае успеха, иначе NO.

В iOS 4 передача URL-адреса приложению приводит к одному из следующих двух вариантов поведения:

  • Если приложение запускается, вызывается application:didFinishLaunchingWithOptions: и application:handleOpenURL. : вызывается, если и application:didFinishLaunchingWithOptions: возвращает YES.
  • Если приложение становится активным из приостановленного состояния, то application:didFinishLaunchingWithOptions: не вызывается, но вызывается application:handleOpenURL:.

Однако в iOS 3.2 кажется, что application:handleOpenURL: никогда не вызывается! Намек на то, что в iOS 3.2 поведение отличается, можно найти в Обработка запросов URL. Там вы обнаружите, что application:handleOpenURL: вызывается, если application:didFinishLaunchingWithOptions: не реализовано, но applicationDidFinishLaunching: реализовано. Но application:handleOpenURL: не вызывается, если реализовано application:didFinishLaunchingWithOptions:.

Таким образом, одним из способов заставить код работать в версиях 3.2 и 4.0 является следующее:

  • Откройте URL-адрес в application:didFinishLaunchingWithOptions:, но затем верните NO, чтобы предотвратить это application:handleOpenURL: называется.
  • Откройте URL-адрес в application:handleOpenURL:, если вы используете версию ниже 4.0 и приложение находится в приостановленном состоянии.

Я нашел это решение в другом посте, но был сбит с толку, поскольку оно противоречило рекомендации в документации iOS Ref Lib (а именно, что мы должны возвращать YES в application:didFinishLaunchingWithOptions:). (В тот момент я не осознавал, что документация противоречит сама себе).

Я считаю, что текущее поведение iOS 4.0 будет таким же и в будущем. Я предпочитаю следующее решение:

  • Не реализовывать applicationDidFinishLaunching:.
  • Реализуйте application:didFinishLaunchingWithOptions: и проверьте URL-адрес, верните YES, если вы можете его открыть, в противном случае NO, но не открывайте его. Если мы на 3.2, откройте URL.
  • Реализуйте application:handleOpenURL: и откройте URL-адрес, верните YES в случае успеха, иначе NO.

Таким образом, я реализовал поведение iOS 4 и добавил следующую строку в application:didFinishLaunchingWithOptions:

  if([[[UIDevice currentDevice] systemVersion] (hidden) {
 [собственное приложение: дескриптор приложения OpenURL: URL];
 }
 

, которые заставляют код работать под 3.2.

33
ответ дан 3 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: