2010-09-01 4 views
1

Dans mon application, je dois capturer une image avec cam, puis la passer à l'imageView, qui est utilisée comme sous-vue pour ScrollView.Comment faire un zoom arrière sur une image en la maintenant au centre du Scrollview

L'exigence est "l'image doit faciliter 1/4e taille pour un zoom arrière et 3 fois la taille pour un zoom avant".

Maintenant, le problème est que lorsque j'effectue un zoom arrière sur cette image, l'image effectue un zoom arrière, mais elle ne tient pas sa position au centre. il met sa position respective aux touches du doigt. (Pas double tap zooming est là, et non nécessaire aussi)

est sous le code ..,

- (void)viewDidLoad 

{ [super viewDidLoad];

UIImage* tmpImage = nil; 
tmpImage = [roomImage resizedImage:imageScrollView.frame.size interpolationQuality:0]; 
imageView = [[UIImageView alloc] initWithImage:tmpImage]; 
imageView.contentMode = UIViewContentModeScaleAspectFit; 

imageScrollView.delegate = self; 
imageScrollView.canCancelContentTouches = NO; 
imageScrollView.minimumZoomScale = 0.25; 
imageScrollView.maximumZoomScale = 3.00; 


imageScrollView.clipsToBounds = YES; 

[imageView sizeToFit]; 
[imageScrollView addSubview:imageView]; 

imageScrollView.contentSize = imageView.frame.size; 
    imageScrollView.contentMode = UIViewContentModeScaleAspectFit; 
    imageScrollView.contentOffset = CGPointMake(imageScrollView.frame.size.width/2, imageScrollView.frame.size.height/2); 
imageScrollView.autoresizesSubviews = YES; 
imageScrollView.autoresizingMask = UIViewAutoresizingFlexibleHeight |  UIViewAutoresizingFlexibleWidth | 
UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | 
UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin; 


CGFloat f,x,y; 

if(tmpImage.size.height > tmpImage.size.width) 
{ 
    f = (imageScrollView.frame.size.height/tmpImage.size.height); 
} 
else 
{ 
    f = (imageScrollView.frame.size.width/tmpImage.size.width); 
} 

x = (imageScrollView.frame.size.width - tmpImage.size.width*f)/2; 
y = (imageScrollView.frame.size.height - tmpImage.size.height*f)/2; 

imageView.bounds = CGRectMake(x, y,tmpImage.size.width, tmpImage.size.height); 
[imageView setNeedsDisplay]; 
[imageScrollView setZoomScale:f animated:YES]; 
[imageScrollView setNeedsDisplay]; 

jpgPath = nil; 
[roomImage release]; 
roomImage = nil; 

}

espoir quelqu'un peut me aider ..,

Merci d'avance ..,

Répondre

0

Si je vous comprends vous pourriez correctement sous-classe la UIScrollView et ont quelque chose comme ce qui suit dans la méthode layoutSubviews pour garder son contenu centré:

-(void)layoutSubviews { 

[super layoutSubviews]; 

CGSize boundsSize = self.bounds.size; 
CGRect contentViewFrame = contentView.frame; 

if (contentViewFrame.size.width < boundsSize.width) { 

    contentViewFrame.origin.x = (boundsSize.width - contentViewFrame.size.width)/2; 

} else { 

    contentViewFrame.origin.x = 0; 

} 

if (contentViewFrame.size.height < boundsSize.height) { 

    contentViewFrame.origin.y = (boundsSize.height - contentViewFrame.size.height)/2; 

} else { 

    contentViewFrame.origin.y = 0; 

} 

contentView.frame = contentViewFrame; 

}

La variable contentView est un iVar qui représente dans votre cas l'imageView que vous voulez dans le scrollView. Espérons que cela aide :-)

Questions connexes