如何在 iOS 中相对于左上角旋转 UILabel
How to rotate UILabel with respect to Top Left corner in iOS
我使用了下面的代码来旋转标签文本
mylabel.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
这会奏效。但它会在中心旋转UILabel
。
假设我 UILabel
的左上角是 (10,10) 当我旋转它时它的左上角不应该改变(就像半径或圆)。
如何相对于左上角旋转它?。
请帮帮我
编辑:
这是代码
var transA = CGAffineTransformMakeTranslation(mylabel.frame.size.width/2,mylabel.frame.size.height/2);
var rotation = CGAffineTransformMakeRotation(CGFloat(M_PI_4));
var transB = CGAffineTransformMakeTranslation(-mylabel.frame.size.width/2,-mylabel.frame.size.height/2);
mylabel.transform = CGAffineTransformConcat(CGAffineTransformConcat(transA,rotation),transB);
var transform = transA
mylabel.transform = CGAffineTransformConcat(mylabel.transform, transform)
编辑问题:
如何使我的标签看起来像一个圆的半径。即我可以相对于原点旋转 360 度吗?
关于此您可以做两件事。
A)
您可以更改标签的锚点:
mylabel.layer.anchorPoint = CGPointMake(0,0); // This will set the anchor point to the top left
现在你可以绕着这个点旋转了。这将更改所有变换的锚点!
B)
你可以这样做:
CGAffineTransform transA = CGAffineTransformMakeTranslation(mylabel.frame.size.width/2,mylabel.frame.size.height/2);
CGAFfineTransfrom rotation = CGAffineTransformMakeRotation(M_PI_2);
CGAffineTransform transB = CGAffineTransformMakeTranslation(-mylabel.frame.size.width/2,-mylabel.frame.size.height/2);
mylabel.transform = CGAffineTransformConcat(CGAffineTransformConcat(transA,rotation),transB);
这不会改变您的锚点,因此不会影响其他变换!
(如果旋转不对,可能需要将transA
改成transB
)
更新
如果你想 'keep' 旋转(如评论中所问),你可以这样做:
CGAffineTransform transform = ... // Put the transform here that you used in A) or B)
mylayer.transfrom = CGAffineTransfromConcat(mylayer.transform,transform);
这样你就说 'whereever' 我之前 - 多旋转 90(或 45)度
更新 2
您的代码应如下所示:
var transA = CGAffineTransformMakeTranslation(mylabel.frame.size.width/2,mylabel.frame.size.height/2);
var rotation = CGAffineTransformMakeRotation(CGFloat(M_PI_2));
var transB = CGAffineTransformMakeTranslation(-mylabel.frame.size.width/2,-mylabel.frame.size.height/2);
var transform = CGAffineTransformConcat(CGAffineTransformConcat(transA,rotation),transB);
mylabel.transform = CGAffineTransformConcat(mylabel.transform, transform)
我使用了下面的代码来旋转标签文本
mylabel.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
这会奏效。但它会在中心旋转UILabel
。
假设我 UILabel
的左上角是 (10,10) 当我旋转它时它的左上角不应该改变(就像半径或圆)。
如何相对于左上角旋转它?。
请帮帮我
编辑:
这是代码
var transA = CGAffineTransformMakeTranslation(mylabel.frame.size.width/2,mylabel.frame.size.height/2);
var rotation = CGAffineTransformMakeRotation(CGFloat(M_PI_4));
var transB = CGAffineTransformMakeTranslation(-mylabel.frame.size.width/2,-mylabel.frame.size.height/2);
mylabel.transform = CGAffineTransformConcat(CGAffineTransformConcat(transA,rotation),transB);
var transform = transA
mylabel.transform = CGAffineTransformConcat(mylabel.transform, transform)
编辑问题: 如何使我的标签看起来像一个圆的半径。即我可以相对于原点旋转 360 度吗?
关于此您可以做两件事。
A)
您可以更改标签的锚点:
mylabel.layer.anchorPoint = CGPointMake(0,0); // This will set the anchor point to the top left
现在你可以绕着这个点旋转了。这将更改所有变换的锚点!
B)
你可以这样做:
CGAffineTransform transA = CGAffineTransformMakeTranslation(mylabel.frame.size.width/2,mylabel.frame.size.height/2);
CGAFfineTransfrom rotation = CGAffineTransformMakeRotation(M_PI_2);
CGAffineTransform transB = CGAffineTransformMakeTranslation(-mylabel.frame.size.width/2,-mylabel.frame.size.height/2);
mylabel.transform = CGAffineTransformConcat(CGAffineTransformConcat(transA,rotation),transB);
这不会改变您的锚点,因此不会影响其他变换!
(如果旋转不对,可能需要将transA
改成transB
)
更新
如果你想 'keep' 旋转(如评论中所问),你可以这样做:
CGAffineTransform transform = ... // Put the transform here that you used in A) or B)
mylayer.transfrom = CGAffineTransfromConcat(mylayer.transform,transform);
这样你就说 'whereever' 我之前 - 多旋转 90(或 45)度
更新 2
您的代码应如下所示:
var transA = CGAffineTransformMakeTranslation(mylabel.frame.size.width/2,mylabel.frame.size.height/2);
var rotation = CGAffineTransformMakeRotation(CGFloat(M_PI_2));
var transB = CGAffineTransformMakeTranslation(-mylabel.frame.size.width/2,-mylabel.frame.size.height/2);
var transform = CGAffineTransformConcat(CGAffineTransformConcat(transA,rotation),transB);
mylabel.transform = CGAffineTransformConcat(mylabel.transform, transform)