4

私の中で

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

メソッドでは、アプリがデバイスとともに回転するときに、スクロールビューの位置を変更してサイズを変更するコードがあります。私は次のコードでそれを行います:

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

    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:0.5f];

    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight){
         //landscape
    [mT.buttonScroll setFrame:CGRectMake(0, 544, 1024, 160)];

    }else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft){
        //landscape
    [mT.buttonScroll setFrame:CGRectMake(0, 544, 1024, 160)];

    }else if (toInterfaceOrientation == UIInterfaceOrientationPortrait){
       //portrait
    [mT.buttonScroll setFrame:CGRectMake(0, 800, 768, 160)];

    }else if (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
      //portrait
    [mT.buttonScroll setFrame:CGRectMake(0, 800, 768, 160)];

    }
}

すべてが適切に回転しますが、もう一度回転すると、スクロールビューが完全に手に負えなくなります。スクロールしたり、ボタンをタッチしたりすることはできません。次に、前のビューに戻ると、タッチが戻ります。なぜそれがこれをしているのか誰かが知っていますか?

4

5 に答える 5

4

を変更することはFrameすべてうまくいきますが、それに関しては、すべての違いが生じます。向きを変える場合は を設定する必要があります。これは、向きを変更するときにこのようなものを追加することで実行できます。UIScrollViewscontentSizecontentSize

[mT.buttonScroll setContentSize:CGSizeMake(width, height)];

私はそれmT.buttonScrollがある種のものだと思いますUIScrollView

ここで起こっていることは、コンテンツ領域のサイズを基本的に必要なサイズにリセットしていることです。ここで幅と高さを修正できます。

コメントをお寄せいただけない場合は、これが役立つことを願っています。

于 2013-01-21T17:22:38.297 に答える
0

ポパイの答え(これは正しいです;)に加えて、問題を回避するには、このようにコンテンツのサイズをあちこちに設定する必要があることがわかりました。

-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake (0,100)];
}

-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake (0,100) ];
}

-(void)viewDidLoad
{
[super viewDidLoad];
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake (0,100) ];
}

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft || [[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)
{
NSLog(@"Lanscapse");
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake (0,100];
}
if([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown )
{
NSLog(@"Portrait");
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake (0,100) ];
}
}
于 2015-06-17T03:36:04.773 に答える
0

shouldAutorotateToInterfaceOrientationを使用して、回転と UI の応答性を観察する必要があると思います。

私のテストでは、私が言及した方法で問題なく動作します。willRotatetoInterfaceOrientationは、対応する「すべき」後に呼び出されます。それ以外の場合は、まったく呼び出されません。

于 2013-01-21T14:47:39.087 に答える
-1

スクロールビューのフレームを確認してください。回転後、スクロールビューのフレームがウィンドウフレームを横切っているため、スクロールビューがタッチに反応しません。

また、Rect を計算しているときに、ナビゲーション バー、タブバー、ステータスバーなど、存在する場合は他のビューを考慮に入れていると想定しています。

于 2013-01-21T16:08:24.663 に答える