2012-11-26 60 views
3

我有一個NSTextField作爲標籤,顯示一個字符串。 我想從右到左爲這個標籤設置動畫,如果它的內容太大而無法一次顯示。水平設置動畫標籤(NSTextField)

到目前爲止,我已經使用NSTimer來完成這項工作,但它工作正常,但這不是一個很好的解決方案。 標籤以表格視圖顯示在NSTextFieldCell中。 他們經常失去同步,我想這只是吃掉了很多CPU/GPU資源。

有沒有另一種方式與Core Animation做到這一點?

我與層試了一下,你可以看到在這裏: CALayer and drawRect

,但我沒有得到它的工作無論是。

我真的很感謝你的幫助。

+0

你試試這個... http://stackoverflow.com/questions/7266766/making-uitextview-scroll-programmatically –

+0

它與一個計時器,而這正是我想避免做什麼。 – NSAddict

+0

我不擅長動畫中的可可。 NSAnimation會做butttttt ...它再次使用計時器調用隱式。 –

回答

6

你可以簡單的動畫的NSTextField的位置和動畫師像

[[textField animator] setFrameOrigin:NSMakePoint(x,y)]; 

你也可以將它嵌入到這樣的「CATrancation」代碼:

[CATransaction begin]; 
[CATransaction setAnimationDuration:0.5]; 
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]]; 
[[textField animator] setFrameOrigin:NSMakePoint(x,y)]; 
[CATransaction commit]; 

如果你需要動畫的委託,就可以使用CABasicAnimation

CABasicAnimation* animation = [CABasicAnimation animation]; 
animation.delegate = self; 
NSDictionary *animations = [NSDictionary dictionaryWithObjectsAndKeys:animation,@"frameOrigin",nil]; 
[textField setAnimations:animations]; 
[[textField animator] setFrameOrigin:NSMakePoint(x,y)]; 

代表方法是

- (void)animationDidStart:(CAAnimation *)theAnimation; 
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag; 

如果您需要掩蓋您的文本字段,只需將其嵌入到其他NSView中即可。

+2

這不是我正在尋找的。這一套是整個標籤的位置。我想在旁邊顯示圖像,它們會重疊。 – NSAddict

+1

然後,您可以在包含標籤的UIView上添加上面的代碼。標籤不會出現在視圖之外,因此它充當「邊緣」。另外使SubviewToFront可以防止圖像重疊。 – k20

+0

@ k20謝謝,我認爲這實際上會做到! – NSAddict

1

首先,使用其他答案中提供的功能之一對標籤進行動畫處理。 然後,如果你想顯示沒有重疊在兩側另一種觀點認爲,你可以:

  • 插入標籤在你希望
  • 使用bringSubviewtoFront限制的子視圖:或sendSubviewToBack:確保你的標籤在後面撐