在 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
对其所有参数采用 CGFloat
s。如果您使用类型标识符指定 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)
对于我正在制作的应用程序,我需要使用变量来更改对象(标签)的大小和位置。我试过 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
对其所有参数采用 CGFloat
s。如果您使用类型标识符指定 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)