[英]iOS - Animating text size change in UILabel or UITextView?
在顯示文本塊的應用程序中,當設備轉向橫向時,我的字體大小會增加。 我不喜歡它是如何完成整個動畫然后突然跳到新的尺寸,所以我想在旋轉過程中設置尺寸變化的動畫。
我在某處看到,在UIView
動畫塊中拋出此更改不起作用,因為font屬性不可動畫,那么我有什么選擇呢?
對於我的具體實現,我不是簡單地按原樣擴展UILabel
/ UITextView
; 框的邊界比字體大小增加(按比例),因此文本中將重新流動。 那個我能接受。
編輯:我只需縮放UITextView
。
此外,我正在考慮手動“動畫”它:我有一個方法,可以顯示我的視圖並調整字體大小。 如果我知道旋轉即將開始的時間,以及動畫的持續時間,我可以計時,以便在動畫中間呈現一個或兩個中間字體大小。 任何幫助獲得這些將不勝感激。
一種選擇是淡出舊文本,更改字體大小,然后將其淡入。字體屬性可能不是可動畫的,但alpha是。 由於alpha是UIView的一個屬性,你可以用同樣的方式處理所有帶文本的視圖:UILabel,UITextView等。它看起來也很好。
如果我知道旋轉即將開始的時間,以及動畫的持續時間......
有趣的是你應該提一下。 在動畫開始之前,視圖控制器將收到一個willAnimateRotationToInterfaceOrientation:duration:
消息,它為您提供所需的確切信息。
一種方法可以是:
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.