将视图的alpha动画从0设置为0.5

问题描述 投票:2回答:3

我创建一个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];
objective-c cocoa animation nsview alpha
3个回答
3
投票

您需要将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;
}];

0
投票

只需用这条线替换

[self.window.contentView addSubview:self.overlayView];

有了这个

[self.window.contentView.animator addSubview:self.overlayView];

动画将正常工作


0
投票

你需要动画的视图上需要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
})
© www.soinside.com 2019 - 2024. All rights reserved.