uiscrollviewローテーションの問題
-
29-09-2019 - |
質問
画像ビューを含む一連のサブビューを自動的に生成するScrollViewがあります。コンセプトは、それがほとんどカスタムPDFスタイルの読者であり、各ページが画像としてImageViewにロードされているということです。 3つの「レイヤー」があります - 外側のuiscrollview、自動生成されたサブビュー、サブビュー内の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];
}
}
フレームのサイズを再定義するにはどうすればよいですか?どのような関数を呼び出すべきですか。どのように画像を中心にしますか?
私はこれに慣れていないので、私の質問のあいまいさをお詫びします。
乾杯
解決
私はそれを理解しました。私が変更する必要があるのは個々のページのフレームだったので、(別の質問から得られた助けを借りて)私は再オリエントの方法を書きました。
これへの最初のステップは、各ページの各フレームを繰り返して再サイズして、ビューにフレームを再適用する必要があることを理解したためです。これを起こすためには、上記のループに記入する配列を作成する必要がありました。合計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++;
}
}
}
他のヒント
これは私のために働いた:
- (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)];
}
基本的に、回転する前に、新しいScrollViewコンテンツサイズのコンテンツオフセットを設定しています(予想される高さと幅の高さと幅を切り替えます)。
これは、フルスクリーンのページングuiscrollviewを回転させるときに私のために機能しました。
ページングされたサブビューはすべて、次の自動化マスクを備えているため、回転後にきちんと所定の位置に落ちるようにします。
UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleRightMargin