/ / Ridimensionamento dell'immagine durante lo scorrimento in un UITableView: ios, goal-c, uitableview, uiimageview, xcode6

Ridimensionamento dell'immagine sullo scorrimento in UITableView - iOS, Object-C, Uitableview, Uiimageview, xcode6

Sto cercando di ricreare questo effetto -

C'è un UIImageView nella sezione di intestazione di un fileUITableView. Quando l'utente scorre verso il basso, la dimensione dell'immagine si riduce e scorre sotto la barra di navigazione e quando scorre indietro, UIImageView si espande e torna alla sua posizione originale.

Twitter per iOS ha questo effetto sul tuo profilo.

Finora questo è quello che so: il codice arriveràcon il metodo scrollViewDidScroll e dovrò usare 2 immagini, una grande e una piccola. Ho bisogno di aiuto per capire come passare da queste 2 immagini all'interno del metodo.

risposte:

2 per risposta № 1

Se vuoi raggiungere Twitterscrolling-expanding UIImageView c'è un tutorial di Yari D "areglia che delinea come fare questo. Potresti trovarlo utile. Il link include un video per dimostrare l'effetto desiderato.

http://www.thinkandbuild.it/implementing-the-twitter-ios-app-ui/

Codice sorgente alternativo

#define IMAGE_VIEW_TAG 100
#define IMAGE_SCROLL_VIEW_TAG 101

#pragma mark - ScrollView Delegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if(scrollView.tag == IMAGE_SCROLL_VIEW_TAG) return;

UITableView * tv = (UITableView*) scrollView;
UITableViewCell * cell = [tv cellForRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]];
UIScrollView * svImage = (UIScrollView*)[cell viewWithTag:IMAGE_SCROLL_VIEW_TAG];
CGRect frame = svImage.frame;
frame.size.height =  MAX((_imageHeaderHeight-tv.contentOffset.y),0);
frame.origin.y = tv.contentOffset.y;
svImage.frame = frame;
svImage.zoomScale = 1 + (abs(MIN(tv.contentOffset.y,0))/320.0f);
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return [scrollView viewWithTag:IMAGE_VIEW_TAG];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell * cell;

NSLog(@"Row %@", indexPath);
if(indexPath.row == 0){
static NSString * headerId = @"headerCell";
cell = [tableView dequeueReusableCellWithIdentifier:headerId];
if(!cell) {

// create cell as it doesn"t exist
cell = [[UITableViewCell alloc]initWithFrame:CGRectMake(0.0, 0.0, self.view.frame.size.width, _imageHeaderHeight)];
cell.backgroundColor = [UIColor clearColor];
cell.selectionStyle = UITableViewCellSelectionStyleNone;

// image view
UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0.0f, 0.0f, cell.contentView.frame.size.width, _imageHeaderHeight)];
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.tag = IMAGE_VIEW_TAG;
imageView.clipsToBounds = YES;
imageView.autoresizingMask = UIViewAutoresizingFlexibleHeight;

UIScrollView * svImage = [[UIScrollView alloc]initWithFrame:imageView.frame];
svImage.delegate = self;
svImage.userInteractionEnabled = NO;

[svImage addSubview:imageView];

// image
svImage.tag = IMAGE_SCROLL_VIEW_TAG;
svImage.backgroundColor = [UIColor blackColor];
svImage.zoomScale = 1.0f;
svImage.minimumZoomScale = 1.0f;
svImage.maximumZoomScale = 2.0f;
[cell.contentView addSubview:svImage];
UIImageView * headerInfo = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]];

[cell.contentView addSubview:headerInfo];

CGRect headerFrame = headerInfo.frame;
headerFrame.size.height = 149.0f;
headerFrame.origin.y = _imageHeaderHeight - 149.0f;
headerInfo.frame = headerFrame;
}
// cell exists - grab a reference to the image it displays
UIImageView *imageView = (UIImageView*)[cell viewWithTag:IMAGE_VIEW_TAG];

// maybe change the imageView
return cell;
}