【发布时间】:2013-01-05 18:26:30
【问题描述】:
我正在尝试为NSTextField 编写一个类别,它将添加一个新方法setAnimatedStringValue。这个方法应该很好地淡出当前文本,然后设置新文本,然后淡入。
下面是我的实现:-
- (void) setAnimatedStringValue:(NSString *)aString {
if ([[self stringValue] isEqualToString:aString]) {
return;
}
NSMutableDictionary *dict = Nil;
NSViewAnimation *fadeOutAnim;
dict = [NSDictionary dictionaryWithObjectsAndKeys:self, NSViewAnimationTargetKey,
NSViewAnimationFadeOutEffect, NSViewAnimationEffectKey, nil];
fadeOutAnim = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:
dict, nil]];
[fadeOutAnim setDuration:2];
[fadeOutAnim setAnimationCurve:NSAnimationEaseOut];
[fadeOutAnim setAnimationBlockingMode:NSAnimationBlocking];
NSViewAnimation *fadeInAnim;
dict = [NSDictionary dictionaryWithObjectsAndKeys:self, NSViewAnimationTargetKey,
NSViewAnimationFadeInEffect, NSViewAnimationEffectKey, nil];
fadeInAnim = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:
dict, nil]];
[fadeInAnim setDuration:3];
[fadeInAnim setAnimationCurve:NSAnimationEaseIn];
[fadeInAnim setAnimationBlockingMode:NSAnimationBlocking];
[fadeOutAnim startAnimation];
[self setStringValue:aString];
[fadeInAnim startAnimation];
}
不用说,但上面的代码根本不起作用。我看到的唯一效果是同一窗口上的进度条闪烁。这可能是因为我在尝试“动画”它时阻塞了主运行循环。
请指出上述代码有什么问题。
补充说明:
setAnimatedStringValue 始终由 NSTimer 调用,该 NSTimer 添加到主 NSRunLoop。
【问题讨论】:
标签: objective-c cocoa osx-lion