如何随机更改UILabel位置?

时间:2014-06-18 20:38:06

标签: ios objective-c random uilabel viewcontroller

我的意思是,如果我创建了一个UILabel,如何在屏幕视图中定期更改为随机点?我会使用像arc4random或类似随机CG​​PointMake的东西吗?

我希望每隔一秒左右使用类似的东西进行更改

Text = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(RandomText) userInfo:nil repeats:YES] ;

但我只是不确定如何在随机的地方“生成”它,如果可能的话,然后删除另一个。

一个更简单的版本也是,如果我只是说,4个不同的UILabel,我怎么能让它在4个中的一个上随机出现,然后在时间间隔后删除?我想我可以使用像

这样的东西
int randomNumber = rand() % 4; 

然后在那里放置一个开关,但我不确定这是否也是正确的方法。

2 个答案:

答案 0 :(得分:0)

您是否有一个标签要移动到屏幕上的不同位置?或者您正在添加多个标签?

您是否使用自动布局? (如果你正在使用自动布局,那么你就不能只移动标签 - 而是需要修改它的位置限制。这会变得有点复杂。)

至于如何移动它,我建议使用arc4random_uniform计算标签中心的新位置。

您可以将以下代码放入计时器方法中。在下面的代码中,"查看"是包含您的标签的视图。

下面的代码通过将中心移动到距离它的父视图边缘而不是标签宽度和高度的一半来保持标签在屏幕上完全可见。

CGFloat newX = arc4random_uniform(view.bounds.width - label.bounds.width) + 
  label.bounds.width/2;
CGFloat newY = arc4random_uniform(view.bounds.height - label.bounds.height) + label.bounds.height/2;

label.center = CGPointMake(newX, newY);

如果您希望标签移动到动画中的新位置,您可以使用UIView方法animateWithDuration:动画来更改动画块中的中心点。

同样,如果您正在使用AutoLayout,则需要将中心X和中心Y约束作为插座附加,并更改其值设置以移动标签。

答案 1 :(得分:0)

有趣。也许这有帮助。这只是一个原型;绝不是生产代码。希望这可以帮助。将labelscreenHeightscreenWidth视为实例级变量。

- (void)viewDidLoad
{
    [super viewDidLoad];
    label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 20, 20)];
    label.backgroundColor = [UIColor blackColor];
    [self.view addSubview:label];
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0
                                  target:self
                                selector:@selector(createRandomPoint:)
                                userInfo:nil
                                 repeats:YES];
    screenHeight = [UIScreen mainScreen].bounds.size.height;
    screenWidth = [UIScreen mainScreen].bounds.size.width;



}

-(void) createRandomPoint:(id)sender {
    int randX = arc4random() % screenWidth;
    int randY = arc4random() % screenHeight;
    label.center = CGPointMake(randX, randY);
}