我最终测试了@rickster建议的方法:将UIInterpolatingMotionEffect
连接到我的GLKView/GL View传递键定制,并检索它们。不幸的是,这个想法完全失败了。
首先,传递给UIInterpolatingMotionEffect
的键必须是UIView
的动画属性,并且不能是自定义变量/属性。考虑到大多数人不希望他们的整个背景以单向方向/强度的视差,这种方法将失败。
其次,你不能只检索值。如果您通过center.x
作为关键字,UIInterpolatingMotionEffect
将不会更新center.x
,因为这些更改被视为“动画”。因此,你有你检索动画center.x
,例如[[view.layer presentationLayer] center];
最后说明:只要在主线程中创建一个单独的UIView
,把它添加到您的UIViewController
,系统从中检索值(也主线程)。我发现这是迄今为止最简单的解决方案。因为我需要在一个单独的线程上检索这些值,所以我通常会将1值放在后面,因为我派发到主线程来检索当前值,同时检索最后一个值集(确保变量是线程安全的/原子的)。
编辑
由于其最佳进入主线程的表示层,但我的方法被称为一个线程,是不是主要的,我派遣主线程检索值,并将其放置在原子属性。然后我会返回线程外的atomic属性。这可以确保我的辅助线程不会被主线程阻塞,并且可以检索我需要的值。
这里是我以前从一个线程是不是主线程中检索值的代码:
@property (atomic) GLKVector2 currentOffset;
@property (atomic, readonly) GLKVector2 offset;
- (GLKVector2)offset
{
dispatch_async(dispatch_get_main_queue(), ^{
CGRect frame = [[self.view.layer presentationLayer] frame];
self.currentOffset = (GLKVector2){-frame.origin.x, -frame.origin.y};
});
return self.currentOffset;
}
你能提供在第4段,在这里回答你的问题更详细? –
@JohnStephen做:) –
谢谢,这是非常有益的! –