在 CGRectMake、Swift、UIkit 中使用变量
Posted
技术标签:
【中文标题】在 CGRectMake、Swift、UIkit 中使用变量【英文标题】:Using variables in CGRectMake, Swift, UIkit 【发布时间】:2015-06-07 09:44:14 【问题描述】:对于我正在制作的应用程序,我需要使用变量来更改对象(标签)的大小和位置。我试过var example = CGRectMake(0, 0, 0, 100)
,希望它会忽略零(虽然不是真的认为它会)。然后我尝试了:
var example = 100
Label1.frame = CGRectMake(20, 20, 50, example)
我稍微改变了语法,添加了“”并将CGRectMake
替换为CGRect
等,但没有任何效果......我不明白我在这里做错了什么......帮助!
【问题讨论】:
保存旧标签的框架,然后将这些值设置为在新位置保持不变的值???? 【参考方案1】:Swift 3 更新
let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
【讨论】:
【参考方案2】:CGRectMake
将CGFloat
s 用于其所有参数。如果您使用类型标识符指定 example
应该是 CGFloat
,您的示例代码应该可以正常工作:
// v~~~~ add this...
var example: CGFloat = 100
Label1.frame = CGRectMake(20, 20, 50, example)
否则,swift会推断example
的类型为Int
,而对CGRectMake
的调用失败,因为它不能将Int
作为参数...
【讨论】:
这个答案已经过时了。见下文。【参考方案3】:所以,给猫剥皮的方法有很多。这完全取决于您的需求和要求(也许您可以详细说明您要实现的目标?)。但一种方法可能是在发生某些事情时设置一个变量,然后更新标签的框架。如果您在视图中添加了轻击手势识别器,并像这样更新了标签:
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)
这只是一个例子,而且是一种非常粗暴的做法。还有很多其他方法可以做到这一点,但希望它能让您了解如何实现它。
【讨论】:
【参考方案4】: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、Swift、UIkit 中使用变量的主要内容,如果未能解决你的问题,请参考以下文章
CGRectMake、CGPointMake、CGSizeMake、CGRectZero、CGPointZero 在 Swift 中不可用
断言失败 - [UIPickerTableView _createPreparedCellForGlobalRow:withIndexPath:],/ SourceCache / UIKit_Sim