UIScrollView - (Bounces = NO) scheint zu überschreiben (PagingEnabled = YES)

Ich habe eine UIScrollView mit Paging (also das typische Modell mit einem UIPageControl und Ziehen / Wischen nach links und rechts zwischen Seiten), und das funktioniert einwandfrei. Das Seltsame ist, dass das Paging plötzlich nicht mehr funktioniert, wenn ich das Hüpfen loswerden wollte (so dass Sie hinter der Benutzeroberfläche auf der linken und rechten Seite kein Schwarz mehr sehen können).

Mit anderen Worten, wenn:

scrollView.pagingEnabled = YES;
scrollView.bounces = YES;

Alles funktioniert einwandfrei, außer ich mag das Prellen auf Seite (0) und Seite (Länge-1) nicht. Aber wenn ich das mache:

scrollView.pagingEnabled = YES;
scrollView.bounces = NO;

Es rastet nicht mehr auf jeder Seite ein, sondern behandelt alle Seiten zusammen als eine lange Seite. Es scheint also, dass das Blättern aus irgendeinem Grund vom Hüpfen abhängt, was in Ordnung ist, solange ich das Hüpfen irgendwie stoppen kann. Also, gibt es eine andere Möglichkeit, es loszuwerden? Oder mache ich etwas falsch?

BEARBEITEN:Die Lösung:

@interface PagingScrollView : UIScrollView
@end

@implementation PagingScrollView

- (id)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame])
    {
        self.pagingEnabled = YES;
        self.bounces = YES;
    }
    return self;
}

- (void)setContentOffset:(CGPoint)offset
{
    CGRect frame = [self frame];
    CGSize contentSize = [self contentSize];
    CGPoint contentOffset = [self contentOffset];

    // Clamp the offset.
    if (offset.x <= 0)
        offset.x = 0;
    else if (offset.x > contentSize.width - frame.size.width)
        offset.x = contentSize.width - frame.size.width;

    if (offset.y <= 0)
        offset.y = 0;
    else if (offset.y > contentSize.height - frame.size.height)
        offset.y = contentSize.height - frame.size.height;

    // Update only if necessary 
    if (offset.x != contentOffset.x || offset.y != contentOffset.y)
    {
        [super setContentOffset:offset];
    }
}

@end

Antworten auf die Frage(1)

Ihre Antwort auf die Frage