iphone UIScrollView обратный порядок позиционирования

StackOverflow https://stackoverflow.com/questions/1026558

  •  06-07-2019
  •  | 
  •  

Вопрос

Я создаю приложение на основе " прокрутки " образец кода, предоставленный Apple. Все работает очень хорошо. Характер изображений, которые я хочу отобразить, сделал бы желательным, если бы порядок изображений был обратным, и чтобы первое видимое изображение было крайним правым, а не левым. По сути, пользователь должен прокручивать назад, справа налево, а не слева направо. Но сейчас: я не понимаю синтаксиса, который использует Apple, и я надеюсь, что кто-нибудь сможет объяснить мне, что происходит. Вот соответствующие части примера приложения:

- (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)];
}
Это было полезно?

Решение

Так вот что я в итоге сделал: Сначала я перевернул порядок подпредставлений, а затем сделал переход от прокрутки к последнему «кадру», добавив следующие строки:

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

Я надеюсь, что это кому-то пригодится ...

Другие советы

Похоже, вам нужно изменить layoutScrollImages. Инициализируйте curXLoc до необходимого максимального числа и уменьшите его в цикле.

- (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)];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top