0

我有一个以编程方式实现的 UIButton,因为它仅在我旋转设备时才需要。

当我旋转时按钮需要消失,当我去横向时出现。

只要我留在同一个 ViewController 中,我就没有问题。无论如何,我都可以旋转设备,按钮会按预期出现和消失。该应用程序是基于 TabController 的应用程序,当我转到另一个选项卡时,会发生相同的行为。

这就是问题 当我回到原来的视图时,按钮出现了,但之后就再也没有消失过。这几乎就像removeFromSuperView没有被调用,但即使是,按钮也不会被删除。

任何想法为什么会这样?

-(void)autoRotationDetection
{
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter]
     addObserver:self selector:@selector(orientationChanged:)
     name:UIDeviceOrientationDidChangeNotification
     object:[UIDevice currentDevice]];
}

- (void) orientationChanged:(NSNotification *)note
{
    UIDevice * device = note.object;
    switch(device.orientation)
    {
        case UIDeviceOrientationPortrait:
            /* start special animation */
            [_menuButton removeFromSuperview];
            break;

        case UIDeviceOrientationPortraitUpsideDown:
            /* start special animation */
            break;

        default:
            break;
    };
}

然后我打电话

-(void)viewWillAppear:(BOOL)animated
{

    [self autoRotationDetection];
}

抱歉应该补充一下。

4

1 回答 1

0

当忽略对 [super viewWillAppear] 的调用时,我已经看到了这种行为(在转到另一个选项卡并再次返回后表现不同)。尝试添加它,看看它是否修复它。

编辑后:

我认为一个更简单的方法是只查看 viewWillLayoutSubviews 中的视图边界,每次旋转时都会调用它(其他时候也是如此,但对于像这样的简单事情,这无关紧要) . 在这个例子中,我隐藏或显示而不是删除,但这个概念应该适用于两者。

-(void)viewWillLayoutSubviews {
    BOOL portrait = self.view.bounds.size.height > self.view.bounds.size.width;
    if (portrait) {
        self.button.hidden = YES;
    }else{
        self.button.hidden = NO;
    }
}

您可以通过跟踪上次调用此方法时的肖像值来提高效率,并且仅在肖像已更改时才更改按钮的状态。

于 2013-03-27T21:06:37.887 回答