UIImageView 旋转而不移动图像

Posted

技术标签:

【中文标题】UIImageView 旋转而不移动图像【英文标题】:UIImageView rotation without moving Image 【发布时间】:2014-05-12 17:47:51 【问题描述】:

嗨, 我想在不移动整个“png”的情况下旋转我的UIImageView。没有代码只是为了测试发生了什么 _fanImage.transform = CGAffineTransformMakeRotation(45);

它会转动,但整个图像会移动。我该怎么做才能避免这种情况发生?

【问题讨论】:

我不明白你的问题。你的意思是图像视图应该旋转但图像视图中设置的图像不应该? 不仅图像应该旋转而不是整个 ImageView,因为当 ImageView 旋转时,图像会移动到另一个地方 我认为这是不可能的。我不知道当您将图像直接绘制到视图上并旋转视图时会发生什么。应该看起来与图像视图相同。但是我仍然不明白您所说的“图像在另一个地方移动”是什么意思。 好的等待:旋转前:dropbox.com/s/ba3zvk0xf0aoilc/… 旋转后:dropbox.com/s/a9xfndfsegzn6vl/… 【参考方案1】:

你可以尝试这样的事情。你应该旋转UIImage而不是UIImageView

- (UIImage *)imageWithTransform:(CGAffineTransform)transform 


    CGRect rect = CGRectMake(0, 0, self.size.height, self.size.width);
    CGImageRef imageRef = self.CGImage;

    // Build a context that's the same dimensions as the new size
    CGContextRef bitmap = CGBitmapContextCreate(NULL,
                                                self.size.width,
                                                self.size.height,
                                                CGImageGetBitsPerComponent(imageRef),
                                                0,
                                                CGImageGetColorSpace(imageRef),
                                                CGImageGetBitmapInfo(imageRef));

    // Rotate and/or flip the image if required by its orientation
    CGContextConcatCTM(bitmap, transform);



    // Draw into the context; this scales the image
    CGContextDrawImage(bitmap, rect, imageRef);

    // Get the resized image from the context and a UIImage
    CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap);
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef];

    // Clean up
    CGContextRelease(bitmap);
    CGImageRelease(newImageRef);

    return newImage;

【讨论】:

谢谢我找到了一个类似的教程,现在它可以工作了,但是现在 UIImageView 不再对触摸做出反应了。 好的,但这是你第一次提到响应触摸,你还没有展示任何与处理触摸相关的代码。【参考方案2】:

我认为您的意思是您希望图像视图围绕其中心点旋转。是对的吗?如果是这样,这就是视图默认应该做的事情。

您应该在 Xcode 中搜索“平移、缩放和旋转视图”并阅读结果文章。

请注意,ios 的所有角度均以弧度而非度数指定。

您的示例图像并没有真正的帮助,因为我们看不到图像视图被绘制到的框架。几乎不可能根据您从 Dropbox 链接的图片来判断您的图像视图在做什么以及它们应该做什么。

一个完整的 360 度是 2pi。

你应该使用

CGFloat degrees = 45;
CGFloat radians = degrees/180*M_PI;
_fanImage.transform = CGAffineTransformMakeRotation(radians);

这将修复代码的旋转量,但可能不会修复旋转位置。

【讨论】:

谢谢,这也行不通。我找到了一个教程,现在它的工作原理与@iphonic 的答案非常相似:) 什么意思? “不起作用”是什么意思?在说“它不起作用”或“现在它对触摸没有反应”之类的话之前,您需要更好地解释您遇到的问题。

以上是关于UIImageView 旋转而不移动图像的主要内容,如果未能解决你的问题,请参考以下文章

将图像检索到我的 UIImageView

将 UIImageView 添加到 UIButton

操作手势后从 UIImageView 保存图像

没有 UIImageView 的 UIImage 的反射

UIImageView 背景图像和旋转帮助

将 UIImageView 和覆盖的 UIView 保存为图像(xcode/iOS)