簡體   English   中英

iOS - 在UILabel或UITextView中動畫文本大小更改?

[英]iOS - Animating text size change in UILabel or UITextView?

在顯示文本塊的應用程序中,當設備轉向橫向時,我的字體大小會增加。 我不喜歡它是如何完成整個動畫然后突然跳到新的尺寸,所以我想在旋轉過程中設置尺寸變化的動畫。

我在某處看到,在UIView動畫塊中拋出此更改不起作用,因為font屬性不可動畫,那么我有什么選擇呢?

對於我的具體實現,我不是簡單地按原樣擴展UILabel / UITextView ; 框的邊界比字體大小增加(按比例),因此文本中將重新流動。 那個我能接受。

編輯:我只需縮放UITextView

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

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

如果我知道旋轉即將開始的時間,以及動畫的持續時間......

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

一種方法可以是:

  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"];

這通常是例如如何對文本彈跳進行動畫處理。

您可以在設備開始旋轉時啟動此功能,並在旋轉完成后檢索動畫,以便您可以使用適當的比例/位置更新標簽。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM