setNeedsDisplay在块内不起作用

jor*_*mol 7 ios objective-c-blocks setneedsdisplay

我正在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];

    }];    
}
Run Code Online (Sandbox Code Playgroud)

coc*_*ero 12

这是因为您在与主线程不同的线程上调用UI方法.

将其添加到您的块:

dispatch_async(dispatch_get_main_queue(), ^{
    [hv setNeedsDisplay];
});
Run Code Online (Sandbox Code Playgroud)

请记住,必须从主线程调用任何处理用户界面元素的方法.