2016-07-07 9 views
0

私の仕事では、iOSアプリケーションを設計するのを手伝っているので、最近Swiftで作業を始めました。アプリでは、Googleマップ要素と2つのグラフの3つの要素があります。これらの要素のどれかを押すと、画面に合わせてサイズが変更され、画面を再び押すと元のサイズに戻るようにしたいと思います。スウィフト:異なるデバイスでプログラム的に要素のサイズを調べる

画面を塗りつぶすことは問題ありません。既に実装されています。しかし、もう一度押すと、その要素を実行するデバイスに応じて、元の要素よりも小さいか大きい要素が表示されます。現在、要素のheight属性とwidth属性を使用して最小化し、ユーザーがフルスクリーン要素を押したときにこれらの属性の元の値に戻すだけです。しかし、これらは、あなたのデバイスが何であれ動的に作成されるのではなく、ハードコードされているように見えます。これが元のサイズに正しく戻らない理由です。ここで

は、私は私のコードで持っているもの現在:

@IBAction func mapButtonClicked(sender: AnyObject) { 
    if mapExpanded == false { 
     mapView.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height) 
     mapButton.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height) 
     mapExpanded = true 
    } else { 
     mapView.frame = CGRectMake(0, 0, oldMapWidth, oldMapHeight) 
     mapButton.frame = CGRectMake(0, 0, oldMapWidth, oldMapHeight) 
     mapExpanded = false 
    } 
} 

どこoldMapWidth = self.view.mapView.widthとoldMapHeight = self.view.mapView.height。

これは画面に対してサイズを変更しようとしましたが、1つのデバイスでのみ動作し、別のタブレットに切り替えるときに同じ問題が発生します。コンパイル後の高さと幅を提供する別の属性があるので、それが現在のデバイスに対して正しいでしょうか?

+0

oldMapHeightとwidthは、あなたが期待しているものですか?初めてmapButtonを押したときにログイベントを作成し、現在のビューの幅と高さを記録し、それらを2つの変数に格納したものと比較します。私は彼らが異なるだろうと思っています...最も簡単な解決策は、フルスクリーンを作る直前にmapButtonClick内にこれらの2つの変数を設定することです。その後、どのデバイスに関係なく、正常に動作するはずです。 – Putz1103

+0

彼らは私が思うものではありませんでした。ストーリーボード上の任意のビューのサイズは、デバイスを実際に実行しているときとは異なります。しかし、見ていただきありがとうございます。 – tdolphay

+0

質問は17分後に私はコメントして、あなたにアドバイスをした(回答者はほとんどそのままと思われる)。 – Putz1103

答えて

0

フレームを保存し、展開する前に設定するのはどうですか?このテストコードは私のために完璧に動作するようです:

class ViewController: UIViewController { 

    @IBOutlet weak var mapView: MKMapView! 
    @IBOutlet weak var mapButton: UIButton! 
    var mapExpanded = false 
    var oldFrame = CGRectZero 

    @IBAction func mapButtonClicked(sender: UIButton) { 
     if mapExpanded == false { 
      // before expanding, set old 
      oldFrame = mapView.frame 

      mapView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height) 
      mapButton.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height) 
      mapExpanded = true 
     } else { 
      mapView.frame = oldFrame 
      mapButton.frame = oldFrame 
      mapExpanded = false 
     } 
    } 
} 

私の例で私はマップとボタンを配置してストーリーボードで自動レイアウトを使用しています。私は同じことをすることをお勧めします。

+0

それは本当に滑らかです。私はあなたがちょうど1つのフレームを別のフレームに等しく設定するような簡単なことをすることができるのか分かりませんでした。これは完璧に動作するように見えます。助けてくれてありがとう! – tdolphay

関連する問題