2014-09-27 19 views
4

每當我的文本在我的遊戲中改變(UILabel)時,它會將我運行(man)的人的UIImageView重置爲起始位置(屏幕左側)。更新UILabel在xCode iOS8中重置我的視圖

它在某種意義上幾乎充當了視圖控制器重置...不知道爲什麼。 所有的整數和變量都可以通過定時器更新,但只要我嘗試更改實際文本,就會重置爲起始位置。

這裏是我的NSTimer更新標籤:

-(void)updateLabels{ 
//update lightning strikes label 
[email protected]"Strikes Left: "; 
strikesLeftDisplay=[strikesLeftDisplay stringByAppendingString:[NSString stringWithFormat: @"%d", strikesLeft]]; 
lblLeft.text=strikesLeftDisplay; 
} 

這裏是我的onDidLoad:

- (void)viewDidLoad { 
currentScreenX=self.view.frame.size.width; 
currentScreenY=self.view.frame.size.height; 

currentLevel=1; 
runningSpeed=7; 
lightningSpeed=0.023; 
runnerImageNumber=0; 
strikesLeft=3; 

cloudImage.hidden=YES; 
boltImage.hidden=YES; 

runningMovement=[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(startRunning) userInfo:nil repeats:YES]; 

labelScanner=[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(updateLabels) userInfo:nil repeats:YES]; 



[super viewDidLoad]; 

} 

最後,這裏是我的startRunning方法:

- (void)startRunning{ 
if(livesLeft==0){[self endGame];} 

manX=man.frame.origin.x; 
manY=man.frame.origin.y; 

if([direction isEqualToString:@"left"] && touchX < (manX+20)){ 
    man.center=CGPointMake(man.center.x - runningSpeed,man.center.y); 
}else if([direction isEqualToString:@"right"] && touchX > (manX+22)){ 
    man.center=CGPointMake(man.center.x + runningSpeed,man.center.y); 
} 
else{ 
    [email protected]"0"; 
} 




//animate runner 
if ([direction isEqualToString:@"right"]){ 
    if(runnerImageNumber==1){UIImage *image=[UIImage imageNamed:@"run1.png"];[man setImage:image];} 
    if(runnerImageNumber==2){UIImage *image=[UIImage imageNamed:@"run2.png"];[man setImage:image];} 
    if(runnerImageNumber==3){UIImage *image=[UIImage imageNamed:@"run3.png"];[man setImage:image];} 
    if(runnerImageNumber==4){UIImage *image=[UIImage imageNamed:@"run4.png"];[man setImage:image];} 
    if(runnerImageNumber==5){UIImage *image=[UIImage imageNamed:@"run5.png"];[man setImage:image];} 
    if(runnerImageNumber==6){UIImage *image=[UIImage imageNamed:@"run6.png"];[man setImage:image];} 
    if(runnerImageNumber==7){UIImage *image=[UIImage imageNamed:@"run7.png"];[man setImage:image];} 
    if(runnerImageNumber==8){UIImage *image=[UIImage imageNamed:@"run8.png"];[man setImage:image];} 
    if(runnerImageNumber==9){UIImage *image=[UIImage imageNamed:@"run9.png"];[man setImage:image];} 
    runnerImageNumber++; 
    if(runnerImageNumber==9){runnerImageNumber=1;} 
} 
if ([direction isEqualToString:@"left"]){ 
    if(runnerImageNumber==1){UIImage *image=[UIImage imageNamed:@"run10.png"];[man setImage:image];} 
    if(runnerImageNumber==2){UIImage *image=[UIImage imageNamed:@"run11.png"];[man setImage:image];} 
    if(runnerImageNumber==3){UIImage *image=[UIImage imageNamed:@"run12.png"];[man setImage:image];} 
    if(runnerImageNumber==4){UIImage *image=[UIImage imageNamed:@"run13.png"];[man setImage:image];} 
    if(runnerImageNumber==5){UIImage *image=[UIImage imageNamed:@"run14.png"];[man setImage:image];} 
    if(runnerImageNumber==6){UIImage *image=[UIImage imageNamed:@"run15.png"];[man setImage:image];} 
    if(runnerImageNumber==7){UIImage *image=[UIImage imageNamed:@"run16.png"];[man setImage:image];} 
    if(runnerImageNumber==8){UIImage *image=[UIImage imageNamed:@"run17.png"];[man setImage:image];} 
    if(runnerImageNumber==9){UIImage *image=[UIImage imageNamed:@"run18.png"];[man setImage:image];} 
    runnerImageNumber++; 
    if(runnerImageNumber==9){runnerImageNumber=1;} 
} 






} 

回答

2

通常你看到這種類型的東西,因爲你直接設置視圖的框架(或中心或bounds.size),但你的應用程序我們es自動佈局。

當您更改標籤的文本時,標籤將自身標記爲需要佈局。這會使自動佈局運行,並根據它們的約束來設置視圖的框架,並撤銷對這些視圖的框架直接進行的任何更改。

而不是直接設置man.center,您需要修改控制man的X位置的約束的常量。如果您在xib或storyboard中創建約束,則可以將約束連接到插座(可能位於視圖控制器中)以訪問它。

你可能會更好地切換到SpriteKit爲您的遊戲。

+0

我嘗試通過故事板爲雙方以及底部設置(固定)該人的約束,但看起來它仍然在重置。 這似乎是唯一的打嗝,所以我寧願不使用全新的框架來更新UILabel。 – Anon 2014-09-27 04:40:17

+0

你是如何創建標籤的:xib,storyboard或code? – 2014-09-27 04:42:55

+0

我在故事板中創建了標籤 - – Anon 2014-09-27 04:46:21

4

我有同樣的問題。確保在Interface Builder文檔中使用自動佈局複選標記爲UNCHECKED!這爲我解決了這個問題。希望這可以幫助。

+0

你是我的救星。問題仍然發生在Xcode 6.1中,並且解決了這個問題。我選擇了我的UIView整個屏幕,並取消選擇「使用自動佈局」,我不再有問題。 – 2014-11-14 06:41:24

相關問題