Ich implementierte ein benutzerdefiniertes Aktualisierungssteuerelement (meine eigene Klasse, keine Unterklasse) und aus irgendeinem Grund seit dem Verschieben auf iOS 8 das contentInset der Bildlaufansicht (speziell UICollectionView) zu starten Aktualisierungsanimation verursacht einen seltsamen Sprung/Stottern. Hier ist mein Code:Animieren von UIScrollView contentInset verursacht Sprungstottern
- (void)containingScrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat scrollPosition = scrollView.contentOffset.y + scrollView.contentInset.top;
if(scrollPosition > 0 || self.isRefreshing)
{
return;
}
CGFloat percentWidth = fabs(scrollPosition)/self.frame.size.height/2;
CGRect maskFrame = self.maskLayer.frame;
maskFrame.size.width = self.imageLayer.frame.size.width * percentWidth;
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
self.maskLayer.frame = maskFrame;
[CATransaction commit];
}
- (void)containingScrollViewDidEndDragging:(UIScrollView *)scrollView
{
if((self.maskLayer.frame.size.width >= self.imageLayer.frame.size.width) && !self.isRefreshing)
{
self.isRefreshing = YES;
[self setLoadingScrollViewInsets:scrollView];
[self startAnimation];
[self sendActionsForControlEvents:UIControlEventValueChanged];
}
}
- (void)setLoadingScrollViewInsets:(UIScrollView *)scrollView
{
UIEdgeInsets loadingInset = scrollView.contentInset;
loadingInset.top += self.frame.size.height;
UIViewAnimationOptions options = UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionBeginFromCurrentState;
[UIView animateWithDuration:0.2 delay:0 options:options animations:^
{
scrollView.contentInset = loadingInset;
}
completion:nil];
}
Grundsätzlich, sobald der Benutzer Versionen zu aktualisieren, ich animieren die contentInset auf die Höhe der Refresh-Steuer. Ich denke, die Animation würde Stottern/Juckreiz reduzieren, was sie in iOS 7 getan hat. Aber in iOS 8, wenn die scrollView vom Ziehen befreit wird, anstatt nur zum contentInset zu animieren, springt der Inhalt der Bildansicht ab dem Zeitpunkt der Veröffentlichung wirklich nach unten schnell und dann animiert reibungslos. Ich bin mir nicht sicher, ob das ein Fehler in iOS 8 oder was ist. Ich habe auch versucht, hinzuzufügen:
scrollView.contentOffset = CGPointZero;
im Animationsblock, der nichts geändert hat.
Hat jemand irgendwelche Ideen? Jede Hilfe würde sehr geschätzt werden. Vielen Dank!
für mich gearbeitet! Du schaukelst. Danke, dass Sie das hier eingefügt haben. – boztalay
Sie haben Recht, dies behebt das Problem. Es sieht so aus, als ob die animation allein durch die Animation der contentInset die Verzögerungs-Animation beeinflusst, weshalb ein "Sprung" erscheint. Mit dem contentOffset wird die Animation von der aktuellen Position gestartet. –
Das Einfügen des Inhaltsversatzes in der Animation scheint ziemlich schwer zu erraten. Wie hast du es herausgefunden? – Tudorizer