Cómo escalar UIImageView proporcionalmente
@interface HYShowImageView: UIScrollView
//Muestra la imagen en formato grande
.-(void) showImage:(UIImage*)image inView: (UIView *)parentsView fromRect:(CGRect)rect;
@end
-(void)showImage: (UIImage *)imagen inView :(UIView *)parentsView fromRect:(CGRect)rect
{
_oldRect = rect;
[self setFrame:CGRectMake( 0, 0, PHOTOWIDTH, PHOTOHEIGHT) ];
self.showsHorizontalScrollIndicator = NO;
self.showsVerticalScrollIndicator = NO;
UIImageView *showView = [[ UIImageView alloc] initWithFrame:_oldRect];
showView.contentMode = UIViewContentModeScaleAspectFit;
[UIView animateWithDuration:0.5f animaciones:^{
[showView setFrame:CGRectMake( 0, 0, ANCHO FOTO, ALTURA FOTO)];
}];
[self setBackgroundColor:color_with_rgba(0, 0, 0, 1)];
[parentsView addSubview: self];
[showView setTag:'show'];
[showView setImage:image]; //Este lugar también puede usar imágenes de la web p>
[self addSubview:showView];
// Agregar dos gestos
showView.userInteractionEnabled = YES;
UITapGestureRecognizer* singleTap = [[ UITapGestureRecognizer alloc ] initWithTarget:self action:@selector(handleSingleViewTap:)];
[ self addGestureRecognizer:singleTap];
UIPinchGestureRecognizer* pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget.self action :@ selector(handlePinchView:)];
[self addGestureRecognizer: pinchGest
ure];
}
Se agregaron dos gestos, un clic para cancelar y un clic para hacer zoom
//Eliminar la vista de imagen
-(void)handleSingleViewTap:(UITapGestureRecognizer *)sender
{
[self setZoomScale:1.0 animado:NO];
[ UIView animateWithDuration:0.5 f animaciones:^{
UIImageView *showView = (UIImageView *)[self viewWithTag:'show'];
showView.frame = _oldRect;
self .backgroundColor = color_with_rgba(0, 0, 0, 0.0);
} Completado: ^(BOOL terminado){
[self removeFromSuperview];
} ];
}
// Escalar imagen
-(void)handlePinchView: (UIPinchGestureRecognizer *)sender
{
UIImageView *imageView = (UIImageView *)[self viewWithTag:'show'];
if ([estado del remitente] == UIGestureRecognizerStateBegan) {
_ imageHWScale = imageView .image.size.height/imageView.image.size.width;
_beganScale = self.zoomScale;
}
[self setZoomScale:_beganScale * remitente .scale];
if ([estado del remitente] == UIGestureRecognizerStateEnded) {
[self scrollViewEnd];
}
}
- (void)scrollViewEnd
{
if (self.zoomScale < 1.0) {
[self setZoomScale:1.0 animado: SÍ];
self.contentOffset = CGPointMake(0, 0);
} else if (self.zoomScale > 3.0) {
[self setZoomScale: 3.0 animado:SÍ];
}
}
}