2012-01-27 67 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