Objective c 如何使用Objective C淡入动画隐藏/显示窗口
在Objective C中,是否可以在启动时隐藏我的应用程序窗口,然后在某个时间点进行调用以制作令人愉快的淡入淡出动画来显示我的应用程序窗口 并不是说你需要知道这一点,但背景是我正计划通过webkit小部件中的Javascript实现这一点。我已经建立了Objective C Javascript桥。因此,当我的图表完成加载时,我从Javascript调用Objective C,告诉它以令人愉快的淡入淡出动画显示窗口 这是我尝试过的,但没有褪色效果——窗口只需等待一秒钟(因为这些图表正在加载),然后快速弹出屏幕。我尝试更改NSThread延迟,但没有任何帮助--这只会使其速度减慢Objective c 如何使用Objective C淡入动画隐藏/显示窗口,objective-c,macos,cocoa,animation,fade,Objective C,Macos,Cocoa,Animation,Fade,在Objective C中,是否可以在启动时隐藏我的应用程序窗口,然后在某个时间点进行调用以制作令人愉快的淡入淡出动画来显示我的应用程序窗口 并不是说你需要知道这一点,但背景是我正计划通过webkit小部件中的Javascript实现这一点。我已经建立了Objective C Javascript桥。因此,当我的图表完成加载时,我从Javascript调用Objective C,告诉它以令人愉快的淡入淡出动画显示窗口 这是我尝试过的,但没有褪色效果——窗口只需等待一秒钟(因为这些图表正在加载),
// ...in my app delegate...
- (void)applicationWillFinishLaunching:(NSNotification *)aNotification
{
// NOTE THIS SAYS "WILL", NOT "DID" -- VERY IMPORTANT.
// TO DO OTHERWISE WOULD GIVE YOU A WINDOW FLASH FOR A SECOND,
// THEN FADE IN.
[self hideWindow:_window];
}
- (void)hideWindow:(NSWindow *)window
{
float alpha = 0.0;
[window setAlphaValue:alpha];
[window makeKeyAndOrderFront:self];
}
- (void)showWindow:(NSWindow *)window
{
float alpha = 1.0;
[window setAlphaValue:alpha];
[window makeKeyAndOrderFront:self];
}
- (void)fadeOutWindow:(NSWindow*)window
{
float alpha = 1.0;
[window setAlphaValue:alpha];
[window makeKeyAndOrderFront:self];
for (int x = 0; x < 10; x++) {
alpha -= 0.1;
[window setAlphaValue:alpha];
[NSThread sleepForTimeInterval:0.020];
}
}
- (void)fadeInWindow:(NSWindow*)window
{
float alpha = 0.0;
[window setAlphaValue:alpha];
[window makeKeyAndOrderFront:self];
for (int x = 0; x < 10; x++) {
alpha += 0.1;
[window setAlphaValue:alpha];
[NSThread sleepForTimeInterval:0.020];
}
}
// My javascript to ObjC bridge calls this:
- (void)callShowAppWindow;
{
[self fadeInWindow:_window];
}
/…在我的应用程序代理中。。。
-(无效)应用程序将完成启动:(NSNotification*)通知
{
//请注意,这表示“愿意”,而不是“做过”——非常重要。
//否则会让你在窗口闪烁一秒钟,
//然后淡入。
[自隐藏窗口:_窗口];
}
-(无效)隐藏窗口:(NSWindow*)窗口
{
浮动α=0.0;
[窗口设置alphavalue:alpha];
[车窗MakeKeyandDerfront:self];
}
-(无效)显示窗口:(NSWindow*)窗口
{
浮动α=1.0;
[窗口设置alphavalue:alpha];
[车窗MakeKeyandDerfront:self];
}
-(无效)淡出窗口:(NSWindow*)窗口
{
浮动α=1.0;
[窗口设置alphavalue:alpha];
[车窗MakeKeyandDerfront:self];
对于(int x=0;x<10;x++){
α-=0.1;
[窗口设置alphavalue:alpha];
[NSThread sleepForTimeInterval:0.020];
}
}
-(无效)fadeInWindow:(NSWindow*)窗口
{
浮动α=0.0;
[窗口设置alphavalue:alpha];
[车窗MakeKeyandDerfront:self];
对于(int x=0;x<10;x++){
α+=0.1;
[窗口设置alphavalue:alpha];
[NSThread sleepForTimeInterval:0.020];
}
}
//我的javascript到ObjC桥调用以下内容:
-(无效)callShowAppWindow;
{
[self fadeInWindow:_window];
}
与其隐藏窗口,不如创建一个占用初始窗口空间的启动/加载页面,然后在数据加载或应用程序准备就绪后使用实际窗口制作一些奇特的动画?与其隐藏窗口,不如创建一个占用初始窗口空间的启动/加载页面然后在数据加载或应用程序准备就绪后,用实际窗口制作一些奇特的动画?在我的源代码中,关于这个问题,我差点就搞定了。以下是导致淡入淡出效果的两个函数的修复:
- (void)fadeOutWindow:(NSWindow*)window
{
float alpha = 1.0;
[window setAlphaValue:alpha];
[window makeKeyAndOrderFront:self];
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:1.5f];
[[window animator] setAlphaValue:0.f];
[NSAnimationContext endGrouping];
}
- (void)fadeInWindow:(NSWindow*)window
{
float alpha = 0.0;
[window setAlphaValue:alpha];
[window makeKeyAndOrderFront:self];
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:1.5f];
[[window animator] setAlphaValue:1.f];
[NSAnimationContext endGrouping];
}
在我关于这个问题的消息来源中,我差点就知道了。以下是导致淡入淡出效果的两个函数的修复:
- (void)fadeOutWindow:(NSWindow*)window
{
float alpha = 1.0;
[window setAlphaValue:alpha];
[window makeKeyAndOrderFront:self];
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:1.5f];
[[window animator] setAlphaValue:0.f];
[NSAnimationContext endGrouping];
}
- (void)fadeInWindow:(NSWindow*)window
{
float alpha = 0.0;
[window setAlphaValue:alpha];
[window makeKeyAndOrderFront:self];
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:1.5f];
[[window animator] setAlphaValue:1.f];
[NSAnimationContext endGrouping];
}
只需使用
NSAnimationContext
动画来设置alpha
属性的动画:
- (void)fadeInWindow:(NSWindow *)window {
[window setAlphaValue:0.0];
[window makeKeyAndOrderFront:self];
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
[context setDuration:2.0];
[window setAlphaValue: 1.0f];
} completionHandler:^{ // or put nil instead of block
NSLog(@"Completed");
}];
}
使用相同的方法淡出您的窗口:
- (void)fadeOutWindow:(NSWindow*)window {
[window setAlphaValue:1.0f];
[window makeKeyAndOrderFront:self];
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
[context setDuration:2.0];
[window setAlphaValue: 0.0f];
} completionHandler:nil];
}
您甚至可以将其组合到一种方法中:
- (void)fadeWindow:(NSWindow *)window in:(BOOL)in {
[window setAlphaValue: in ? 0.0f : 1.0f];
[window makeKeyAndOrderFront: self];
[NSAnimationContext runAnimationGroup: ^(NSAnimationContext *context) {
[context setDuration: 2.0f]; // or whatever you need
[window setAlphaValue: in ? 1.0f : 0.0f];
} completionHandler: nil];
}
只需使用
NSAnimationContext
动画来设置alpha
属性的动画:
- (void)fadeInWindow:(NSWindow *)window {
[window setAlphaValue:0.0];
[window makeKeyAndOrderFront:self];
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
[context setDuration:2.0];
[window setAlphaValue: 1.0f];
} completionHandler:^{ // or put nil instead of block
NSLog(@"Completed");
}];
}
使用相同的方法淡出您的窗口:
- (void)fadeOutWindow:(NSWindow*)window {
[window setAlphaValue:1.0f];
[window makeKeyAndOrderFront:self];
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
[context setDuration:2.0];
[window setAlphaValue: 0.0f];
} completionHandler:nil];
}
您甚至可以将其组合到一种方法中:
- (void)fadeWindow:(NSWindow *)window in:(BOOL)in {
[window setAlphaValue: in ? 0.0f : 1.0f];
[window makeKeyAndOrderFront: self];
[NSAnimationContext runAnimationGroup: ^(NSAnimationContext *context) {
[context setDuration: 2.0f]; // or whatever you need
[window setAlphaValue: in ? 1.0f : 0.0f];
} completionHandler: nil];
}
你试过给字母值设置动画吗?很好。我已经更新了问题的一些来源,关于我到目前为止所做的尝试。不幸的是,它没有褪色,只是在屏幕上弹出。你是否尝试过为字母值设置动画?很好。我已经更新了问题的一些来源,关于我到目前为止所做的尝试。不幸的是,它没有褪色,只是突然出现在屏幕上。现在闪屏太过时了。拥有它们的应用越来越少了。现在闪屏太过时了。拥有它们的应用越来越少。谢谢你的解决方案!组合函数非常简洁。尽管我不得不使用
[window.animator setAlphaValue:fadeIn?1.0:0.0]代码>而不是[窗口设置alphavalue:fadeIn?1.0:0.0]代码>让它工作。感谢您的解决方案!组合函数非常简洁。尽管我不得不使用[window.animator setAlphaValue:fadeIn?1.0:0.0]代码>而不是[窗口设置alphavalue:fadeIn?1.0:0.0]代码>以使其工作。