【发布时间】:2016-07-17 11:02:14
【问题描述】:
我在一本书中进行了这个练习,并且有一次,有一个方法的实现可以创建随机放置在视图中的标签。代码如下:
1 - (void)drawHypnoticMessage:(NSString *)message{
2 for(int i =0; i<20; i++){
3 UILabel *messageLabel = [[UILabel alloc] init];
4 messageLabel.backgroundColor = [UIColor clearColor];
5 messageLabel.textColor = [UIColor whiteColor];
6 messageLabel.text = message;
7 [messageLabel sizeToFit];
8 int width = self.view.bounds.size.width - messageLabel.bounds.size.width;
9 int randomX = arc4random() % width;
10 int height = self.view.bounds.size.height - messageLabel.bounds.size.height;
11 int randomY = arc4random() % height;
12 CGRect frame = messageLabel.frame;
13 frame.origin = CGPointMake(randomX, randomY);
14 messageLabel.frame = frame;
15 [self.view addSubview:messageLabel];
16 }
17 }
这很好用。我的问题是关于第 12 行和第 14 行。当我将这个练习从书中复制到 Xcode 并到达第 12 行时,我本能地将其更改为:
12 CGRect frame;
这不起作用,我不明白为什么。对我来说,第 12 行和第 14 行:
12 CGRect frame = messageLabel.frame;
14 messageLabel.frame = frame;
肯定是在说同一件事两次。谁能解释一下为什么不是这样?
【问题讨论】:
-
我想你必须明白的是,= 在这种情况下意味着赋值。它不代表相等(就像在某些语言的 IF 语句中那样)。所以这里A=B和B=A的意思不一样,第13行在重新分配frame之前调整了内部值
标签: objective-c frame cgrect repeat