2016-08-01 1 views
1

У меня есть приложение для картографирования в помещении. У меня есть .png, который представляет карту. Некоторые контакты необходимо размещать на карте программно в определенных точках интереса (лестницы, лифты, магазины и т. Д.).Swift - Добавление подпрограмм в UIImageView в том же положении для всех устройств

Допустим, что на iPhone 5, добавить UIView как подвид для моего UIImageView в точке

CGPointMake(100,y:100) 

и это означает (надевается) по лестнице в UIImageView. Проблема в том, что когда я запускаю приложение на iPad, UIImageView больше, а UIView не находится над лестницей. Мне нужно изменить мои x, y для UIView.

Я пытался сделать некоторые расчеты, чтобы определить newX и Newy в UIView в соответствии с

UIScreen.mainScreen().bounds.size.width 

и

UIScreen.mainScreen().bounds.size.height 

, но мне не удалось установить, что UIView в одно и то же место для каждого устройства.

Есть ли сторонняя библиотека, которая может решить мою проблему? Или уравнение для определения newX и newY?

Спасибо,

Dragos

+0

предоставьте свой код и снимок экрана проблемы. – DJ1

+0

Возможно, вы захотите использовать Constraint Layout, чтобы заставить размер UIImageView и/или изменить режим содержимого UIImageView? – Larme

+0

iPhone5: http://picpaste.com/iphone5-JmugDSJq.png iPhone6: http: //picpaste.com/Iphone6-wT6L7Zes.png –

ответ

0

Я обнаружил способ сделать это, которое Arround 90% точный. Я использую процент для вычисления координат x и y.

Так что если х булавочной составляет 10%, а у составляет 15% я расчета х и у, как это:

x = xPercentage/100 * pinSuperView.frame.size.width 
y = yPercentage/100 * pinSuperView.frame.size.height 

И результаты похожи на Iphone 5, iphone 6с и Ipad 2 Теперь речь идет только о ширине и высоте булавки, которые будут отображаться на отдельных устройствах не ТОЧНО в одном месте, но достаточно хороши.

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

let width = UIScreen.mainScreen().bounds.size.width/20 

и она будет меняться в зависимости от используемого устройства.

Опять же, это примерно 90% -94% на всех устройствах, но, на мой взгляд, это достаточно хорошо.

Определение процентной доли штыря - это процедура проб и ошибок или знание ширины и высоты супервизора и выполнение чего-то вроде нажатия на супервизор, где вы хотите, чтобы вы установили координаты и вычислили процент в соответствии с шириной супервизора и высота.

Как получить ответную точку вы можете найти здесь: How to get a CGPoint from a tapped location? в объективе C, но это не сложно переписать в быстром режиме.

0

Есть два способа вы могли бы подойти к этому: 1) вручную 2) ограничения.

1) Вручную установите CGPoint в коммутаторе

Вы можете установить CGPoint для точных значений в зависимости от размера экрана, используя следующий переключатель:

if UIDevice().userInterfaceIdiom == .Phone { 
    switch UIScreen.mainScreen().nativeBounds.height { 
     case 960: 
      // Set CGPoint for 4 
     case 1136: 
      // Set CGPoint for 5 
     case 1334: 
      // Set CGPoint for 6 
     case 2208: 
      // Set CGPoint for 6Plus 
     default: 
      break 
    } 
} 

Преимущество этого: это быстро и просто. Недостатки: он не масштабируется (каламбур) к любым новым потенциальным размерам экрана, которые Apple может выпускать. Делать это на самом деле не как Apple, предназначен разработчикам создавать интерфейсы, что приводит меня к ...

2) Использование ограничений для динамического расчета положения

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

Вы можете добавить ограничения в раскадровке (проще на мой взгляд) или в Swift, как это:

let pinView = UIView() 
pinView.translatesAutoresizingMaskIntoConstraints = false 
self.view.addSubview(pinView) 

let horizontalConstraint = NSLayoutConstraint(item: pinView, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0) 
view.addConstraint(horizontalConstraint) 

let leadingConstraint = NSLayoutConstraint(item: pinView, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.LeadingMargin, multiplier: 1, constant: 0) 
view.addConstraint(leadingConstraint) 

Хорошие вещи о ограничений в том, что 1) это, как Apple, предназначена она 2) масштабировании 3) меньше ручного вычисления.

Для получения дополнительной информации об ограничениях, я дал бы эти чтения:

+0

Я пробовал комбинацию из двух. Я поставил на iphone5 несколько контактов на моем представлении с определенными ограничениями, и я попытался изменить программно свои ограничения в соответствии с шириной и высотой экрана, чтобы на iphone 5 было то же самое, и в iphone 6 было бы добавлено значение к постоянному значению ограничения. Но мне не удалось разместить одно и то же место на обоих устройствах. –