我创建一个NSView作为叠加视图。在将其添加为另一个视图的子视图后,我想将其alpha值从0设置为0.5。我正在做以下但我从未看到视图的alpha动画为0.5。我知道视图已被正确添加,因为我看到它,如果我将它的backgroundcolor设置为具有完整的alpha。我错过了一些简单的东西吗?
self.overlayView = [[MyOverlayView alloc] initWithFrame:frameRect];
self.overlayView.layer.backgroundColor = CGColorCreateGenericRGB(0., 0., 0., 0.0);
[self.window.contentView addSubview:self.overlayView];
__typeof__(self) __weak weakSelf = self;
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
context.duration = 1;
weakSelf.overlayView.animator.alphaValue = 0;
}
completionHandler:^{
weakSelf.overlayView.alphaValue = 0.5;
}];
我也尝试过这样的事情:
[[self.overlayView animator] setAlphaValue:1.0];
您需要将wantsLayer设置为YES。背景颜色也应该具有1.0而不是0.0的alpha。
self.overlayView = [[MyOverlayView alloc] initWithFrame:frameRect];
self.overlayView.wantsLayer=YES;
self.overlayView.layer.backgroundColor = CGColorCreateGenericRGB(0., 0., 0., 1.0);
[self.window.contentView addSubview:self.overlayView];
__typeof__(self) __weak weakSelf = self;
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
context.duration = 1;
weakSelf.overlayView.animator.alphaValue = 0;
}
completionHandler:^{
weakSelf.overlayView.alphaValue = 0.5;
}];
只需用这条线替换
[self.window.contentView addSubview:self.overlayView];
有了这个
[self.window.contentView.animator addSubview:self.overlayView];
动画将正常工作
你需要动画的视图上需要wantsLayer
,还需要animator
代理对象
let textField = NSTextField()
textField.wantsLayer = true
NSAnimationContext.runAnimationGroup({ context in
context.duration = 1.0
textField.stringValue = "\(emoji.visual) copied to clipboard"
textField.animator().alphaValue = 1.0
}, completionHandler: {
self.textField.alphaValue = 0.0
})