2010-12-15 5 views
0

Ich versuche, Fotoalbum wie photo.app in iPhone zu machen. Ich weiß, wir haben 'PhotoScroller' Beispiel von Apple (was ich glaube nicht, dass ich den Code hier kopieren und einfügen kann, aufgrund der Non Disclosure Agreement, plus es ist ein bisschen zu groß, um damit zu spielen). Allerdings habe ich ein weiteres Beispiel aus der Zufallssuche gefunden und es scheint, als ob es auf dem PhotoScroller basiert (sehr vereinfachtes Tough). Der Link für das Beispiel ist; http://ykyuen.wordpress.com/2010/05/22/iphone-uiscrollview-with-paging-example/photoview mit UIScrollViewController

Ich habe diesen Code auf mein Projekt angewendet, um ein Fotoalbum zu machen (und es scrollt, zumindest), aber ich habe ein Problem gefunden. Das Problem ist, dass ich nicht von der Seite starten kann, die ich möchte. Der Beispielcode beginnt nur mit der ersten Seite zu scrollen. Code selbst scheint "wirklich" einfach zu sein, aber irgendwie kann ich es einfach nicht von der Seite starten, die ich gewählt habe.

Hier ist der Hauptteil des Beispielcodes, den ich im Internet gefunden habe. Sie können das Projekt natürlich über den obigen Link herunterladen.

- (void)viewDidLoad { 

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

// Ansicht Controller sind lazily // in der Zwischenzeit erstellt, laden das Array mit Platzhalter, die auf Anforderung NSMutableArray * Controller = [[NSMutableArray alloc] init] ersetzt wird; für (unsigned i = 0; i < kNumberOfPages; i ++) { [Controller addObject: [NSNull null]]; } self.viewControllers = Controller; [Regler freigeben];

// 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"); wenn (Seite < 0) zurückgeben; if (page> = kNumberOfPages) zurückgeben;

// 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]; 
    // 

[Reglerfreigabe]; }

// 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 = Seite;

// 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 *) Scroll { NSLog (@ "ScrollViewWithPagingViewContrller :: scrollViewWillBeginDragging"); pageControlUsed = NEIN; }

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

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

- (IBAction)changePage:(id)sender { 

NSLog (@ "ScrollViewWithPagingViewContrller :: change"); 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]; 

// die Scroll-Ansicht CGRect Rahmen auf die entsprechende Seite aktualisieren = scrollView.frame; frame.origin.x = frame.size.width * Seite; frame.origin.y = 0; [scrollView scrollRectToVisible: Rahmen animiert: YES];

// Legen Sie den Booleschen Wert fest, wenn Schriftrollen von UIPageControl stammen. Siehe scrollViewDidScroll: oben. pageControlUsed = JA; }

Antwort

0

Die Antwort ist

scrollView1.contentOffset CGPointMake = (,);

ganz einfach. verbrachte viel Zeit.

0

Ich habe Fotoalbum-Ansicht implementiert wo in der ersten Ansicht habe ich alle Miniaturbilder gezeigt und beim Klicken auf jedes Bild gibt es seine Vollbildansicht. Sie scroo auch die Bilder. See this answer.

Alles Gute.

+0

Gott ... Einfügen Code ist wirklich Schmerz in der BU * t. Danke für die Antwort Warrior. Ich werde es mir ansehen. – bicbac

+0

Ich habe auch eine Miniaturansicht, die 12 Miniaturansichten enthält. Jedes Thumbnail ist UIButton, wenn gedrückt -> Ansicht spiegeln -> große Bildansicht. und dann mit UIScrollViewController tauschen. das ist mein Plan. Ich habe nur deinen Code gelesen und ... ich habe keine Ahnung, wo ich anfangen soll. Hast du irgendwo einen Code? – bicbac

+0

Erstellen Sie zwei Klassen und fügen Sie den von mir bereitgestellten Code ein. Ich kann Ihnen helfen, wenn Sie Zweifel in der Integration haben. Wenn Sie noch mehr Problem haben, werde ich versuchen, Ihnen einige Beispielcode zu schicken. Geben Sie Ihre E-Mail-ID .. – Warrior