Pregunta

Estoy creando una aplicación basada en el "Desplazamiento" código de muestra que Apple proporcionó. Todo está funcionando muy bien. La naturaleza de las imágenes que quiero mostrar, lo haría deseable, si se invierte el orden de las imágenes, y que la primera imagen visible es la más a la derecha, en lugar de la más a la izquierda. Básicamente, el usuario debe desplazarse hacia atrás, de derecha a izquierda, en lugar de izquierda a derecha. Pero ahora: no entiendo la sintaxis que Apple está usando, y espero que alguien pueda explicarme lo que está sucediendo. Estas son las partes relevantes de la aplicación de muestra:

- (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)];
}
¿Fue útil?

Solución

Entonces, esto es lo que terminé haciendo: Primero invertí el orden de las subvistas, y luego hice que la vista de desplazamiento saltara al último 'marco', agregando las siguientes líneas:

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

Espero que de alguna manera esto sea útil para alguien ...

Otros consejos

Parece que necesita modificar layoutScrollImages. Inicialice curXLoc al número máximo necesario y disminuya en el bucle.

- (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)];
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top