2012-12-17 60 views
1

我有一個圖層託管NSView。在那裏我有一個包含drawInContext方法的CALayer。 needsDisplayOnBoundsChange參數設置爲true,並且如果我調整視圖的大小,那麼在動畫期間圖層的大小會正確調整並重新繪製。如何在改變邊界的動畫期間強制刷新CALayer

但是,我想動畫獨立於視圖的圖層大小。我可以設置一個動畫來做到這一點,但是在動畫過程中圖層不會被重新繪製。相反,似乎快照是爲開始和結束幀拍攝的,其中一個在另一個淡入時淡出。更糟的是,隨着動畫的進展,兩個圖像都會變形爲調整大小的幀。

如何在調整動畫大小期間強制CALayer重繪自己?

感謝,

回答

0

這可能是太舊了,但辦法不應太硬。我不知道是否有更好的方法,但您可以使用CADisplayLink設置您的圖層需要重繪。

- (void)updateContinuously 
{ 
    if(!self.displayLink) { 
     self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateLayer)]; 
     [self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes]; 
    } 
} 

- (void)stopUpdatingContinuously 
{ 
    [self.displayLink invalidate]; 
    self.displayLink = nil; 
} 

- (void)update 
{ 
    // This will fire every time when the display is redrawn 
    [self setNeedsDisplay]; 
} 

- (void)updateContinuouslyForTime:(NSTimeInterval)seconds 
{ 
    // Create an NSTimer that will remove the displayLink when the time is over 
    NSTimer *stopTimer = [NSTimer scheduledTimerWithTimeInterval:seconds target:self selector:@selector(stopUpdatingContinuously) userInfo:nil repeats:NO]; 
    [[NSRunLoop mainRunLoop] addTimer:stopTimer forMode:NSRunLoopCommonModes]; 
}