iPhone: я нашел интересный способ обойти ограничение API.Будет ли это работать? - PullRequest
4 голосов
/ 21 марта 2011

Проблема, которую я пытаюсь решить, заключается в следующем:

При использовании UIImagePicker он настраивается при повороте устройства.Я не хочу, чтобы это делалось, скорее, оно должно постоянно оставаться в портретной ориентации.Я много гуглил и не нашел никакого решения (просто другие с такой же нерешенной проблемой).Единственным ответом было использование приватного вызова API, я бы предпочел не рисковать.

-

Однако я наткнулся на ' метод swizzling ' - способобмена именами методов во время выполнения.Что я планирую сделать:

  • Добавить категорию в UIViewController, которая определяет методы, такие как 'customShouldRotate', определяющие пользовательское поведение, которое не допускает вращения.

  • Swizzle эти методы с методами ротации по умолчанию UIViewController во время выполнения.

-

Хотя, подумав немного, все может быть не так просто.Вот почему - любые ответы на следующие вопросы были бы очень благодарны.

  • Метод, который я использую, находится в UIViewController, а не в UIImagePickerController.Я не могу подключиться к средству выбора изображений напрямую, я уже пробовал через подклассы, и это, кажется, контроллер подпредставления, который обрабатывает вращение, а не сам UIImagePickerController.Будут ли swizzled методы переходить к подклассам, если нет, то есть ли обходной путь для этого?

  • Возможно, это не обычный метод ротации из UIViewController, который используется в UIImagePickerController.Есть ли какой-нибудь способ сказать?

  • Будет ли Apple в порядке с методом Swizzling?Я не использую приватный вызов API, но, опять же, я не буду слишком удивлен, если они все равно отклонят его.

-

Реальна ли эта идея/ стоит попробовать - или, если кто-то на самом деле решил исходную проблему другим способом, это было бы еще лучше.

1 Ответ

0 голосов
/ 21 марта 2011

Метод Swizzling в порядке: Apple проверяет наличие частных API с помощью статического анализатора. Если вы можете перегружать, крутить или делать все, что хотите, чтобы добиться того же эффекта без вызова частного API, анализатор не поймет его.

Единственная причина, по которой Apple может отклонить вас, заключается в изменении «стандартного» поведения - но я подозреваю, что этого не произойдет. Хуже всего то, что ваше приложение получает ответ, и вам нужно восстановить исходное поведение.

...