4 Stimmen

Verschachtelte UIScrollView springt nicht zurück und erkennt langsame Wischgesten nicht, wenn bounce auf NO gesetzt ist

Entschuldigung für den langen und selbsterklärenden Titel, aber UIScrollView hat so viele Fragen aufgeworfen, dass ich es schwierig finde, die zu erreichen, die in verschiedenen Situationen helfen könnten.

Ich habe verschachtelte Scrollviews in meiner iPad-App. So weit so gut, alles hat seine Höhen und Tiefen, aber seine ganz glatt und reaktionsschnell. Meine äußere Scrollansicht ist eine Seitenansicht, die Vollbild- oder größere Inhaltsscrollviews enthält. Die äußere Bildlaufansicht ist horizontal und die innere vertikal. Wie bei der Fotogalerie. Ich habe festgestellt, dass beim Zoomen und Scrollen in der inneren Bildlaufansicht eine merkliche Verzögerung bei der Erkennung langsamer und langer Wischgesten auftritt. NUR, wenn die Bildlaufansicht bis zum unteren Rand des Inhalts gescrollt wurde und das Bouncing ausgeschaltet ist.

die andere Sache ist, dass die innere Scrollview bouncing Eigenschaft YES/NO pseudo-zufällig geht. Also, das ist der Code in den Konstruktor, der die inneren scrollviews, die handeln oben festgelegt:

    if (UIInterfaceOrientationIsPortrait(forOrientation)) {
        self.minimumZoomScale = 1.0;
        self.maximumZoomScale = 1.0;    
        self.bounces = NO;
        self.alwaysBounceVertical = NO;
        self.scrollEnabled = NO;
    }else if (UIInterfaceOrientationIsLandscape(forOrientation)){
        self.minimumZoomScale = 1.333333f;
        self.maximumZoomScale = 1.333333f;
        self.bounces = YES;
        self.alwaysBounceVertical = YES;
        self.scrollEnabled = YES;
    }

    self.scrollsToTop = NO;
    self.showsVerticalScrollIndicator = YES;
    self.showsHorizontalScrollIndicator = NO;
    self.directionalLockEnabled = YES;
    self.delegate = self;

    self.pagingEnabled = NO;

    self.canCancelContentTouches = NO;
    self.delaysContentTouches = YES;

Wenn das iPad gedreht wird, kommt und geht das Bouncing auch für die Scroll-Ansicht und hat ebenfalls einen Bouncing-Störer.

Ist das ein Fehler oder liegt es nur an mir, dass ich es versaue?

vielen Dank im Voraus für Ihre Zeit und Ihr Interesse!

UPDATE: Ich bin Verschachtelung zwei scrollviews, die eigentlich Subclasses von UIScrollView sind. Ich tue dies, weil ich hitTest und andere Methoden sowie überschreiben müssen. Ich habe auch die hier beschriebene bessere Lösung ausprobiert http://openradar.appspot.com/8045239 und haben keine guten Ergebnisse erzielt.

3voto

Pacu Punkte 1945

Ich beantworte damit meine eigene Frage.

Öffnen Sie die Fehlerlösung von Radar, die in der Frage gepostet wurde. Es ist nicht sehr klar, was isoliert werden muss, um die Größenänderung von uiscrollview zu stoppen und Bounces abzubrechen

Grundsätzlich muss ALLES, was den Rahmen der Ansicht während layoutSubViews ändern kann, nur EINMAL durchgeführt werden, indem doppelt geprüft wird, ob die Größe gleich der Änderung ist, die in layoutSubviews kodiert ist, dann wird das nicht mehr als einmal ausgeführt.

-(void)layoutSubviews {

///...

if (!self.bounces) {
             self.bounces = YES;
        }
        if(!self.scrollEnabled){
           self.scrollEnabled = YES;
        }
        if (!CGSizeEqualToSize(rect.size, self.contentSize)) {
            self.contentSize = rect.size;
        }
 if (self.zoomScale < MAXIMUM_ZOOM_SCALE ) {

            [self zoomToRect:ZOOM_RECT_MAKE animated:NO];// otherwise this line of code won't do anything at all

        }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X