我正在使用cmmotionmanager来检索加速度计数据.问题是加速度计数据会定期打印,实例变量会在视图中更改,但视图不会重新绘制.我已经检查过hv不是零,而且一切都搞定了.在块中调用setNeedsdisplay是否有问题?
-(void) viewDidAppear:(BOOL) animated
{
[super viewDidAppear: animated];
[motionManager startAccelerometerUpdatesToQueue:motionQueue withHandler:
^(CMAccelerometerData *accelerometerData,NSError *error)
{
NSLog(@"%@",accelerometerData);
HypnosisView *hv = (HypnosisView *) [self view];
hv.xShift = 10.0 * accelerometerData.acceleration.x;
hv.yShift = -10.0 * accelerometerData.acceleration.y;
[hv setNeedsdisplay];
}];
}
解决方法
这是因为您在与主线程不同的线程上调用UI方法.
将其添加到您的块:
dispatch_async(dispatch_get_main_queue(),^{
[hv setNeedsdisplay];
});
请记住,必须从主线程调用任何处理用户界面元素的方法.