Я работаю над проектом, в котором мне нужно нанести точки в определенных областях на изображение, представляющее человеческое тело. В Интерфейсном Разработчике я установил контейнер UIView, который занимает большую часть вертикального центра основного вида. В этом представлении контейнера я поместил UIImageView и установил изображение в IB. Графика намного больше, чем UIImageView и контейнер UIView, точнее, она выше. ContentMode UIImageView установлен в AspectFit, потому что я хочу, чтобы изображение не показывалось как больше, чем контейнер.
Код создает несколько экземпляров CGRect, которые являются областями, где касания пользователя что-то значат. Когда пользователь нажимает на представление контейнера, код используется для определения, находится ли точка в одной из областей, и если это так, в центре этой области рисуется точка.
Проблема в том, что когда я запускаю приложение на определенных симуляторах, прямоугольники региона не в нужном месте на изображении. Например, когда я запускаю приложение на iPhone X, область прямоугольника, которая находится на месте для головы, выглядит хорошо. Когда я запускаю приложение на iPhone XR, область прямоугольника отключается слева от головы.
Я использую координаты, чтобы определить прямоугольники региона, основанные на том, где, например, человеческая голова находится на изображении. Мне кажется, что это неправильный способ сделать это, поскольку AspectFit для ContentMode изображения, скорее всего, вызывает масштабирование изображения для сохранения аспекта.
Суть в том, что я хочу, чтобы прямоугольник находился в нужном месте и имел размер независимо от масштаба изображения. Не уверен, имеет ли смысл то, как я это делаю, поэтому надеюсь, что появятся некоторые предложения, предлагающие лучший способ сделать это.
Обновление 1 : UIImageView прикреплен к окружающему UIView, поэтому его ширина и высота такие же большие, как у контейнера. Поскольку изображение более тонкое, чем UIImageView, изображение отображается по центру. На прикрепленных изображениях фиолетовый фон - это UIImageView, показывающий самый верхний цвет фона UIView.
Обновление 2 : я проверил шкалу ширины и высоты и обнаружил, что они разные. Коэффициент масштабирования по ширине равен 1.36565656565, а коэффициент масштабирования по высоте равен 2.104. Я попробовал формулы, приведенные с обоими масштабными коэффициентами, заданными Sweeper, но не повезло.