gpt4 book ai didi

macos - 如何在更改边界的动画期间强制重绘 CALayer

转载 作者:行者123 更新时间:2023-12-03 17:23:34 24 4
gpt4 key购买 nike

我有一个层托管的 NSView。其中我有一个 CALayer,其中包含一个 drawInContext 方法。 needDisplayOnBoundsChange 参数设置为 true,并且如果我调整 View 大小,则在动画期间确实会正确调整图层大小并重新绘制。

但是,我想独立于 View 对图层的大小进行动画处理。我可以设置一个动画来执行此操作,但是在动画过程中不会重新绘制图层。相反,似乎是为开始帧和结束帧拍摄快照,其中一个随着另一个淡入而淡出。更糟糕的是,随着动画的进行,两个图像都会扭曲到调整大小帧中。

如何强制 CALayer 在调整大小动画期间重绘自身?

谢谢

蒂姆

最佳答案

这可能太旧了,但解决方案应该不会太难。我不知道是否有更好的方法,但您可以使用 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];
}

关于macos - 如何在更改边界的动画期间强制重绘 CALayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13916657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com