zer*_*tas 2 xcode cocoa objective-c osx-lion
请参阅代码段.尝试使用NSViewAnimation淡入其主窗口.NIB只有一个窗口/菜单(例如,这个项目几乎是直接来自cocoa app向导).通过取消选中"在启动时可见",在NIB中修改了窗口.永远不会调用委托方法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
Run Code Online (Sandbox Code Playgroud)
这里有三个问题,其中一个肯定是不明显的.
首先,您的动画委托未被调用,因为您的委托方法的消息签名不正确,它应该是:
- (BOOL)animationShouldStart:(NSAnimation*) _anim
Run Code Online (Sandbox Code Playgroud)
其次,要在一个窗口中消失,你需要自己通过窗口作为对象NSViewAnimationTargetKey,而不是它的内容视图.
第三,如果窗口在屏幕上,但与零阿尔法值的效果淡入淡出窗口只会工作.
因此,在代码块的顶部插入:
[self.window orderFront:self];
[self.window setAlphaValue:0.0];
Run Code Online (Sandbox Code Playgroud)
这应该使窗口淡入动画工作就好了.但请注意,因为您没有更改窗口框架,所以可以将动画字典缩短为:
NSDictionary *fadeInAttrs = [NSDictionary dictionaryWithObjectsAndKeys:
_window, NSViewAnimationTargetKey,
NSViewAnimationFadeInEffect, NSViewAnimationEffectKey,
nil];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2066 次 |
| 最近记录: |