/ / Skalierung des Bildes beim Scrollen in einer UITableView - ios, objectiv-c, uitableview, uiimageview, xcode6

Skalierung des Bilds beim Scrollen in einer UITableView - iOS, Objective-C, UitableView, UiimageView, Xcode6

Ich versuche diesen Effekt wiederherzustellen -

Es gibt eine UIImageView im Header-Bereich von aUITableView. Wenn der Benutzer einen Bildlauf nach unten durchführt, verringert sich die Größe des Bilds und es wird ein Bildlauf unter der Navigationsleiste durchgeführt. Wenn der Benutzer einen Bildlauf nach oben durchführt, wird UIImageView erweitert und kehrt an die ursprüngliche Position zurück.

Twitter für iOS hat diesen Effekt auf Ihr Profil.

Bisher weiß ich Folgendes: Der Code wird kommenunter der scrollViewDidScroll-Methode und ich muss 2 Bilder verwenden, eines groß und eines klein. Ich brauche Hilfe, um herauszufinden, wie man zwischen diesen 2 Bildern innerhalb der Methode übergeht.

Antworten:

2 für die Antwort № 1

Wenn Sie den Twitter erreichen wollenScrollen-Erweitern UIImageView Es gibt ein Tutorial von Yari D "Areglia, in dem beschrieben wird, wie dies gemacht wird. Möglicherweise finden Sie es nützlich. Der Link enthält ein Video, um den gewünschten Effekt zu demonstrieren.

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

Alternativer Quellcode

#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;
}