Я думаю, что получаю это.
XIB-файлы измеряются в точках , а не в пикселях. pt - это единица расстояния, например, см или световой год . Пиксель равен , а не единице расстояния, он обозначает «элемент изображения». Разные устройства могут иметь разную плотность пикселей.
Ваш XIB-файл сообщает размер вашей области отображения в точках . Для приложений iPhone по умолчанию установлено значение 320x480 pts , для iPad 768x1024 pts . Вы можете проверить это в своем xib-файле.
Теперь self.contentScaleFactor
, на который Брэд ссылается , - это ответ . Значение этого значения: "преобразовать из пространства логических координат по умолчанию (768x1024 pts ) в пространство координат устройства этого экрана (1536x2048 px )."
Другими словами, self.contentScaleFactor
- это показатель пикселей / пт , используемый устройством. Это значение варьируется от устройства к устройству. В XCode вы указываете элементы пользовательского интерфейса в pts (единица измерения реального мира), поэтому вещи не выглядят испорченными при разных разрешениях.
Вы даже можете установить self.contentScaleFactor=4
, что на самом деле выглядит круто (это суперсэмплы) (но может работать медленно).
Еще одно замечание: события касания всегда будут в точках , а не в пикселях. То есть устройства Retina все еще разрешают события касания в масштабе 768x1024.
Итак, если ваш вид поддерживает выбор касания, вам нужно умножить каждое входящее событие касания на self.contentScaleFactor
, чтобы входящее местоположение в pts отображалось в пикселей в вашем фреймбуфера.