如果你试着
[self.view performSelector:@selector(setUserInteractionEnabled:) withObject:[NSNumber numberWithBool:YES] afterDelay:2];在64位 iPhone (甚至在模拟器上),用户交互将被禁用。不管以前的状态如何。
不过,这一行可以在32位 iPhones上工作。
,这是操作系统中的一个bug吗?我错过了什么吗?
发布于 2014-04-03 20:35:05
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;
});发布于 2014-04-03 20:36:11
实际上,第一个param不是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];
});https://stackoverflow.com/questions/22848151
复制相似问题