這可能是我在使用Core Animation時對調用堆棧的理解不夠,但有些事情讓我對調用drawInContext的人/什麼感到困惑。CABasicAnimation對drawInContext的調用導致實例變量重置爲零
可以說我有
@interface PlayerLayer : CALayer
{
int Foo;
}
,我初始化美孚在init進程是這樣的
-(void) init
{
if(self = [super init])
{
Foo = 123;
}
}
當drawInContext首次調用,打印出富
- (void)drawInContext:(CGContextRef)ctx
{
NSLog(@"Foo: %d", Foo)
}
的第一次'drawInContext'在圖層被添加並且setNeedsDisplay觸發該調用時被調用,Foo = 123因爲它應該。
例如,我有一個名爲「Bar」的屬性鍵設置動畫,其中'needsDisplayForKey'爲鍵「Bar」返回YES。當這個動畫觸發'drawInContext'時,所有的實例變量都被設置爲0,並且這樣Foo輸出爲0. 'self'指針值已經改變。
任何人都可以照亮爲什麼drawInContext似乎是從其他一些神奇的位置調用的,而不是從我期望它的圖層的實例中調用?
這意味着我已經存儲在實例中的任何狀態變量不能:-(
謝謝奧萊,我認爲可能是這樣,所以我給了它一個去。 您是否知道在文檔中我可能會發現有關複製過程的信息? 或者,您是否有ide關於如何從動畫中訪問這些數據? – Fuzz 2010-06-27 10:18:06
你是對的Ole,除了屬性似乎不會被自動複製。相反,用戶可以覆蓋initWithLayer並強制自定義屬性被複制。 參見: http://stackoverflow.com/questions/2797103/how-is-the-presentation-layer-of-a-calayer-generated – Fuzz 2010-06-27 10:36:15