gpt4 book ai didi

objective-c - 使用 NSViewAnimation 无法淡入窗口

转载 作者:行者123 更新时间:2023-12-03 16:26:13 25 4
gpt4 key购买 nike

查看代码片段。尝试使用 NSViewAnimation 淡入其主窗口。 NIB 只有一个窗口/菜单(例如,这个项目几乎直接来自 cocoa 应用程序向导)。通过取消选中“启动时可见”,该窗口已在 NIB 中进行了修改。委托(delegate)方法animationShouldStart 永远不会被调用。如果重要的话,我使用的是 xcode 4.2 中的 10.7。

我从根本上不明白为什么这不起作用。请给我一些启发。

谢谢

#import "TestAppDelegate.h"

@implementation TestAppDelegate

@synthesize window = _window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
// [[self window] orderFront: self];
NSRect _saveRect = [_window frame];
NSRect _zeroRect = _saveRect;
_zeroRect.size = NSMakeSize(0, 0);
NSDictionary *fadeInAttrs = [NSDictionary dictionaryWithObjectsAndKeys:
[_window contentView], NSViewAnimationTargetKey,
NSViewAnimationFadeInEffect, NSViewAnimationEffectKey,
[NSValue valueWithRect:_zeroRect], NSViewAnimationStartFrameKey,
[NSValue valueWithRect:_saveRect], NSViewAnimationEndFrameKey,
nil];

NSViewAnimation *_viewAnimIn = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects: fadeInAttrs, nil]];

[_viewAnimIn setDuration:1.0];
[_viewAnimIn setAnimationCurve:NSAnimationEaseInOut];
[_viewAnimIn setAnimationBlockingMode:NSAnimationBlocking];
[_viewAnimIn setDelegate:self];
[_viewAnimIn startAnimation];
}

- (BOOL)animation:(NSAnimation *)animation animationShouldStart:(NSAnimation*) _anim
{
NSLog(@"%@ shouldStart", _anim);
return YES;
}

@end

最佳答案

这里存在三个问题,其中之一绝对不是显而易见的。

首先,您的动画委托(delegate)没有被调用,因为您的委托(delegate)方法的消息签名不正确,它应该是:

- (BOOL)animationShouldStart:(NSAnimation*) _anim

其次,要淡入窗口,您需要将窗口本身作为 NSViewAnimationTargetKey 的对象传递,而不是其内容 View 。

第三,窗口淡入效果仅在窗口位于屏幕上且 alpha 值为零时才起作用。

因此,在代码块的顶部插入以下内容:

[self.window orderFront:self];
[self.window setAlphaValue:0.0];

这应该会使窗口淡入动画效果很好。但是,请注意,由于您没有更改窗口框架,因此可以将动画字典缩短为:

NSDictionary *fadeInAttrs = [NSDictionary dictionaryWithObjectsAndKeys:
_window, NSViewAnimationTargetKey,
NSViewAnimationFadeInEffect, NSViewAnimationEffectKey,
nil];

关于objective-c - 使用 NSViewAnimation 无法淡入窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6836827/

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