iOS: как пролистать изображение с нумерацией страниц - PullRequest
3 голосов
/ 25 февраля 2012

По сути, я хочу, чтобы у приложения было только одно представление с изображением.Я хочу иметь возможность провести пальцем влево или вправо и сделать так, чтобы первое изображение выходило из поля зрения, а второе появлялось. Изображения одинаковы, и я хочу, чтобы это выглядело так, как будто они соединены (как прокрутка вниз пошаблон просто повторяется, но выглядит как постоянная прокрутка).Мне нужно, чтобы иметь возможность изменить изображение или перезапустить после серии ударов.Я знаю, что мне нужно включить нумерацию страниц в UIScrollView, но я новичок в iOS и у меня проблемы.

В конечном счете, я хочу, чтобы iPhone вибрировал каждый такой-то раз (и перезапускает шаблон).

Я уверен, что есть много способов сделать это (т.е. TableView), поэтому не стесняйтесь просто указывать мне направление некоторых ссылок, если ответ утомительно объяснять.

Спасибо!

СЛЕДУЙТЕ ЗА:

Я нашелпример Apple, который сделал почти то, что я хотел сделать.Я внес много изменений в это, но я бьюсь головой о стену, пытаясь заставить изображения циклически повторяться.Вот то, что я думаю, это код обидчика, но я не уверен, что решение, так как 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)];

}

Ответы [ 2 ]

7 голосов
/ 25 февраля 2012

Я бы просто использовал UIScrollView. Установите для contentWidth значение, в 3 раза превышающее ширину / высоту представления (для 3 страниц), и для contentOffset укажите центральную «страницу» (view.bounds.size.width или view.bounds.size.height в зависимости от того, выполняете ли вы горизонтальную / вертикальную прокрутку соответственно) , Вам необходимо настроить делегат для UIScrollView (возможно, контроллера представления) и реализовать - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView. Это будет вызвано, когда представление прокрутки закончило замедление. Как только он закончил замедление, сбросьте contentOffset обратно в центральное представление. Это должно создать впечатление бесконечного свитка. Вы также можете установить счетчик для увеличения в методе scrollViewDidEndDecelerating, чтобы увеличить счетчик или инициировать вибрацию.

Вам не нужно продолжать перемещать изображения. Просто установите изображения один раз в scrollView:

//Horizontal arrangement
UIImage *image = [UIImage imageNamed:@"nameOfImage.png"];
UIImageView *imageView1 = [[UIImageView alloc] initWithImage:image];
UIImageView *imageView2 = [[UIImageView alloc] initWithImage:image];
UIImageView *imageView3 = [[UIImageView alloc] initWithImage:image];
NSArray *imageViews = [NSArray arrayWithObjects:imageView1, imageView2, imageView3];
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
[self.view addSubview: scrollView]; //This code assumes it's in a UIViewController
CGRect cRect = scrollView.bounds;
UIImageView *cView;
for (int i = 0; i < imageViews.count; i++){
    cView = [imageViews objectAtIndex:i];
    cView.frame = cRect;
    [scrollView addSubview:cView];
    cRect.origin.x += cRect.size.width;
}
scrollView.contentSize = CGSizeMake(cRect.origin.x, scrollView.bounds.size.height);
scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0); //should be the center page in a 3 page setup

Итак, изображения настроены, вам больше не нужно с ними связываться. Просто сбросьте contentOffset, когда представления прокрутки прекратятся (примечание: вам нужно убедиться, что вы являетесь делегатом представления прокрутки, иначе вы не получите сообщение, когда представление прокрутки прекратится):

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);
}

Пожалуйста, прости любые опечатки. Я написал это от руки.

1 голос
/ 25 февраля 2012

Посмотрите на cocoacontrols.com для пользовательского просмотра фотоальбома.Что касается вибрации, этот фрагмент кода вибрирует телефон (убедитесь, что вы ссылаетесь на #import <AudioToolbox/AudioToolbox.h>):

 AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...