我最終測試了@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做:) –
謝謝,這是非常有益的! –