2012-01-27 64 views
2

我遇到一些麻煩顯示器,其中我操縱一個UILabel,即使我用的XCode 4的UILabel隱藏似乎不工作

myLabel.hidden=YES; ...manipulation code... myLabel.hidden=NO;

標籤從來沒有「隱藏」和操縱(顯示CATransform3DMakeRotation)(您可以看到標籤翻轉)。

在XCode中,我在「myLabel.hidden = YES;」處設置了一個斷點行,但是當我遍歷代碼時,它不會隱藏。

我必須缺少一些東西才能實現「隱藏」方法,對吧? 某種刷新或更新標籤? 謝謝...

這是代碼。 「SetStartPosition」是從幾個地方調用的,而不僅僅是「doubleTap」。

-(void)doubleTap{ 
    //stop the timer 
    [myMover invalidate]; //the timer simply moves the label position 
    myMover = nil; 
    msgLabel.hidden=YES; 
    isMirrored=!isMirrored; 
    [self setStartPosition]; //flips the label 
    msgLabel.hidden=NO; 
    //restart the timer 
    [self runMover]; 
} 

- (void)setStartPosition{ 
    if(isMirrored){ 
     startPosition=(msgLabel.frame.size.width/2) * -1; 
     msgLabel.layer.transform = CATransform3DMakeRotation(M_PI, 0.0f, 1.0f, 0.0f); //M_PI rotates 180 degrees 
    }else{ 
     startPosition=(screenHeight)+(msgLabel.frame.size.width/2); 
     msgLabel.layer.transform = CATransform3DMakeRotation(0.0, 0.0f, 1.0f, 0.0f); //0.0 rotate to normal 
    } 
    newX=startPosition; 
    newY=screenWidth/2; 
    newFrame = msgLabel.frame; 
    newFrame.size.height = screenWidth; 
    newFrame.origin.x =newX; 
    newFrame.origin.y=newY; 
    msgLabel.frame = newFrame; 
} 
+0

您是否檢查過myLabel不是'nil'? – Zaphod 2012-01-27 18:03:33

回答

4

在方法執行過程中沒有繪圖,它都在下一個繪圖週期完成。如果上面的代碼全部在同一個方法中執行,那麼標籤的最終狀態將是可見的,因爲在任何繪製完成之前,您都隱藏並重新顯示它。

如果您擴展您的問題以包含更多上下文,則提供解決方案將更加容易。

看起來好像您正在獲取不想要的動畫,因爲您正在修改CALayer的動畫屬性,併爲您提供隱式動畫。請參閱here以獲取有關如何覆蓋隱式動畫的時間的指導 - 請參閱「臨時禁用圖層操作」

另一種方法是您無意中進行了動畫製作,因爲計時器方法已排隊等待更改,而您的變換是在同一時間完成,所以它在動畫中完成。在更改變換之前,您應該從標籤中刪除任何動畫。

+1

假設您可以看到標籤翻轉,您正在使用動畫進行此操作,您希望在動畫處理器中使用'myLabel.hidden = NO'。 – smparkes 2012-01-27 18:06:58

+0

@jrturton解釋它。基本上,我用同樣的方法執行以下操作(僞代碼):'隱藏標籤,執行變換的方法,顯示標籤'那麼我該怎麼做?有沒有辦法強制繪圖循環? – wayneh 2012-01-27 18:07:21

+0

@smparkes - 這也是我的猜測,但我不喜歡在答案中猜測太多! – jrturton 2012-01-27 18:08:13