1
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationIsPortrait(interfaceOrientation)) 
    {
        [self isPortraitSplash];
    }
    else if ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationIsLandscape(interfaceOrientation))
    {
        [self isLandScapeSplash];
    }
    return  YES;
}  

私のメソッドisPortraitSplashisLandScapeSplashでは、ビューのフレームを設定しています。

向きが変わると、常に呼び出さisLandScapeSplashれます-メソッドを呼び出すことはできませんisPortraitSplash

なぜこれが起こっているのか誰にも教えてもらえますか?

4

3 に答える 3

2

既存のifステートメントは、をと比較しBOOLていUIDeviceOrientationます。テストは次のようにする必要があります。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) 
    {
        [self isPotraitSplash];
    }
    else if (UIInterfaceOrientationIsLandscape(interfaceOrientation))
    {
        [self islandScapeSplash];
    }
    return  YES;
}  

UIInterfaceOrientationIsPortrait BOOLを返すifので、ステートメント条件に必要なのはそれだけです。

更新:私はまた、この作業をで行う方が良いという他の回答に同意することを追加しwillRotateToInterfaceOrientation:duration:ますshouldAutorotateToInterfaceOrientation:

しかし、それが元のコードが失敗した理由ではありません。ifをと比較するテスト が原因で、元のコードは失敗していUIDeviceOrientationましたBOOL

于 2012-10-10T05:42:28.263 に答える
2

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)durationの代わりに使用するshouldAutorotateToInterfaceOrientationと、ローテーションが発生する前に呼び出されることが保証されます。

を削除しないでくださいshouldAutorotateToInterfaceOrientation。サポートするすべての方向に対して YES を返します。

于 2012-10-10T05:45:04.223 に答える
1

まず第一に

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

サポートするすべての方向を宣言する必要があります。

そして

- (BOOL)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) 
    {
        [self isPotraitSplash];
    }
    else if (UIInterfaceOrientationIsLandscape(interfaceOrientation))
    {
        [self islandScapeSplash];
    }
}

レイアウト変更のためにフレームまたはその他を設定し、上記のように使用する必要があります。

于 2012-10-10T05:44:00.510 に答える