如何在具有正确图像大小和滚动的UIScrollView内旋转UIImageView 90度? [英] How to I rotate UIImageView by 90 degrees inside a UIScrollView with correct image size and scrolling?

查看:251
本文介绍了如何在具有正确图像大小和滚动的UIScrollView内旋转UIImageView 90度?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在UISmageView中有一个UISmageView内的图像。我想要做的是将此图像旋转90度,使其默认为横向,并设置图像的初始缩放,以便整个图像适合滚动视图,然后允许它放大到100%并返回再次降至最小变焦。

I have an image inside an UIImageView which is within a UIScrollView. What I want to do is rotate this image 90 degrees so that it is in landscape by default, and set the initial zoom of the image so that the entire image fits into the scrollview and then allow it to be zoomed up to 100% and back down to minimum zoom again.

这是我到目前为止所拥有的:

This is what I have so far:

self.imageView.transform = CGAffineTransformMakeRotation(-M_PI/2);

float minimumScale = scrollView.frame.size.width  / self.imageView.frame.size.width;  
scrollView.minimumZoomScale = minimumScale;  
scrollView.zoomScale = minimumScale;  


scrollView.contentSize = CGSizeMake(self.imageView.frame.size.height,self.imageView.frame.size.width);

问题是如果我设置转换,滚动视图中不会显示任何内容。但是,如果我注释掉了变换,那么一切都有效,除了图像不是我想要的横向方向!

The problem is that if I set the transform, nothing shows up in the scrollview. However if I commented out the transform, everything works except the image is not in the landscape orientation that I want it to be!

如果我应用变换并删除代码设置minimumZoomScale和zoomScale属性,然后图像以正确的方向显示,但是使用不正确的zoomScale并且似乎也没有正确设置contentSize属性 - 因为它不会滚动到图像的边缘左/右方向,但是在顶部和底部,但是在边缘上方。

If I apply the transform and remove the code that sets the minimumZoomScale and zoomScale properties, then the image shows up in the correct orientation, however with the incorrect zoomScale and seems like the contentSize property isn't set correctly either - since the doesn't scroll to the edge of the image in the left/right direction, however does top and bottom but much over the edge.

注意:图像正在从URL加载

NB: image is being loaded from a URL

推荐答案

也许旋转图像本身符合您的需求:

Maybe rotating the image itself fits your needs:

 UIImage* rotateUIImage(const UIImage* src, float angleDegrees)  {   
    UIView* rotatedViewBox = [[UIView alloc] initWithFrame: CGRectMake(0, 0, src.size.width, src.size.height)];
    float angleRadians = angleDegrees * ((float)M_PI / 180.0f);
    CGAffineTransform t = CGAffineTransformMakeRotation(angleRadians);
    rotatedViewBox.transform = t;
    CGSize rotatedSize = rotatedViewBox.frame.size;
    [rotatedViewBox release];

    UIGraphicsBeginImageContext(rotatedSize);
    CGContextRef bitmap = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);
    CGContextRotateCTM(bitmap, angleRadians);

    CGContextScaleCTM(bitmap, 1.0, -1.0);
    CGContextDrawImage(bitmap, CGRectMake(-src.size.width / 2, -src.size.height / 2, src.size.width, src.size.height), [src CGImage]);

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}

这篇关于如何在具有正确图像大小和滚动的UIScrollView内旋转UIImageView 90度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆