Frage

Ich baue eine App auf der Basis der „Scrolling“ Beispielcode, der von Apple zur Verfügung gestellt. Alle funktionieren sehr gut. Die Art der Bilder, die ich angezeigt werden soll, wäre es wünschenswert machen, wenn die Reihenfolge der Bilder umgekehrt wird, und dass das erste sichtbare Bild ist das am weitesten rechts, eher als die am weitesten links. Grundsätzlich sollte der Benutzer zurückblättern, von rechts nach links, anstatt von links nach rechts. Aber jetzt: Ich verstehe nicht, die Syntax von Apple verwendet, und ich hoffe, jemand kann mir erklären, was vor sich geht. Hier sind die relevanten Teile der Beispielanwendung:

- (void)viewDidLoad
{
    self.view.backgroundColor = [UIColor whiteColor];

    // load all the images from our bundle and add them to the scroll view
    NSUInteger i;
    for (i = 1; i <= kNumImages; i++)
    {
        NSString *imageName = [NSString stringWithFormat:@"image%d.jpg", i];
        UIImage *image = [UIImage imageNamed:imageName];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

        // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList"
        CGRect rect = imageView.frame;
        rect.size.height = kScrollObjHeight;
        rect.size.width = kScrollObjWidth;
        imageView.frame = rect;
        imageView.tag = i;  // tag our images for later use when we place them in serial fashion
        [scrollView1 addSubview:imageView];
        [imageView release];
    }

    [self layoutScrollImages];  // now place the photos in serial layout within the scrollview

}

- (void)layoutScrollImages
{
    UIImageView *view = nil;
    NSArray *subviews = [scrollView1 subviews];

    // reposition all image subviews in a horizontal serial fashion
    CGFloat curXLoc = 0;
    for (view in subviews)
    {
        if ([view isKindOfClass:[UIImageView class]] && view.tag > 0)
        {
            CGRect frame = view.frame;
            frame.origin = CGPointMake(curXLoc, 0);
            view.frame = frame;

            curXLoc += (kScrollObjWidth);
        }
    }

    // set the content size so it can be scrollable
    [scrollView1 setContentSize:CGSizeMake((kNumImages * kScrollObjWidth), [scrollView1 bounds].size.height)];
}
War es hilfreich?

Lösung

Das ist also, was ich am Ende tun: I invertiert zuerst die Reihenfolge der Subviews und dann habe ich die Scroll Sprung zum letzten ‚Rahmen‘, indem die folgenden Zeilen:

CGPoint lastFrame = CGPointMake(((kNumImages -1) * kScrollObjWidth), 0.0f);
[scrollview setContentOffset:lastFrame];

Ich hoffe, dass dies irgendwie nützlich ist jemand ...

Andere Tipps

Es sieht aus wie Sie layoutScrollImages ändern müssen. Initialisiere curXLoc auf die maximale Anzahl benötigt wird, und es in der Schleife dekrementieren.

- (void)layoutScrollImages
{
    UIImageView *view = nil;
    NSArray *subviews = [scrollView1 subviews];

    // reposition all image subviews in a horizontal serial fashion
    CGFloat curXLoc = kNumImages * kScrollObjWidth;
    for (view in subviews)
    {
        if ([view isKindOfClass:[UIImageView class]] && view.tag > 0)
        {
                CGRect frame = view.frame;
                frame.origin = CGPointMake(curXLoc, 0);
                view.frame = frame;

                curXLoc -= (kScrollObjWidth);
        }
    }

    // set the content size so it can be scrollable
    [scrollView1 setContentSize:CGSizeMake((kNumImages * kScrollObjWidth), [scrollView1 bounds].size.height)];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top