ios – setNeedsDisplay在块内不起作用

前端之家收集整理的这篇文章主要介绍了ios – 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];

    }];    
}

解决方法

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

将其添加到您的块:

dispatch_async(dispatch_get_main_queue(),^{
    [hv setNeedsDisplay];
});

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

猜你在找的iOS相关文章