просмотр фотографий с использованием UIScrollViewController - PullRequest
0 голосов
/ 15 декабря 2010

Я пытаюсь сделать фотоальбом наподобие photo.app в iPhone.Я знаю, что у нас есть пример «PhotoScroller» от Apple (который я не думаю, что смогу скопировать и вставить код здесь из-за Соглашения о неразглашении, плюс он немного сложен для игры в данный момент).Однако я нашел еще один пример из случайного поиска, и похоже, что он основан на PhotoScroller (очень упрощенно).Ссылка для примера есть;http://ykyuen.wordpress.com/2010/05/22/iphone-uiscrollview-with-paging-example/

Я применил этот код к своему проекту для создания фотоальбома (по крайней мере, с прокруткой), но обнаружил проблему.Проблема в том, что я не могу начать со страницы, которую хочу.Пример кода начинает прокручиваться только с первой страницы.Сам код кажется «действительно» простым, но почему-то я просто не могу начать его со страницы, которую выбираю.

Вот основная часть примера кода, который я нашел в Интернете.Конечно, вы можете скачать проект по ссылке выше.

- (void)viewDidLoad {

NSLog (@ "ScrollViewWithPagingViewContrller :: viewDidLoad");[super viewDidLoad];

// контроллеры представления создаются лениво // тем временем, загружаем массив с заполнителями, которые будут заменены по требованию NSMutableArray * controllers = [[NSMutableArray alloc] init];for (без знака i = 0; i

// a page is the width of the scroll view
scrollView.pagingEnabled = YES;
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * kNumberOfPages, scrollView.frame.size.height);
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.scrollsToTop = NO;
scrollView.delegate = self;

pageControl.numberOfPages = kNumberOfPages;
pageControl.currentPage = 0;

// pages are created on demand
// load the visible page
// load the page on either side to avoid flashes when the user starts scrolling
[self loadScrollViewWithPage:0];
[self loadScrollViewWithPage:1];}

- (void)loadScrollViewWithPage:(int)page {

NSLog (@ "ScrollViewWithPagingViewContrller :: loadScrollViewWithPage");if (страница <0) возврат;if (page> = kNumberOfPages) return;

// replace the placeholder if necessary


MyViewController *controller = [viewControllers objectAtIndex:page];
if ((NSNull *)controller == [NSNull null]) {
    controller = [[MyViewController alloc] initWithPageNumber:page];
    [viewControllers replaceObjectAtIndex:page withObject:controller];
  //

[выпуск контроллера];}

// add the controller's view to the scroll view
if (nil == controller.view.superview) {
    CGRect frame = scrollView.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    controller.view.frame = frame;
    [scrollView addSubview:controller.view];
}

}

- (void)scrollViewDidScroll:(UIScrollView *)sender {

NSLog (@ "ScrollViewWithPagingViewContrller :: scrollViewDidScroll");

// We don't want a "feedback loop" between the UIPageControl and the scroll delegate in
// which a scroll event generated from the user hitting the page control triggers updates from
// the delegate method. We use a boolean to disable the delegate logic when the page control is used.
if (pageControlUsed) {
    // do nothing - the scroll was initiated from the page control, not the user dragging
    return;
}

// Switch the indicator when more than 50% of the previous/next page is visible
CGFloat pageWidth = scrollView.frame.size.width;

int page = floor (scrollView.contentOffset.x- pageWidth / 2) / pageWidth;pageControl.currentPage = page;

// load the visible page and the page on either side of it (to avoid flashes when the user starts scrolling)
[self loadScrollViewWithPage:page - 1];
[self loadScrollViewWithPage:page];
[self loadScrollViewWithPage:page + 1];

// A possible optimization would be to unload the views+controllers which are no longer visible

}

// At the begin of scroll dragging, reset the boolean used when scrolls originate from the UIPageControl

- (void) scrollViewWillBeginDragging: (UIScrollView *) scrollView {NSLog (@ "ScrollViewWithPagingViewContrller :: scrollViewWillBeginDrapping)pageControlUsed = NO;}

    // At the end of scroll animation, reset the boolean used when scrolls originate from the UIPageControl

- (void) scrollViewDidEndDecelerating: (UIScrollView *) scrollView {NSLog (@ "ScrollViewWithPagingViewContrller :: scrollViewDidEndDecelerating");pageControlUsed = NO;}

- (IBAction)changePage:(id)sender {

NSLog (@ "ScrollViewWithPagingViewContrller :: changePage");int page = pageControl.currentPage;

// load the visible page and the page on either side of it (to avoid flashes when the user starts scrolling)
[self loadScrollViewWithPage:page - 1];
[self loadScrollViewWithPage:page];
[self loadScrollViewWithPage:page + 1];

// обновить представление прокрутки до соответствующей страницы CGRect frame = scrollView.frame;frame.origin.x = frame.size.width * page;frame.origin.y = 0;[scrollView scrollRectToVisible: frame animated: YES];

// Установите логическое значение, используемое, когда свитки происходят из UIPageControl.Смотрите scrollViewDidScroll: выше.pageControlUsed = YES;}

Ответы [ 2 ]

0 голосов
/ 15 декабря 2010

Ответ

scrollView1.contentOffset = CGPointMake (,);

довольно просто. провел много времени.

0 голосов
/ 15 декабря 2010

Я реализовал вид фотоальбома, где при первом просмотре я показал все миниатюрные изображения и, щелкнув по каждому изображению, выдает полный экран.Вы также scroo изображения. Смотрите этот ответ .

Всего наилучшего.

...