web-dev-qa-db-ja.com

CGRectMake、Swift、UIkitでの変数の使用

アプリの場合、変数を使用してオブジェクト(ラベル)のサイズと位置を変更する必要があります。私はvar example = CGRectMake(0, 0, 0, 100)を試してみましたが、ゼロを無視することを期待しています(実際には考えていません) するだろう ただし)。私はそれから試しました:

var example = 100
Label1.frame = CGRectMake(20, 20, 50, example)

構文を少し変更して、 ""を追加し、CGRectMakeCGRectに置き換えましたが、何も機能しません...ここで間違っていることはわかりません...ヘルプ!

13
Mats

CGRectMakeは、引数のすべてにCGFloatsを使用します。タイプコードを使用して、exampleCGFloatであると指定した場合、サンプルコードは正常に機能します。

         //  v~~~~ add this...
var example: CGFloat = 100
Label1.frame = CGRectMake(20, 20, 50, example)

それ以外の場合、SwiftはexampleのタイプをIntであると推測し、CGRectMakeの呼び出しは失敗します。 Intをパラメータとして...

4
Aaron Rasmussen

Swift 3アップデート

let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
66
quemeful

だから、猫の皮をむく方法はたくさんあります。それはすべて、ニーズと要件が何であるかに依存します(おそらく、達成しようとしていることについて少し詳しく説明できますか?)。しかし、それを行う1つの方法は、何かが発生したときに変数を設定してから、ラベルのフレームを更新することです。タップジェスチャレコグナイザをビューに追加し、ラベルを次のように更新した場合:

let myLabel = UILabel()

override func viewDidLoad() {
    super.viewDidLoad()

    let tapGestRecog = UITapGestureRecognizer(target: self, action: "handleTap:")
    self.view.addGestureRecognizer(tapGestRecog)
}

func handleTap(sender:UIGestureRecognizer) {

    let newXposition = sender.locationInView(self.view).x
    let newYposition = sender.locationInView(self.view).y

    myLabel.frame = CGRectMake(newXposition, newYposition, 200, 200)
}

これは単なる例であり、非常に大まかな方法​​です。それを行うには他にも多くの方法がありますが、うまくいけば、それを達成する方法のアイデアが得られます。

1
Chris

Swiftでは、Objective-Cではできない構文を使用できます。

var example = 100
label.frame.size.height = example

Objective-Cでは、別の方法で行う必要があります。

CGRect frame = label.frame;  //Create a temporary rect to hold the frame value
frame.size.height = example;
label.frame = frame;
0
Duncan C