IOS:使用performSelector在屏幕上隐藏图像的时间问题

时间:2013-04-27 13:20:38

标签: ios

在我的ViewController中,我尝试同时隐藏两个图像(当前显示),但是在延迟3秒后。我用

[self performSelector:@selector(hideThem:) withObject:val afterDelay:3.0];

其中“hideThem”是使用以下内容隐藏图像的例程。 “val”只是NSNumber,对这个问题并不重要。

  [image1 setHidden:YES];  
  [image2 setHidden:YES];

如果我直接拨打“hideThem”(不使用performSelector),则两张图片会在同一时间消失,这是理想的效果。

如果,我使用performSelector,如图所示,一个图像将隐藏,然后0.5秒(左右),另一个图像将隐藏。我没有自己的运行循环。图像是UIImageView个对象,是“self”下视图层次结构的一部分。

我认为这是IOS如何处理事件时间的效果,但我不明白为什么setHidden的效果会在0.5秒延迟时发生,两者都应该设置隐藏在“performSelectorhideThem“{{1}}之后”隐藏“。{/ p>

IOS怎么会导致这种行为?

解决此问题的建议方法是什么(以便在3秒后,两个图像同时隐藏,视觉上。

4 个答案:

答案 0 :(得分:0)

我无法弄清楚为什么会出现这样的问题,但我可以使用GCD为您提供替代方案:

double delayInSeconds = 3.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [self hideThem];
});

答案 1 :(得分:0)

1) 我可以在方法调用:中看到冒号@selector(hideThem:),仔细检查hideThem方法是否接受输入参数。

2) 请务必致电此[self performSelector:@selector(hideThem:) withObject:val afterDelay:3.0]; 在主线程上

试,

performSelectorOnMainThread

答案 2 :(得分:0)

想法[我首先考虑过2,但我怀疑1会做到这一点]:

1)不要设置隐藏属性,而是使用UIView动画将它们的两个alpha分别设置为0,比如100ms,并在完成块中将其隐藏属性设置为YES并将其alpha重置为1。

2)不要立即隐藏两个视图,而是创建一个新视图来覆盖它们。你甚至可以对它们下面的内容进行“快照”并从中创建一个图像:

  • 创建一个可暂时用于覆盖您要隐藏的两个图像的图像。

  • 在适当的时候,将该视图作为最顶层的视图添加到层​​次结构中。

  • 隐藏其下的两个视图

  • 删除临时视图

答案 3 :(得分:0)

我找到了罪魁祸首。感谢所有帮助我隔离问题的建议。而且,David H ......非常有趣的想法,随着项目的继续,我可能会真正使用它们。

答案是:在经过大量搜索,评论代码和使用日志跟踪事物之后,我终于找到了另一个相关的performSelector,它在其他地方被调用,时间范围为2秒(因此,我认为显示了一个。图像隐藏之间5秒增量。)

简而言之......一个奇怪的编码错误。 再次感谢!