UIScrollView scrollt statt zu zoomen

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

  • UIScrollView scrollt statt zu zoomen

    Hallo,

    ich habe ein Problem mit einem UIScrollView. Immer wenn ich versuche zu Zoomen, bewegt sich stattdessen der View nach rechts unten bzw. wenn ich rauszoome nach links oben. Nachdem ich versucht habe zu zoomen, kann ich auch nicht mehr scrollen.

    Ich habe einen View Controller mit einem UIScrollView. In viewDidLoad erstelle ich dann einen View mit einem weiteren Subview (ein UIButton mit Label). Diesen Gesamt-View verwende ich dann wiederum als Subview des Scroll Views:

    Quellcode

    1. - (void)viewDidLoad
    2. {
    3. [super viewDidLoad];
    4. // Gesamt-View erstellen
    5. UIView *gridView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 568, 460)];
    6. [gridView setBackgroundColor:[UIColor colorWithRed:251.0/255.0 green:150.0/255.0 blue:59.0/255.0 alpha:255.0/255.0]];
    7. // Den Button erstellen
    8. UIButton *firstButton = [UIButton buttonWithType:UIButtonTypeCustom];
    9. [firstButton setFrame:CGRectMake(100.0f, 100.0f, 60.0f, 60.0f)];
    10. firstButton.tag = 1;
    11. UIImage *buttonImage = [UIImage imageNamed:@"ButtonWhite.png"];
    12. [firstButton setBackgroundImage:buttonImage forState: UIControlStateNormal];
    13. [firstButton addTarget:self action:@selector(myMethod:) forControlEvents:UIControlEventTouchUpInside];
    14. firstButton.titleLabel.text = @"";
    15. // Beschriftung des Buttons
    16. UILabel *timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(ceil(0.08333*firstButton.frame.size.width), ceil((0.166*firstButton.frame.size.height)), ceil(0.83333*firstButton.frame.size.width), ceil((0.166*firstButton.frame.size.height)))];
    17. timeLabel.textAlignment = UITextAlignmentCenter;
    18. timeLabel.font = [UIFont fontWithName:@"Arial Rounded MT Bold" size:(8.0)];
    19. timeLabel.adjustsFontSizeToFitWidth = YES;
    20. //timeLabel.minimumFontSize = 8.0;
    21. timeLabel.textColor = [UIColor blackColor];
    22. timeLabel.backgroundColor = [UIColor clearColor];
    23. timeLabel.text = @"18.30 - 19.30";
    24. // Das Beschriftungs-Label zum Button hinzufügen
    25. [firstButton addSubview:timeLabel];
    26. // Den Button zum Gesamt-View hinzufügen
    27. [gridView addSubview:firstButton];
    28. self.scrollView.contentSize = gridView.frame.size;
    29. [self.scrollView addSubview:gridView];
    30. }
    Alles anzeigen


    Dann habe ich die Zoom-Funktion für den Scroll View implementiert. Dazu habe ich zunächst die Methode viewForZoomingInScrollView: definiert.
    Zurückgegeben wird der erste Subview im Scroll View, was eigentlich der gewünschte Gesamt-View (gridView) sein sollte.

    Quellcode

    1. - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    2. return [self.scrollView.subviews objectAtIndex:0];
    3. }


    Außerdem ist natürlich das UIScrollViewDelegate eingebunden und mit dem Scroll View im Storyboard verbunden.


    Ich habe schon rumprobiert mit multitouchEnabled, userInteractionEnabled auf dem Gesamt-View und versucht den Scroll View im Code zu erstellen, hat aber alles nichts gebracht.
    Ich weiß nicht, woran es liegen könnte.

    Ich hoffe ihr könnt mir helfen


    Danke im Voraus
    feop
  • Ich sehe nicht direkt einen Knackpunkt, aber prüfe doch einmal
    1. ob gridView wirklich der Rückgabewert von viewForZoomingInScrollView:scrollView ist
    2. für die scrollView minimumZoomScale und maximumZoomScale richtig gesetzt sind
    Der Umstand, dass Du anschliessend nicht mehr scrollen kannst, lässt mich auf eine falsche contentSize tippen, die falsche Position beim Zoomen auf die autoresizingMask ... sorry, das sind jetzt viele Vermutungen, ob Dir das wirklich weiterhilft? Ich würde mir eine eigene ScrollView-Klasse anlegen und dort die entsprechenden Properties setzen.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Vielen, vielen Dank!
    Es funktioniert :) . Dein erster Vorschlag hat gestimmt.
    Anscheinend erhält man mit self.scrollView.subviews nicht nur die direkten Subviews, sondern auch darunterliegende. Das heißt, auch der Button und das Label waren ein Subview des Scroll Views, weshalb ich mit objectAtIndex:0 auf das timeLabel und nicht auf den Gesamt-View zugegriffen habe.

    Nochmals Danke

    Gruß
    feop