在 CGRectMake, Swift, UIkit 中使用变量

Using variables in CGRectMake, Swift, UIkit

对于我正在制作的应用程序,我需要使用变量来更改对象(标签)的大小和位置。我试过 var example = CGRectMake(0, 0, 0, 100),希望它会忽略零(虽然我真的不认为 )。然后我尝试了:

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

我稍微更改了语法,添加了“”并将 CGRectMake 替换为 CGRect 等,但没有任何效果......我不明白我在这里做错了什么。 .. 帮助!

所以,给猫剥皮的方法有很多种。这完全取决于您的需求和要求(也许您可以详细说明您要实现的目标?)。但一种方法是在发生某些事情时设置一个变量,然后更新标签的框架。如果您在视图中添加了点击手势识别器,并像这样更新了标签:

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

这只是一个例子,而且是一种非常粗糙的实现方式。还有很多其他方法可以做到这一点,但希望它能让您了解如何实现它。

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;

CGRectMake 对其所有参数采用 CGFloats。如果您使用类型标识符指定 example 应该是 CGFloat,您的示例代码应该可以正常工作:

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

否则,swift 推断 example 的类型为 Int,并且对 CGRectMake 的调用失败,因为它不能接受 [=16] =] 作为参数...

Swift 3 次更新

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