[英]How to rotate CATextLayer and preserve it's size?
我有一個自定義視圖,用於標記(在其上繪制線條和其他圖形)。 視圖控制器識別觸摸和手勢並將信息傳遞給視圖,以便它可以正確地繪制自己。 每個圖形都有一個標簽( CATextLayer
),上面有一些圖形信息(例如線長)。
我在視圖控制器中添加了一個旋轉手勢識別器來旋轉這個繪圖視圖。 我想旋轉視圖,但防止標簽旋轉(因此它們相對於超級視圖保持 0.0 度)。 為此,我計算了新繪圖視圖相對於超級視圖的角度,並將標簽的角度屬性設置為負值,以便我可以反向旋轉它們。 例如,視圖旋轉 30 度,然后我將標簽旋轉 -30 度。
在負責繪制圖形和設置標簽的視圖繪制方法中,每次需要重新繪制視圖時,我都會為每個標簽創建新的變換:
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformRotate(transform, self.angle); //self.angle - rotation angle in radians
transform = CGAffineTransformScale(transform, scale, scale); //scale label (need this for pinch gesture, works as expected)
label.transform = transform;
如果我將標簽旋轉 90 度,所有這些東西都會起作用。 如果度數不是 0、90、180 等,標簽的框架會發生變化:縮小或放大,大角度甚至消失。 我明白,當你旋轉矩形時,它的框架應該變大,因為它指向這里: 為什么旋轉 UIImageView 大小會改變?
有沒有辦法防止CATextLayer
在旋轉時改變其形狀?
框架不是您在非矩形旋轉后所期望的。
對於您的問題,我看到了三種可能的解決方案:
position
和bounds
分配適當的值來設置框架。CALayer
。我不確定前兩個解決方案是否可行,我更喜歡第三個。
出現問題是因為我在設置轉換后重置CATextLayer
的原點。 根據transform
屬性文檔:
當該屬性的值不是恆等變換時,frame 屬性中的值是未定義的,應該被忽略。
要更改圖層的位置,請使用其position
屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.