2014-06-18 66 views
0

我的意思是,如果我創建了一個UILabel,我怎樣才能使它在屏幕視圖內定期更改爲隨機點?我會使用arc4random之類的東西,還是像隨機CGPointMake之類的東西?如何隨機更改UILabel位置?

我會改變它每秒左右使用這樣的事情

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

,但我只是不知道如何得到它的「重生」,在隨機的地方,如果可能的話,再到刪除另一個。

一個簡單的版本也將是,如果我剛纔說了,4個不同的UILabels,我怎麼能讓它隨機出現在4中的一個,然後將時間間隔後刪除?我想我可以使用類似

int randomNumber = rand() % 4; 

,然後把開關在那裏,但我不知道這是正確的方式做到這一點無論是。

回答

0

你有,你要移動到不同的點在屏幕上一個標籤?或者你是否添加了多個標籤?

是否使用自動佈局或不? (如果你使用自動佈局,那麼你不能只移動標籤 - 而是需要修改它的位置限制,這會變得更復雜一點。)

至於如何移動它,我會建議使用arc4random_uniform來計算標籤中心的新位置。

你可以把如下代碼到您的計時器方法。在下面的代碼中,「view」是包含您的標籤的視圖。

下面的代碼通過將中心移動到不超過其父視圖邊緣的一半,而不是標籤寬度的一半&高度,使標籤在屏幕上完全可見。

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新的位置:動畫改變中心點在動畫塊。

同樣,如果你正在使用自動版式,你需要連接中心X和芯Y約束網點,並改變它們的值設置到移動的標籤。

+0

好吧,我有這方面的一些問題。我是否必須導入框架以符合寬度和高度?因爲我得到錯誤「struct CGRect」中沒有名爲「width」的成員。 應該是_view而不是視圖?因爲它也出現了一個錯誤,試圖讓我糾正它。 或者我應該用我的號碼替換它? –

+0

我讀過你之前寫的內容,但是我不確定自己是否有自動佈局,並且對視圖部分不完全確定。 –

+0

我發佈的代碼中存在拼寫錯誤。你應該能夠解決這個問題。 CGRect的定義是什麼?它是否有寬度屬性?去看看文檔。在CGRect上搜索並查看定義。 –

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