4

ページ付けのあるスクロールビューがあります。viewDidLoadで、現在の向きが横向きかどうかを確認し、コンテンツサイズの高さを440に設定します

 if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation])) 
    {
        [scroll      setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages,340)];


    }
    else if (UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation]))

    {
        [scroll setFrame:CGRectMake(0,0,480,480)];
        [scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages, 440)];


    }

すべてが正常に機能しますscrollviewはスムーズにスクロールし、斜めのスクロールはありません。

しかし、向きが変わると、

scrollviewのフレームとcontentsizeを再度設定する必要があり、次のように設定しています。

-(void)orientationChanged:(id)object
{
if(UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]))
{
    self.scroll.frame = [[UIScreen mainScreen]bounds];

    [scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages, 340)];
}


else
{
 self.scroll.frame = CGRectMake(0,0,480,480);
        [scroll setContentSize:CGSizeMake(self.scroll.frame.size.width*numberOfPages, 600)];
}


}

横向きモードでコンテンツサイズの高さを600まで設定する必要がある理由がわかりませんが、それでも十分ではありません。そしてそれはscrollviewが斜めにスクロールし始めるというもう1つの問題を追加しますが、それはとても奇妙に見えるので私は望んでいません。誰かが私がどこで何が欠けているのかを理解するのを手伝ってもらえますか?

scrollviewの自動サイズ変更マスクを次のように設定しました

[scroll setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleHeight];

しかし、それを変更しても役に立ちません。

4

2 に答える 2

5
  1. 使用しないでくださいUIDeviceOrientationUIInterfaceOrientation代わりに使用してください。DeviceOrientationここでは必要のない2つの追加オプションがあります。(UIDeviceOrientationFaceUpおよびUIDeviceOrientationFaceDown

  2. Yesから戻るshouldAutorotateToInterfaceOrientation

  3. willRotateToInterfaceOrientation: duration:これで、デバイスを回転させるたびに呼び出されます。

  4. このようにこのメソッドを実装します。

    -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
    {
    CGRect frame;
    int pageNumber = 2;
    int statusBarHeight = 20;
    
    if ((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)) {
        frame = CGRectMake(0, 0, 480, 320 - statusBarHeight);
    } else {
        frame = CGRectMake(0, 0, 320, 480 - statusBarHeight);
    }
    
    scrollView.frame = frame;
    scrollView.contentSize = CGSizeMake(frame.size.width * 2, frame.size.height);
    } 
    

    させて、

    pageNumber = 2

    statusBarHeight = 20

于 2012-11-17T15:23:56.307 に答える
2

ここにあなたのコードの問題があります。なぜこのようにフレームサイズを設定しているのですか?の画面サイズしかありません320px width。そして、に変わるとlandscape高さは。になります320px。しかし、あなたはスクロールheight480pxとそれgoes out of the screenとと設定していstart to scroll diagonallyます。

self.scroll.frame = CGRectMake(0,0,480,480);

そのフレームサイズの代わりに、このように変更します

self.scroll.frame = CGRectMake(0,0,480,320);

また、どちらの方向でもスクロールビュー内にあるコンテンツに応じてコンテンツサイズを設定する必要があります。

于 2012-11-17T15:23:15.480 に答える