我有一个图层托管NSView。在其中我有一个包含drawInContext方法的CALayer。 needsDisplayOnBoundsChange参数设置为true,如果我调整视图大小,那么图层确实会在动画期间正确调整大小并重新绘制。
但是,我想独立于视图设置图层的大小。我可以设置动画来执行此操作,但在动画期间不会重绘图层。相反,似乎是为开始帧和结束帧拍摄了一个快照,而另一帧则逐渐消失。更糟糕的是,随着动画的进行,两个图像都被扭曲到调整大小帧中。
如何在调整大小动画期间强制CALayer重绘自己?
谢谢,
添
答案 0 :(得分: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];
}