Bug: UIScrollView mit UIPageControl - Scrolling wie am Homescreen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Bug: UIScrollView mit UIPageControl - Scrolling wie am Homescreen

    Hallo liebe Programmierer!

    Ich entwickle gerade eine OpenSource-Komponente, die das Scrolling zwischen verschiedenen Seiten ermöglicht (also eine Kopie von Apple's eigenem Scrolling am Home-Screen). Dieses soll auf dem iPhone im Portrait-Modus sowie auf dem iPad sowohl in Portrait als auch Landscape funktionieren. Leider gibt es einen Bug bei der Rotation und die Seiten überlappen einander danach.

    Der Source steht unter github.com/myellow/PageScrollView zur Verfügung, ich bin über jeden Tipp sehr dankbar und ich hoffe es kann mir jemand helfen!

    Meine Vermutung liegt, dass irgendeine View beim Rotieren ihren Frame nicht richtig automatisch neu berechnet, eventuell hab ich irgendwo den contentMode und die autoresizingMask nicht richtig gesetzt.
    Oder aber ich muss die neuen Frame-Koordinaten von Hand berechnen.

    Danke im Voraus,
    liebe Grüße Matthias





    Beim Rotieren passiert hauptsächlich folgendes, der gesamte Source ist wie oben erwähnt auf github zu finden:


    Quellcode

    1. - (void)p_resizeScrollViewForOrientation:(UIInterfaceOrientation)orientation {
    2. // only resize Scrollview for Landscape on iPad
    3. if ([[UIDevice currentDevice] isIPad] && UIInterfaceOrientationIsLandscape(orientation)) {
    4. [self p_resizeScrollViewForLandscape];
    5. } else {
    6. [self p_resizeScrollViewForPortrait];
    7. }
    8. }
    9. - (void)p_resizeScrollViewForPortrait {
    10. self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * self.viewControllers.count,
    11. self.scrollView.frame.size.height);
    12. [self p_repositionSubViews];
    13. }
    14. - (void)p_resizeScrollViewForLandscape {
    15. self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * self.viewControllers.count,
    16. self.scrollView.frame.size.height);
    17. [self p_repositionSubViews];
    18. }
    19. - (void)p_repositionSubViews {
    20. // Reposition all loaded frames
    21. for (int i = 0; i < [self.viewControllers count]; i++) {
    22. UIViewController* vc = [self.viewControllers objectAtIndex:i];
    23. if((NSNull *)vc != [NSNull null]) {
    24. // Calculate the position of the frame depending on orientation
    25. vc.view.frame = [self p_framePosition:vc.view.frame forPage:i];
    26. }
    27. }
    28. // display same page after rotation than before
    29. self.scrollView.contentOffset = CGPointMake(pageBeforeRotation_*self.scrollView.frame.size.width, 0);
    30. }
    31. - (CGRect)p_framePosition:(CGRect)frame forPage:(int)page {
    32. // Calculate frame position
    33. frame.origin.x = frame.size.width * page;
    34. frame.origin.y = 0;
    35. return frame;
    36. }
    Alles anzeigen