旋转 iPhone 时调整视图大小

6
我有一个应用程序有许多视图。我只想让其中几个视图在设备旋转时能够旋转到横向。我发现我不能使用(BOOL)shouldAutorotateToInterfaceOrientation,因为这会旋转我应用中的每一个视图。 我在Stack Overflow上找到了解决这个问题的方法,但现在我又遇到了另一个问题。
当我旋转设备时,视图确实旋转了,但它仍然显示为纵向模式(直立)。视图的顶部和底部被裁剪了。是否有一种方法可以使视图旋转并调整其大小以适应新的方向? 我还发现了这个,但无法使其正常工作。
以下是该视图的代码:
@implementation businessBank
@synthesize webView, activityIndicator;


- (void)viewDidLoad {

    [super viewDidLoad];
    NSString *urlAddress = @"website_url";

    NSURL *url = [NSURL URLWithString:urlAddress];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

    [webView loadRequest:requestObj];
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didRotate:)
                                                 name:UIDeviceOrientationDidChangeNotification
                                               object:nil];

}
- (void)didRotate:(NSNotification *)notification {

    UIDeviceOrientation orientation = [[notification object] orientation];

    if (orientation == UIDeviceOrientationLandscapeLeft) {
        [self.view setTransform:CGAffineTransformMakeRotation(M_PI / 2.0)];
    } else if (orientation == UIDeviceOrientationLandscapeRight) {
        [self.view setTransform:CGAffineTransformMakeRotation(M_PI / -2.0)];
    } else if (orientation == UIDeviceOrientationPortraitUpsideDown) {
        [self.view setTransform:CGAffineTransformMakeRotation(M_PI)];
    } else if (orientation == UIDeviceOrientationPortrait) {
        [self.view setTransform:CGAffineTransformMakeRotation(0.0)];
    }
}
1个回答

3
除非您有一个非常基本的应用程序可以拉伸以匹配方向,否则自动调整大小无论如何都不会很好地工作 - 您真的需要为两个方向创建两个单独的视图。
关于自动调整视图的帮助,您可以查看此教程:

http://theappleblog.com/2009/04/08/iphone-dev-sessions-how-to-make-an-orientation-aware-clock/

要使用更强大的视图切换方法,这个教程应该能帮到你:

http://icodeblog.com/2008/08/03/iphone-programming-tutorial-transitioning-between-views/


该应用程序向用户显示一堆按钮,这些按钮转到不同的视图。每个按钮打开一个具有UIWebView的视图。看起来像是一个相当简单的应用程序,可以轻松地旋转网页,但它比我预期的要花费更长的时间。我基本上想要Safari在几个视图上所做的事情。我以前看过时钟示例,但它利用shouldAutorotateToInterfaceOrientation代码旋转每个视图,而不仅仅是我想要的那些视图。为纵向和横向创建单独的视图似乎可以起作用,但这会重置用户当前所在的网站吗? - user306148
你应该能够以某种方式维护状态,可以通过存储正在查看的网页的变量或动态创建UIWebView(而不是在可视化设计师中)并根据需要将其添加到视图中(在旋转时)。 - Charles Boyung
Webviews是指向一个页面的链接,用户可以在该页面登录并查看他们的银行账户信息。即使我存储了他们所在的网站,它很可能会再次注销他们或者(因为信息是动态提供的而不是在单独的网页上)不会显示在他们之前的位置。我真的只需要一种方法来将webview旋转到横向,就像shouldAutorotateToInterfaceOriention一样...但不是在每个视图上都这样做。令人沮丧的事情。 - user306148
然后你应该能够在你的代码中创建UIWebView,并在旋转事件上动态地将它绑定到你的视图上。 - Charles Boyung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接