4

imageviewsを含む一連のサブビューを自動的に生成するscrollviewがあります。コンセプトは、各ページが画像としてimageviewに読み込まれるカスタムPDFスタイルのリーダーであるということです。3つの「レイヤー」があります。外側のUIScrollView、自動生成されたsubView、およびsubview内のimageviewです。

私はこれにいくつかの問題を抱えていました、私は以前に質問をしました、しかし残念ながら、私の質問の核心は間違った場所にありました。これが私の2回目の試みです。

回転すると、必要に応じてすべてが回転します。残念ながら、これは私が得ているものです: 代替テキスト

明らかに、画像1を中央に配置し、ビューをフリックするまで画像2のヒントがないようにします。

ビューを設定するための私のコードは次のとおりです。

- (void)loadView {
    [self setUpView];
}
- (void)setUpView {
    //INITIALISE PAGING SCROLL VIEW
    CGRect pagingScrollViewFrame = [[UIScreen mainScreen] bounds];
    pagingScrollViewFrame.origin.x -= 10;
    pagingScrollViewFrame.size.width += 20;
    pagingScrollView = [[UIScrollView alloc] initWithFrame:pagingScrollViewFrame];
    pagingScrollView.contentMode =  UIViewContentModeScaleAspectFit;
    
    //CONFIGURE PAGING SCROLL VIEW  
    pagingScrollView.pagingEnabled = YES;
    pagingScrollView.backgroundColor = [UIColor blackColor];
    pagingScrollView.contentSize = CGSizeMake(pagingScrollViewFrame.size.width*7, pagingScrollViewFrame.size.height);
    
    //ACTIVATE PAGING SCROLL VIEW
    self.view = pagingScrollView;
    
    //ADD PAGES TO SCROLL VIEW
    for (int i = 0; i < 7; i++){
        ImageScrollView *page = [[[ImageScrollView alloc] init] autorelease];
        [self configurePage:page forIndex:i];
        [pagingScrollView addSubview:page];
    }
}

フレームのサイズを再定義するにはどうすればよいですか?どの関数を呼び出す必要がありますか?画像を中央に配置するにはどうすればよいですか?

私はこれに慣れていないので、質問のあいまいさをお詫びします。

乾杯

4

2 に答える 2

3

私はそれを理解しました。変更する必要があったのは個々のページのフレームだったので、(別の質問から得た助けを借りて)方向を変えるメソッドを作成しました。

これへの最初のステップは、ページごとに各フレームを繰り返してサイズを変更してから、フレームをビューに再適用する必要があることを理解したためです。これを実現するには、上記のForループに入力する配列を作成する必要がありました。全部で7ページあります。

次に、(回転時に)以下の向き変更メソッドを呼び出して、各ビューのサイズを変更できます。

- (void) reOrient{
    if(UIInterfaceOrientationIsPortrait(self.interfaceOrientation)){    
        CGRect f;
        int i = 0;
        for (ImageScrollView *page in pageArray) {          
            f = page.frame;
            f.size.width = 320;
            f.origin.x = (f.size.width * i);
            page.frame = f;
            pagingScrollView.contentSize = CGSizeMake(f.size.width * 7, 480);
            i++;
        }
    }else{
        CGRect f;
        int i = 0;
        for (ImageScrollView *page in pageArray) {          
            f = page.frame;
            f.size.width = 480;
            f.origin.x = (f.size.width * i);
            page.frame = f;
            pagingScrollView.contentSize = CGSizeMake(f.size.width * 7,  480);
            i++;
        }
    }
}
于 2010-10-19T16:50:32.007 に答える
1

これは私のために働いた:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];

    //get current page based on offset before rotation    
    NSInteger currentPage = self.scrollView.contentOffset.x / self.scrollView.bounds.size.width;

    //set anticipated scrollview content size by switching width and height (they will be switched after rotation)
    [self.scrollView setContentSize:CGSizeMake(totalPages * self.view.bounds.size.height, self.view.bounds.size.width)];

    //set the anticipated content offset based on height before rotation
    [self.scrollView setContentOffset:CGPointMake(currentPage * self.scrollView.bounds.size.height, 0.0f)];
}

基本的に、回転する前に新しいスクロールビューコンテンツサイズのコンテンツオフセットを設定しています(予想される高さと幅に合わせて高さと幅を切り替えています)。

これは、フルスクリーンページのUIScrollViewを回転させるときに機能しました。

すべてのページサブビューには、回転後に適切に配置されるように、次の自動サイズ変更マスクがあります。

UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleRightMargin
于 2014-01-27T13:17:21.570 に答える