在我的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秒延迟时发生,两者都应该设置隐藏在“performSelector
”hideThem
“{{1}}之后”隐藏“。{/ p>
IOS怎么会导致这种行为?
解决此问题的建议方法是什么(以便在3秒后,两个图像同时隐藏,视觉上。
答案 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秒增量。)
简而言之......一个奇怪的编码错误。 再次感谢!