UIScrollView Rotation Probleme
-
29-09-2019 - |
Frage
Ich habe eine Scrollview, die automatisch eine Reihe von Subviews enthält imageviews erzeugt. Das Konzept ist, dass es so etwas wie ein benutzerdefinierte PDF-Stil-Reader, in dem jede Seite in zu einem Imageview als ein Bild geladen wird. Es gibt drei „Schichten“ -. Die äußere UIScrollView, die automatisch generierten Subviews und die Imageview innerhalb des subview
Ich habe einige Probleme mit diesem habe, habe ich die Frage vorher gefragt, aber leider war der Kern meiner Frage an der falschen Stelle. Hier ist mein zweiter Versuch:
drehen, alles wird nach Bedarf gedreht. Leider ist das, was ich immer:
Offensichtlich würde Ich mag Bild 1 zentriert werden und dort 2 keinen Hinweis auf Bild sein, bis Sie Flick den Blick über.
Hier ist mein Code für die Ansicht der Einrichtung:
- (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];
}
}
Wie kann ich neu definiert die Größe des Rahmens? Welche Funktion soll ich usw. nennen Wie zentriere ich das Bild?
Ich bin neu in diesem so ich für die Mehrdeutigkeit meiner Frage entschuldigen.
Prost
Lösung
Ich habe es herausgefunden. Es war der Rahmen der einzelnen Seiten, dass ich Änderungen erforderlich, so (mit Hilfe von einer anderen Frage gewonnen) ich eine Re-Orient-Methode geschrieben hat.
Der erste Schritt dazu gekommen, weil ich herausgefunden, dass ich Iterierte benötigt durch und die Größe neu bestimmen jeden Rahmen für jede meiner Seiten und dann erneut bewerben den Rahmen zu der Ansicht. Damit dies geschehen kann brauchte ich ein Array zu erstellen, die ich oben in der For-Schleife füllen würde. Ich habe insgesamt 7 Seiten.
Dann könnte ich (auf drehen) rufen die folgenden Wieder orientieren Verfahren zur Wieder Größe jede Ansicht:
- (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++;
}
}
}
Andere Tipps
Das ist für mich gearbeitet:
- (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)];
}
Grundsätzlich setze ich den Inhalt für die neue Scrollinhaltsgröße versetzt, bevor rotierenden (Ich bin Schale Höhe und Breite für die erwartete Höhe und Breite).
Das ist für mich gearbeitet, als das Drehen eines Vollbild-UIScrollView ausgelagert.
Alle der ausgelagerten Subviews haben Maske die folgenden automatischen Größen, damit sie ordentlich in Position nach einer Drehung fallen:
UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleRightMargin