如果您尝试
[self.view performSelector:@selector(setUserInteractionEnabled:) withObject:[NSNumber numberWithBool:YES] afterDelay:2];
64位 iPhone (即使在模拟器上)将禁用用户互动。无论以前的状态如何。
此行适用于 32位 iPhone。
这是操作系统中的错误吗?我错过了什么吗?
答案 0 :(得分:3)
setUserInteractionEnabled:
需要一个BOOL
参数,但您发送的是NSNumber
。您的代码在32位环境中偶然发挥作用,但
[self.view performSelector:@selector(setUserInteractionEnabled:) withObject:[NSNumber numberWithBool:NO] afterDelay:2];
即使在32位(当我测试它时),也不会将属性重置为NO
,所以确实如此
没有真正的工作。
解决此问题的最简单方法是使用GCD:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.view.userInteractionEnabled = YES;
});
答案 1 :(得分:2)
实际上,第一个参数不是NSNumber,而是BOOL。 只需将其重构为:
double delayInSeconds = 2.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.view setUserInteractionEnabled:YES];
});