Не допускается касание пользовательского интерфейса чем-либо, кроме основного потока, что приведет к странному поведению или сбоям. На iOS 4.0 или более поздней версии вы должны использовать что-то вроде
- (void)bang:(float)intensity {
dispatch_async(dispatch_get_main_queue(), ^{
self.view.backgroundColor = [UIColor colorWithWhite:intensity alpha:1];
});
}
Или вариант NSOperationQueue
- (void)bang:(float)intensity {
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
self.view.backgroundColor = [UIColor colorWithWhite:intensity alpha:1];
}];
}
В iOS 3.2 или более ранней версии вы можете использовать [self performSelectorOnMainThread:@selector(setViewBackgroundColor:) withObject:[UIColor colorWithWhite:intensity alpha:1] waitUntilDone:NO]
, а затем просто определить
- (void)setViewBackgroundColor:(UIColor *)color {
self.view.backgroundColor = color;
}
Обратите внимание, что вызов [self.view performSelectorOnMainThread:@selector(setBackgroundColor:) withObject:[UIColor colorWithWhite:intensity alpha:1] waitUntilDone:NO]
небезопасен, поскольку свойство view
UIViewController не является поточно-ориентированным.