2012-11-10 51 views
0

我在ViewDidLoad下面的代码,它压扁我的UIImage/UIImageView。我想要图像填充UIScrollView。UIScrollView南瓜UIImageView图像

[super viewDidLoad]; 

_imageHolder = [[UIImageView alloc]initWithFrame:self.view.frame]; 
_scrollView = [[UIScrollView alloc]initWithFrame:self.view.frame]; 

[_scrollView setBackgroundColor:[UIColor purpleColor]]; 

// Tell the scroll view the size of the contents 
self.scrollView.contentSize = self.view.frame.size; 

self.scrollView.delegate = self; 
self.scrollView.scrollEnabled = YES; 

FfThumbnailData* thumbData = [self.arrayOfImages objectAtIndex:self.thisImageIndex]; 
UIImage* fullSizedImage = [[UIImage alloc]initWithContentsOfFile:thumbData.path]; 
[self.imageHolder setImage:fullSizedImage]; 
float x = fullSizedImage.size.width; 
float y = fullSizedImage.size.height; 
CGRect rect = CGRectMake(0, 0, x, y); 
NSLog(@"Size of image: %@", NSStringFromCGRect(rect)); 
// 
//[self.imageHolder setImage:[UIImage imageNamed:@"P1020486.png"]]; 

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

_imageHolder.contentMode = UIViewContentModeScaleAspectFit; 

我的的UIScrollView的backgound设置为紫色为清楚:

Squashed by UIScrollViewhttp://i1219.photobucket.com/albums/dd427/Dave_Chambers/IMG_0315.png

我要补充一点,以后我放大,然后缩小,图像被正确地放置在滚动视图并没有被压扁。

奇怪的是,注释行[self.imageHolder setImage:[UIImage imageNamed:@"P1020486.png"]];正确显示了伪图像P1020486.png。

而且,当我下载我的应用程序数据,图像看起来权利,的确是一个iPad图像的正确尺寸 - {1936年,2592} - 由我的NSLog线报NSLog(@"Size of image: %@", NSStringFromCGRect(rect));

而且大小,以前我需要一个UIScrollView(用于缩放全尺寸视图控制器中的照片)我访问相同的图像并使用以下代码通过一个视图控制器中的动画显示到另一个视图控制器,并显示正确。至关重要的是,第二部分代码缺少UIScollview。

-(void)animateTransition:(int)buttonInPositon { 
@try { 

FfThumbnailData* thumbData = [self.images objectAtIndex:buttonInPositon]; 
UIImage* fullSizedImage = [[UIImage alloc]initWithContentsOfFile:thumbData.path]; 
fullSize = [[FullSizeViewController alloc]init]; 
fullSize.imageHolderGhost.contentMode = UIViewContentModeScaleAspectFit; 
fullSize.arrayOfImages = self.images; 
fullSize.imageToPresent = fullSizedImage; 
fullSize.numberOfImages = self.images.count; 
fullSize.thisImageIndex = buttonInPositon; 
[fullSize.imageHolderGhost setImage:fullSizedImage]; 

float screenWidth = self.view.bounds.size.width; 
float screenHeight = self.view.bounds.size.height; 

NSLog(@"ButtonFrame: %@", NSStringFromCGRect(buttonFrame)); 
[fullSize.view setFrame:CGRectMake(buttonFrame.origin.x, buttonFrame.origin.y, buttonFrame.size.width, buttonFrame.size.height-44)]; 
NSLog(@"ButtonFrame: %@", NSStringFromCGRect(fullSize.view.frame)); 

[self.view addSubview:fullSize.view]; 

fullSize.view.backgroundColor = [UIColor clearColor]; 
[UIView animateWithDuration:0.9 delay:0 options:UIViewAnimationCurveEaseIn animations:^{ 

    [fullSize.view setFrame:CGRectMake(0, 0, screenWidth, screenHeight)]; 


} completion:^(BOOL finished){ 
    [[self navigationController] pushViewController:fullSize animated:NO]; 
    self.navigationController.navigationBarHidden = YES; 
}]; 
} 
@catch (NSException *exception) { 
    NSLog(@"%@", exception); 
} 
} 

为了完整起见,用的UIScrollView的代码具有以下方法在一个VC:

-(void)presentWithScrollview:(int)buttonInPositon { 

FfThumbnailData* thumbData = [self.images objectAtIndex:buttonInPositon]; 
UIImage* fullSizedImage = [[UIImage alloc]initWithContentsOfFile:thumbData.path]; 

fullSize = [[FullSizeViewController alloc]init]; 

fullSize.arrayOfImages = self.images; 
fullSize.imageToPresent = fullSizedImage; 
fullSize.numberOfImages = self.images.count; 
fullSize.thisImageIndex = buttonInPositon; 

[[self navigationController] pushViewController:fullSize animated:NO]; 
    self.navigationController.navigationBarHidden = YES; 
} 

和在目的地VC下列方法可能是相关的我的问题(ViewDidLoad在顶部粘贴这个问题):

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    // Set up the minimum & maximum zoom scales 
    CGRect scrollViewFrame = self.scrollView.frame; 
    CGFloat scaleWidth = scrollViewFrame.size.width/self.scrollView.contentSize.width; 
    CGFloat scaleHeight = scrollViewFrame.size.height/self.scrollView.contentSize.height; 
    CGFloat minScale = MIN(scaleWidth, scaleHeight); 
    // 
self.scrollView.minimumZoomScale = minScale; 
//Can set this bigger if needs be - match iPhoto 
self.scrollView.maximumZoomScale = 2.0f; 

[self centerScrollViewContents]; 
} 

- (void)centerScrollViewContents { 
CGSize boundsSize = self.scrollView.bounds.size; 
//NSLog(@"boundsSize: %@", NSStringFromCGSize(boundsSize)); 
CGRect contentsFrame = self.imageHolder.frame; 
//NSLog(@"contentsFrame: %@", NSStringFromCGRect(contentsFrame)); 

if (contentsFrame.size.width < boundsSize.width) { 
    contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width)/2.0f; 
} else { 
    contentsFrame.origin.x = 0.0f; 
} 

if (contentsFrame.size.height < boundsSize.height) { 
    contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height)/2.0f; 
} else { 
    contentsFrame.origin.y = 0.0f; 
} 

self.imageHolder.frame = contentsFrame; 
} 

#pragma mark - UIScrollViewDelegate 

- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView { 
// Return the view that we want to zoom 
return self.imageHolder; 
//return self.scrollViewBar; 
} 

- (void)scrollViewDidZoom:(UIScrollView *)scrollView { 
// The scroll view has zoomed, so we need to re-center the contents 
[self centerScrollViewContents]; 
    } 

对此的任何帮助将是伟大的。谢谢

回答

0

所以,我自己找到了解决方案。出于某种原因,正如我在对问题的更新中所写的那样,任何放大,然后缩小图像都会修正图像问题并正确显示。我将这两行viewWillAppear,上述[self centerScrollViewContents];

self.scrollView.zoomScale = 2.0; 
self.scrollView.zoomScale = 1.0; 

问题解决

相关问题