0

私のアプリでは、iPhone のホーム ボタンの向きに合わせて UIView の向きを設定したいと考えています。私は次の方法を使用してそれを行いました:

/* I handled view orientation in shouldAutorotate method*/
    -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft)
            viewForBarButtons.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
        else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight)
            viewForBarButtons.autoresizingMask = UIViewAutoresizingFlexibleRightMargin;
        else if (interfaceOrientation == UIInterfaceOrientationPortrait)
            viewForBarButtons.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin;
        else if (interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
            viewForBarButtons.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }  

ここで、viewForBarButtons は、viewController 内の UIView です。

しかし、return (interfaceOrientation == UIInterfaceOrientationPortrait); の代わりに return Yes を設定すると、それは機能しません。

この問題を解決する方法。誰かがそれを知っているなら、私を助けてください。LifeCards アプリにも同様の機能が実装されています。前もって感謝します。

4

1 に答える 1

1

上記の方法は、デバイスの向きが変わったときにビューを特定の向きに回転するかどうかを決定することです。

return (interfaceOrientation == UIInterfaceOrientationPortrait);

縦向きのみをサポートするように指定します。

return YES;

すべてのオリエンテーションをサポートします。

ただし、ViewController を TabBarController に配置している場合は、すべての ViewController がその特定の向きをサポートしている場合にのみ回転します。

上記のコードを入れる代わりに、willRotateToInterfaceOrientation でオブジェクトを自動サイズ変更します。

ただし、指定することにより、1つのことを知る必要があります

UIViewAutoresizingFlexibleLeftMargin

ビューがオブジェクトと左マージンの間に必要なだけスペースを配置できることを指定しているだけです。ただし、方向の変更中に他の側の以前の位置が保持されるため、オブジェクトの原点を物理的に変更する必要がある場合があります (viewForBarButtons)。

Ok。あなたが言っているのは、homeButton の横に viewForBarButtons が必要であり、それに応じてサブビューを配置/回転する必要があるということだと思います。

最初にデバイス回転に登録するか、didRotateInterfaceOrientation を使用して、viewForBarButtons の回転サブビューを開始します。

#define degreesToRadians(x) (M_PI * x / 180.0)

サブビューの回転: 自分自身をサブビュー オブジェクトに置き換えます

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

    if (animated)
    {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.3];
    }

    if (orientation == UIInterfaceOrientationPortraitUpsideDown)
        self.transform = CGAffineTransformRotate(CGAffineTransformIdentity, degreesToRadians(180)); 

    else if (orientation == UIInterfaceOrientationLandscapeRight)
        self.transform = CGAffineTransformRotate(CGAffineTransformIdentity, degreesToRadians(90));  

    else if (orientation == UIInterfaceOrientationLandscapeLeft)
        self.transform = CGAffineTransformRotate(CGAffineTransformIdentity, degreesToRadians(-90));
    else 
        self.transform=CGAffineTransformIdentity;

    if (animated)
        [UIView commitAnimations];
于 2012-04-25T10:47:06.947 に答える