Как я могу сделать галерею изображений UIScrollView? (iPhone SDK) - PullRequest
2 голосов
/ 18 февраля 2010

Я пытался заставить мой UIImageView изменить свое изображение при прокрутке UIScrollView, вроде как Photos.app.

Вот мой код:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    if (scrollView.contentOffset.x > 296){
        self.currentDBNum++;
        self.currentDoorbell = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[[self.doorbells objectAtIndex:currentDBNum] objectForKey:@"Image"] ofType:@"jpg"]];
        self.doorbellPic.image = currentDoorbell;
        self.currentSoundPath = [[NSBundle mainBundle] pathForResource:[[doorbells objectAtIndex:currentDBNum] objectForKey:@"Sound"] ofType:@"caf"];

    }
}

Есть намеки? Благодарю. (Изображения имеют ширину 296).

Ответы [ 4 ]

2 голосов
/ 19 февраля 2010

Antohny,

У меня нет собственного исходного кода, но я могу предложить вам следующую ссылку: http://github.com/andreyvit/ScrollingMadness

Я думаю, что это даст вам идею, чтобы вы могли реализовать ее, не ударяя по углам.

2 голосов
/ 19 февраля 2010

Есть два способа выполнить вашу задачу:

  1. Попробуйте изучить T hree20 TTPhotoViewController , который будет работать точно так же, как photo.app, который вы видите в вашем iphone,
  2. Если вы хотите сделать это самостоятельно, то, исходя из моего опыта, вам нужно добавить несколько UIImageView с правильной позицией (x, y, ширина, высота) в UIScrollView.Не забудьте инициализировать представление прокрутки с правильным размером содержимого, чтобы его можно было прокручивать.Например: image1 - это (0,0 320 480), image2 - (320 0 320 480), image3 - (640 0 320 480) и т. Д. ... тогда размер содержимого представления прокрутки будет равен значению x последнего элемента + ширинапоследний пункт.
0 голосов
/ 24 августа 2011

ты попробуй это

-(void)getButtonRowSize:(int)_rowsize Count:(int)_count
{
[scrollView setFrame:CGRectMake(0, 0, 320, 480)];
[scrollView setContentSize:CGSizeMake(320,((320-_rowsize*IMAGEGAP)/_rowsize)*(_count/_rowsize +1)+(_count/_rowsize)*IMAGEGAP)];
for(int i=0;i<_count;i++)
{
    [scrollView addSubview:[self getButtonRowSize:_rowsize Count:_count currentPos:i]];
}
}
-(UIButton *)getButtonRowSize:(int)_rowsize Count:(int)_count currentPos:(int)_pos
{
UIButton *button=[UIButton buttonWithType:UIButtonTypeCustom];
[button setFrame:CGRectMake((_pos%_rowsize)*((320-(_rowsize+1)*IMAGEGAP)/_rowsize)+(_pos%_rowsize +1)*IMAGEGAP,(_pos/_rowsize)*((320-(_rowsize+1)*IMAGEGAP)/_rowsize)+(_pos/_rowsize +1)*IMAGEGAP,((320-(_rowsize+1)*IMAGEGAP)/_rowsize),((320-(_rowsize+1)*IMAGEGAP)/_rowsize))];
[button setBackgroundImage:[self resizingImagewithimagename:[UIImage imageNamed:@"add image file name"] Length:((320-(_rowsize+1)*IMAGEGAP)/_rowsize)] forState:UIControlStateNormal];
return button;
}
0 голосов
/ 06 апреля 2011

Вы можете сделать это, используя следующий код:

UIImageView *tempImageView ; 
int initialXPos = 0;
int initialYPos = 30;

view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 800)];

int arraycounter=0;

for (int i=0; i<numrows; i++) 
{
    for (int j=0; j<numImagesPerColumn; j++) 
    {
        NSURL *url=[NSURL URLWithString:[aPhoto.childphotos objectAtIndex:arraycounter]];

        UIImage *image1;
        CGRect image1Frame;
        image1 = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
        image1Frame = CGRectMake(initialXPos,initialYPos, 80, 80);
        tempImageView = [[UIImageView alloc] initWithFrame:image1Frame];
        tempImageView.image=image1;
        tempImageView.tag = 0;
        initialXPos = initialXPos + 80 + 4;
        [view addSubview:tempImageView];
        arraycounter=arraycounter+1;
    }
    initialXPos=0;
    initialYPos = initialYPos + 86;
}
scrollView.maximumZoomScale = 4.0;
scrollView.minimumZoomScale = 0.75;
scrollView.clipsToBounds = YES;
scrollView.delegate = self;
[scrollView addSubview:view];
[scrollView addSubview:title];
[scrollView addSubview:des];

[self.view addSubview:scrollView ];
...