2010-07-31 43 views
8

在顯示文本塊的應用程序中,當設備轉向橫向時,字體大小會增加。我不喜歡它如何處理整個動畫,然後突然跳到新的尺寸,所以我想在旋轉過程中爲尺寸變化設置動畫。iOS - 在UILabel或UITextView中動畫改變文字大小?

我在某個地方看到,在UIView動畫塊中拋出此更改不起作用,因爲font屬性不是可動畫的,所以我的選擇是什麼?

對於我的具體實現,我不是簡單地縮放UILabel/UITextView原樣;框的邊界比字體大小增加(比例),因此文本中會出現迴流。那個我能接受。

編輯:我會很好地簡單地縮放UITextView

此外,我正在考慮手動設置「動畫」:我有一種方法可以展示我的視圖並調整字體大小。如果我知道旋轉即將開始的時間以及動畫的持續時間,我可以對它進行計時,以便在動畫中間呈現中間字體或兩個中間字體。任何幫助獲得這些將不勝感激。

+1

你是否設法實現你想要做的事情?你能接受其中一個答案來解決這個問題嗎? – MiKL 2011-03-24 08:27:01

回答

6

如果我知道,當轉速爲約 啓動,並 動畫的持續時間...

有趣的你應該提到這一點。在動畫開始之前,您的視圖控制器將收到willAnimateRotationToInterfaceOrientation:duration:消息,爲您提供所需的確切信息。

1

調用didAnimateFirstHalfOfRotationToInterfaceOrientation:時更改字體大小。 這樣用戶在旋轉完成後將不會看到更改。隨着旋轉的發生,這將很難看到字體大小的變化!

+0

除非啓用兩步動畫,否則該方法不會被調用,這需要額外的手動操作,我真的很想避免進入。無論如何,好主意! – kbanman 2011-03-15 18:12:33

6

一種方法是淡出舊文本,更改字體大小並將其淡入。font屬性可能不是動畫,但alpha是。由於alpha是UIView的一個屬性,所以你可以用同樣的方式處理所有的文本軸承視圖:UILabel,UITextView等。它看起來也不錯。

+0

我喜歡這種方法。 – Moshe 2011-03-20 07:34:39

4

進行可能是一個辦法:

  1. 創建CAKeyframeAnimation
  2. 定義要使用一組CATransform3D的對象
  3. 這些轉換添加到動畫中實現縮放和旋轉的關鍵幀動畫
  4. 發送addAnimation消息到您的標籤圖層對象:[[label layer] addAnimation];

這裏是假設yourLabel代碼示例是UILabel要縮放和旋轉:

CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 

CATransform3D scaleUp = CATransform3DMakeScale(1.5, 1.5, 1); // Scale in x and y 
CATransform3D rotationScaled = CATransform3DRotate (scaleUp, 90, 0, 0, 1); // Rotate the scaled font 

[scale setValues:[NSArray arrayWithObjects: 
[NSValue valueWithCATransform3D:CATransform3DIdentity], 
[NSValue valueWithCATransform3D:rotationScaled], 
nil]]; 

// set the duration 
[scale setDuration: 1.0]; 

// animate your label layer 
[[yourLabel layer] addAnimation:scale forKey:@"scaleText"]; 

這通常是怎樣蹦跳着文本將動畫的實例。

當設備開始旋轉並在旋轉完成時檢索動畫時,您可以開始此操作,以便您可以使用正確的比例/位置更新標籤。

您需要進行調整才能找到合適的時間和旋轉。

+0

@ kelso。你給了這個想法/嘗試? – MiKL 2011-03-17 19:24:22

+0

爲了獲得正確和正確的時間旋轉,您可以使用上述方法:'willAnimateRotationToInterfaceOrientation:duration:' – MiKL 2011-03-22 11:00:06

+0

@ kelso.b。你有沒有設法做到你想達到的目的?如何接受其中一個答案,以便您的問題可以關閉?乾杯。 Mikl – MiKL 2011-03-23 14:46:40