如何在 iOS 中相对于左上角旋转 UILabel

Riz*_*ikh 2 objective-c uilabel cgaffinetransform ios swift

我使用以下代码旋转标签文本

 mylabel.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
Run Code Online (Sandbox Code Playgroud)

这会起作用。但它会UILabel在 Center 中旋转。

假设我的左上角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)
Run Code Online (Sandbox Code Playgroud)

编辑问题:如何使我的标签看起来像圆的半径。即我可以相对于原点旋转 360 度?

Nil*_*ehn 5

对此,您可以做两件事。

一种)

您可以更改标签的锚点:

mylabel.layer.anchorPoint = CGPointMake(0,0); // This will set the anchor point to the top left
Run Code Online (Sandbox Code Playgroud)

现在您可以围绕该点旋转。这将改变所有变换的锚点!

乙)

你可以这样做:

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);
Run Code Online (Sandbox Code Playgroud)

这不会改变您的锚点,因此不会影响其他变换!

(如果轮换不对,你可能要改成transA对着transB

更新

如果你想“保持”旋转(如评论中所问),你可以这样做:

CGAffineTransform transform = ... // Put the transform here that you used in A) or B)

mylayer.transfrom = CGAffineTransfromConcat(mylayer.transform,transform);
Run Code Online (Sandbox Code Playgroud)

这样你就可以说“无论我以前在哪里”——再旋转 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)
Run Code Online (Sandbox Code Playgroud)