iCulture forum | iPhone, iPad,  iPod touch, Apple TV en iOS

iCulture forum | iPhone, iPad, iPod touch, Apple TV en iOS (https://forum.iculture.nl/)
-   Ontwikkelen voor iOS (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/)
-   -   ruimte tussen page control (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/86906-ruimte-tussen-page-control.html)

Jeroen0704 16-03-11 16:10

ruimte tussen page control
 
Hee,

Ik maak voor mijn app een foto galerie die net ongeveer net zo werkt als de foto's app van Apple zelf. Het werkt goed, behalve dat ik graag een kleine zwarte ruimte van zo'n 20 pixels tussen de foto's zou willen net zoals in de foto's app van Apple zelf. Ik heb al geprobeerd mijn code aan te passen, maar met niet zo veel succes:P

Dit is mijn code:

Code:

- (void)setupPage
{
   
        scrollView.delegate = self;
       
        [self.scrollView setBackgroundColor:[UIColor clearColor]];
        [scrollView setCanCancelContentTouches:NO];
       
        scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
        scrollView.clipsToBounds = YES;
        scrollView.scrollEnabled = YES;
        scrollView.pagingEnabled = YES;
       
        NSUInteger nimages = 0;
        CGFloat cx = 0;
        for (; ; nimages++) {
                NSString *imageName = [NSString stringWithFormat:@"foto%d.png", (nimages + 1)];
                UIImage *image = [UIImage imageNamed:imageName];
                if (image == nil) {
                        break;
                }
                UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
               
                CGRect rect = imageView.frame;
                rect.size.height = image.size.height;
                rect.size.width = image.size.width;
        rect.origin.x = ((scrollView.frame.size.width - image.size.width) / 2) + cx;
 
                rect.origin.y = ((scrollView.frame.size.height - image.size.height) / 2);
               
                imageView.frame = rect;
               
                [scrollView addSubview:imageView];
                [imageView release];

                cx += scrollView.frame.size.width;
        }
       
        self.pageControl.numberOfPages = nimages;
        [scrollView setContentSize:CGSizeMake(cx, [scrollView bounds].size.height)];
}

Code:

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

    if (pageControlIsChangingPage) {
        return;
    }
           
    CGFloat pageWidth = _scrollView.frame.size.width ;
    int page = floor((_scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    pageControl.currentPage = page;
}

Code:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)_scrollView
{
    pageControlIsChangingPage = NO;
}

Code:

- (IBAction)changePage:(id)sender
{
   
    CGRect frame = scrollView.frame;
    frame.origin.x = frame.size.width * pageControl.currentPage;
    frame.origin.y = 0;
       
    [scrollView scrollRectToVisible:frame animated:YES];
       
    pageControlIsChangingPage = YES;
}


iMidas 16-03-11 20:58

Apple heeft net de Broncode van iOS 4.1 open gezet misschien kun je het daar in vinden? ;)

Jeroen0704 16-03-11 21:29

Heb je een link, want ik kan het niet vinden op het developer center en heb een paid developer account.

Geno 16-03-11 23:49

Je kan in die delegate methods van UIScrollView een contentOffset meegegeven aan je scrollView.frame. Tijdens het scrollen wordt er dan extra ruimte gecreëerd.

Of je kan een UIView aanmaken, die zwart is (en groter is dan je imageView) en dan imageView als subview plaatsen. Je kan dan bounds terug vragen van de imageView om de size te krijgen en dan +20 pixels. Maar lijkt me niet de beste oplossing.

Geno 09-04-11 20:41

Ik wil mezelf even verbeteren hier, gezien ik zelf ook hier mee bezig ben geweest.

Om ruimte van 20 pixels tussen de foto's te krijgen doe je het volgende:

Code:

// Je wil eerst de grootte van het scherm weten
CGRect extraFrame = [[UIScreen mainScreen] bounds];
// Je laat de origin van het frame 10 points naar links beginnen
extraFrame.origin.x -= 10;
// Je voegt 20 points toe in de totale breedte van het frame
extraFrame.size.width += 20;
// Daarna gebruik je een initializer om de frame grootte toe te voegen aan je UIScrollview
scrollView = [[UIScrollView alloc] initWithFrame:extraFrame];


Jeroen0704 11-04-11 15:42

Bedankt voor je reactie, ga het morgen meteen toepassen!


Alle tijden zijn GMT +2. Het is nu 20:03.