更改方向时将标签中心移动到新位置

时间:2013-09-30 20:01:04

标签: iphone ios objective-c uilabel orientation

我试过这个:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [self adjustViewsForOrientation:toInterfaceOrientation];
}
- (void)adjustViewsForOrientation:(UIInterfaceOrientation)orientation {
    if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) {
    intervalLabel.center = CGPointMake(100, 100);
}
else if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
        intervalLabel.center = CGPointMake(200, 200);

    }
}

但它没有用。但是,如果我这样做,它会移动它

- (IBAction)sup:(id)sender {
    intervalLabel.center = CGPointMake(100, 100);
}

BTW标签是在故事板中制作的,并且在我的视图中被标记为加载并设置为(弱,非原子),按钮也是在故事板中制作的,只是标准的IBAction

1 个答案:

答案 0 :(得分:0)

一个问题是你没有打电话:

[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];

然而,我猜测真正的问题是你正在使用自动布局(无论是有意还是无意),然后试图捣乱中心并没有真正发挥作用。

所以我的建议 - 如果您更喜欢使用"旧方法,请禁用自动布局"设置框架和中心(单击视觉设计器中的UIViewController并取消选中"使用Autolayout")或执行您尝试使用autolayout(意味着在旋转时添加/更改约束)。

取消选中"使用Autolayout"对于我在故事板编辑器中的UIViewController,以下内容对我有用:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];

    if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
        _intervalLabel.center = CGPointMake(0, 0);
    } else {
        _intervalLabel.center = CGPointMake(50, 50);
    }    
}

使用Autolayout的说法将是我的建议。