我有一些显示问题,我操作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 :(得分:4)
在方法执行期间没有完成绘图,它都是在下一个绘图周期完成的。如果上面的代码都以相同的方法执行,那么标签的最终状态将是可见的,因为您在任何绘图完成之前隐藏然后重新显示它。
如果您将问题扩展为包含更多上下文,则可以更轻松地提供解决方案。
看起来您正在获得一个您不想要的动画,因为您正在修改CALayer的可动画属性,为您提供隐式动画。有关如何覆盖隐式动画时间的指导,请参阅here - 请参阅“暂时禁用图层操作”
另一种方法是,您无意中动画,因为计时器方法排队等待更改,并且您的转换正在同时完成,因此它在动画中完成。在更改变换之前,您应该从标签中删除任何动画。