改变iPhone的方向,然后改回来将我的观点减少一半?

时间:2011-05-23 01:35:21

标签: iphone

我的iphone应用程序设置中有一个视图控制器,这样当我将方向从纵向更改为横向时,我会更改视图。当我将方向从横向更改为纵向时,初始视图会返回,除非此时它全部塞入屏幕的左侧。最终,当我改变方向足够的时候,一切都完全消失了。这是初学者常见的问题吗?我能做错什么?

在我的根控制器中,我只允许在使用以下方式显示特定视图时更改方向:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if (self.currentView == (NSInteger*)Chart || self.currentView == (NSInteger*)Detail) {
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
return (interfaceOrientation == UIInterfaceOrientationPortrait);

其中self.currentView是我目前拥有的观点的枚举。详细信息视图我想确保保持为纵向视图,但是当我在该视图上更改方向时,我希望它将视图更改为图形。同样,这在第一次工作正常,但是当我从Graph更改回Detail时,它将Detail视图上的所有控件都移到屏幕的左侧。

以下是我如何更改视图:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{

if (self.currentView == (NSInteger*)Detail && (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)) {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"changeView" object:self userInfo:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:Chart] forKey:@"view"]];
}

if (self.currentView == (NSInteger*)Chart && (toInterfaceOrientation == UIInterfaceOrientationPortrait)) {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"changeView" object:self userInfo:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:Detail] forKey:@"view"]];
}

2 个答案:

答案 0 :(得分:1)

@justin我曾经这样做过,让我和你一样。也许你可以检查你是否还没有这样做

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    CGRect rect;
    if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
        rect = CGRectMake(tableView.frame.origin.x,tableView.frame.origin.y,
                                 tableView.frame.size.width - 50, tableView.frame.size.height - 30);        
    }
    else {
        rect = CGRectMake(tableView.frame.origin.x,aBar.frame.origin.y,
                          tableView.frame.size.width, tableView.frame.size.height);     
    }
    [tableView setFrame:rect];
    return YES;
}

我想要的只是在纵向模式下使用小框架的桌面视图,而不保存原始框架我试图减小其宽度和高度,最终在多次旋转后将表格视图调整到非常小的尺寸。

Lolzzz。我应该首先保存原始的tableview框架,然后做类似的事情

if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
    tableView.frame = CGRectMake(tableView.frame.origin.x,tableView.frame.origin.y,
                      tableView.frame.size.width - 50, tableView.frame.size.height - 30);       
}
else {
    tableView.frame = originalTableViewFrame;
}

答案 1 :(得分:0)

检查您的视图上是否有autoresizeSsubviews ON(在XIB / Interface Builder中)以及可能的父视图,如果您手动更改帧,请尝试将其关闭,这样就解决了我的情况