2016-08-01 19 views
1

私は屋内マッピングアプリケーションを持っています。私はマップを表す.pngを持っています。一部のピンは、特定のポイント(階段、エレベーター、お店など)でプログラム上マップ上に配置する必要があります。Swift - UIImageViewにすべてのデバイスの同じ位置にサブビューを追加する

UIImageViewでいくつかの階段私はポイント

CGPointMake(100,y:100) 

で私のUIImageViewのためのサブビューとしてのUIViewを追加し、それは(がオーバー置かれている)を示している、のは、iPhone 5の上にそれを言ってみましょう。問題は、たとえばiPadでアプリを実行すると、UIImageViewが大きくなり、UIViewが階段を超えていないということです。 UIViewのx、yを変更する必要があります。

私は

UIScreen.mainScreen().bounds.size.width 

UIScreen.mainScreen().bounds.size.height 

に応じてのUIViewのnewXとnewYを決定するために、いくつかの計算を行うことを試みたが、私はそれのUIViewを配置するために管理することができませんでしたすべてのデバイスに同じスポット。

私の問題を解決するサードパーティのライブラリはありますか?または、newXとnewYを決定する式ですか? 1)手動2)制約:

は、あなたがこの近づくことができ、2つの方法があります

ドラゴス

+0

問題のコードとスクリーンショットを入力してください。 – DJ1

+0

制約レイアウトを使用してUIImageViewのサイズを強制したり、UIImageViewのコンテンツモードを変更することができますか? – Larme

+0

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

答えて

0

制約の詳細については、私はこれらに読み取りを与えるだろう正確。 x座標とy座標の計算にパーセンテージを使用しています。だから、

ピンのxが10%であり、yは私はこのようなxとyを計算しています15%である場合:

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

そして結果はiphone 5、iphoneの6SとiPad 2に似ています今はピンの幅と高さについての議論で、別々のデバイスに同じ場所に正確には表示されませんが、十分に優れています。

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

を、それはあなたが使用しているデバイスに応じて変更されます。私にとって

、私はピンのサイズを決定するために、画面幅を使用しています。

また、これはすべてのデバイスで約90%~94%の精度ですが、私の意見では十分です。

ピンのパーセンテージを調べることは、試行錯誤の手順であるか、またはスーパービューの幅と高さを知っていて、固定したいスーパービューをタップして座標を取得し、スーパービューの幅に従ってパーセンテージを計算し、高さ。

ここで見つけることができるタップポイントを取得するには:How to get a CGPoint from a tapped location?目的Cでは、しかし迅速に書き換えることは困難ではありません。

0

、ありがとうございます。この

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 
    } 
} 

アドバンテージ:それはだ

1)は手動であなたは、次のスイッチを使用して、画面サイズに基づいて正確な値にするCGPointを設定することができ、スイッチのCGPoint

を設定します早くて簡単。短所:アップルがリリースする可能性のある新しい潜在的な画面サイズにはスケーリングされません。私はあなたのビューがあり、正確かどうかはわかりません動的位置に

を計算するのに制約を使用)

2 ...これはに私をもたらした、Appleはインターフェイスを作成する開発者を意図したか本当にないですやっセットアップ、私はあなたに使用する制約を正確に言うことができません。ただし、先頭、末尾、上、下、中央X、中央Yの組み合わせを使用して完璧な位置を得ることができます。

あなたはこのように(私の意見では簡単に)またはスウィフトにストーリーボードに制約を追加することができます制約に関する

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のスケールを意図した方法です)手動で計算する必要がありません。私はarroundの90%で、これを行う方法を見つけた

+0

私は2つの組み合わせを試みました。私はiphone5をいくつかの制約を持って私の視野に入れました。スクリーンの幅と高さに応じて私の制約をプログラム的に修正しようとしました。そのため、iphone 5は同じで、iphone 6には値が追加されます制約の定数値に変換します。しかし、私は両方のデバイスで同じ場所に配置することはできませんでした。 –

関連する問題