uilabel在旋转时会消失

时间:2012-07-11 18:31:54

标签: ios iphone objective-c cgaffinetransform

我所拥有的是

 UIView
     1.Image1
     2.Image2
     3.UILabel

如下面的图片

enter image description here

然后我通过

在UILabel上应用旋转
- (void)viewDidLoad    
    {
        testLabel.transform     =   CGAffineTransformMakeRotation(M_PI*0.25);
        [super viewDidLoad];
    }

当我运行应用程序时,尤其是uilabe正在消失。查看第二张图片供您参考

enter image description here

请指出我在这里做错了什么......以及如何完成工作

由于

4 个答案:

答案 0 :(得分:1)

尝试将较小的值乘以PI,以查看它是在旋转还是只是消失。如果我没记错的话,旋转不是基于中心,而是在左上角,所以你必须事后翻译!

例如,要旋转视频片段,我就必须这样做:

CGAffineTransform rotation = CGAffineTransformMakeRotation(M_PI);
CGAffineTransform translateToCenter = CGAffineTransformMakeTranslation(640, 480);
CGAffineTransform mixedTransform = CGAffineTransformConcat(rotation, translateToCenter);
[firstTrackInstruction setTransform:mixedTransform atTime:kCMTimeZero];

我首先旋转PI(180度),但由于旋转中心是左上角,我的视频剪辑现在位于相反的象限,需要转换回来!这可能与您的标签有关。

所以试试这个,假设你的标签是42x21尺寸..

CGAffineTransform rotation = CGAffineTransformMakeRotation(M_PI);
CGAffineTransform translateToCenter = CGAffineTransformMakeTranslation(42, 21);
CGAffineTransform mixedTransform = CGAffineTransformConcat(rotation, translateToCenter);
label.transform = mixedTransform;

答案 1 :(得分:1)

请注意,因为Autolayout会导致很多问题。

尝试取消选择“使用Autolayout”

它解决了尝试翻译对象的所有问题。

答案 2 :(得分:0)

首先尝试放置[super viewDidLoad]:

- (void)viewDidLoad    
{
[super viewDidLoad];        
testLabel.transform     =   CGAffineTransformMakeRotation(M_PI*0.25);
}

答案 3 :(得分:0)

AutoLayout和AutoResizing在应用变换时经常会造成困难,因为它们似乎会改变帧而不是视图的边界和中心。因此,自动调整会破坏您的布局。尝试将转换后的标签包装在一个视图中,该视图不会更改尺寸和布局,而是可以在其超级视图中查看。