隐藏的XCode 4 UILabel似乎不起作用

时间:2012-01-27 18:00:38

标签: iphone objective-c xcode

我有一些显示问题,我操作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;
}

1 个答案:

答案 0 :(得分:4)

在方法执行期间没有完成绘图,它都是在下一个绘图周期完成的。如果上面的代码都以相同的方法执行,那么标签的最终状态将是可见的,因为您在任何绘图完成之前隐藏然后重新显示它。

如果您将问题扩展为包含更多上下文,则可以更轻松地提供解决方案。

看起来您正在获得一个您不想要的动画,因为您正在修改CALayer的可动画属性,为您提供隐式动画。有关如何覆盖隐式动画时间的指导,请参阅here - 请参阅“暂时禁用图层操作”

另一种方法是,您无意中动画,因为计时器方法排队等待更改,并且您的转换正在同时完成,因此它在动画中完成。在更改变换之前,您应该从标签中删除任何动画。