iPhone UIScrollView - как получить заголовок изображения - PullRequest
1 голос
/ 06 июня 2009

Я пытаюсь изучить UIScrollview, используя документы Apple и их пример кода http://developer.apple.com/iphone/library/samplecode/Scrolling/index.html, но что-то настолько простое ускользает от меня.

Как вы скажете, какое изображение в данный момент находится на экране, чтобы, если бы я выбрал одно из изображений в режиме горизонтальной прокрутки, как бы я получил имя файла изображения или даже указатель в массиве, чтобы затем сделать что-то еще с изображением.

Я подумал, что с включенным Page Control я смогу найти страницу # и сопоставить ее с изображением. Я думал о подсчете замедления для подсчета страниц, но недостаточно полный щелчок увеличит его и даст ложное число.

Последнее, о чем я мог подумать, это получить contentOffSet и разделить на размер изображения, который даст 1, 2, 3, и я мог бы указать на массив (слишком устал, чтобы попробовать сегодня вечером ... подумал, что могу спросить до тратить гораздо больше времени ;-)).

Есть еще идеи? Я думал, что это будет метод где-то, что они используют в приложении фотоальбом.

Спасибо за вашу помощь! Может быть, я просто не понимаю их код.

Пол

PS: вот код:

- (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)];

}

  • (аннулируются) viewDidLoad { self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor];

    // 1. настроить scrollview для нескольких изображений и добавить его в контроллер вида // // примечание: следующее можно сделать в Интерфейсном Разработчике, но мы покажем это в коде для ясности [scrollView1 setBackgroundColor: [UIColor blackColor]]; [scrollView1 setCanCancelContentTouches: NO]; scrollView1.indicatorStyle = UIScrollViewIndicatorStyleWhite; scrollView1.clipsToBounds = YES; // по умолчанию NO, мы хотим ограничить рисование в нашем scrollview scrollView1.scrollEnabled = YES;

    // свойство pagingEnabled по умолчанию НЕТ, если установлено, скроллер будет останавливаться или привязываться к каждой фотографии // если вам нужна свободная прокрутка, не устанавливайте это свойство. scrollView1.pagingEnabled = YES;

    // загрузить все изображения из нашего комплекта и добавить их в представление прокрутки // NSUInteger i; для (i = 1; i <= kNumImages; i ++) { NSString * imageName = [NSString stringWithFormat: @ "Card% d.png", i]; UIImage * image = [UIImage imageNamed: imageName]; UIImageView * imageView = [[UIImageView alloc] initWithImage: image]; </p>

    // 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]; // теперь размещаем фотографии в серийном макете внутри прокрутки

1 Ответ

2 голосов
/ 07 июня 2009

Это было легко после хорошего сна!

CGPoint p = scrollView1.contentOffset;
NSLog(@"x = %f, y = %f", p.x, p.y);

Теперь просто разделите на 320 (если изображение горизонтальное и полноэкранное) и добавьте 1 (потому что он начинается с 0).

Надеюсь, это поможет кому-то еще!

Пол

...