Iphone 旋转UIImageView可将图像移出屏幕

Iphone 旋转UIImageView可将图像移出屏幕,iphone,ios,objective-c,Iphone,Ios,Objective C,我在代码中实现了一个简单的旋转手势,但问题是当我旋转图像时,它总是向右离开屏幕/离开视图 正在旋转中心X的图像视图会偏离或增大(因此它会从视图的屏幕上消失) 我希望它围绕当前的中心旋转,但由于某种原因它正在改变。你知道这是什么原因吗 代码如下: - (void)viewDidLoad { [super viewDidLoad]; CALayer *l = [self.viewCase layer]; [l setMasksToBounds:YES]; [l se

我在代码中实现了一个简单的旋转手势,但问题是当我旋转图像时,它总是向右离开屏幕/离开视图

正在旋转中心X的图像视图会偏离或增大(因此它会从视图的屏幕上消失)

我希望它围绕当前的中心旋转,但由于某种原因它正在改变。你知道这是什么原因吗

代码如下:

- (void)viewDidLoad
{
    [super viewDidLoad];

    CALayer *l = [self.viewCase layer];
    [l setMasksToBounds:YES];
    [l setCornerRadius:30.0];

    self.imgUserPhoto.userInteractionEnabled = YES;
    [self.imgUserPhoto setClipsToBounds:NO];

    UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationDetected:)];
    [self.view addGestureRecognizer:rotationRecognizer];

    rotationRecognizer.delegate = self;
}

- (void)rotationDetected:(UIRotationGestureRecognizer *)rotationRecognizer
{
    CGFloat angle = rotationRecognizer.rotation;
    self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, angle);
    rotationRecognizer.rotation = 0.0;
}

您希望围绕图像的中心旋转图像,但实际情况并非如此。旋转变换围绕原点进行。因此,您必须首先应用平移变换将原点映射到图像的中心,然后应用旋转变换,如下所示:

self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, self.imageView.bounds.size.width/2, self.imageView.bounds.size.height/2);
请注意,旋转后,可能必须撤消平移变换才能正确绘制图像

希望这有帮助

编辑:

要快速回答您的问题,要撤消平移变换,首先要做的是减去添加到变换中的相同差值,例如:

// The next line will add a translate transform
self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, 10, 10);
self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, radians);
// The next line will undo the translate transform
self.imageView.transform = CGAffineTransformTranslate(self.imageView.transform, -10, -10);
然而,在创建之后,我意识到,当你使用UIKit应用旋转变换时(就像你显然是这样做的),旋转实际上是围绕中心进行的。只有在使用CoreGraphics时,旋转才会围绕原点进行。所以现在我不知道为什么你的图像会从屏幕上消失。无论如何,看看这个项目,看看是否有代码可以帮助你

如果你还有任何问题,请告诉我

“Firefox”图像是使用UIKit绘制的。蓝色矩形使用CoreGraphics绘制
您没有围绕图像中心旋转图像。您需要通过将图像平移回正确位置来手动纠正此问题

如果要围绕图像的中心旋转,则需要确保图像的中心与坐标系的原点匹配。视图的坐标系的原点位于左上角。因此,首先需要将图像平移到原点,旋转图像,然后将其移回原始中心。我以前没有在iOS中编写过这种代码,所以不知道确切的语义,但我非常确定这就是你的问题所在。你应该在iOS中搜索围绕任意点旋转的图像。关于这一点,SO和其他博客上似乎有很多内容。这可能会有所帮助:“旋转图像上下文(CGContextRotateCTM)导致其变为空白。为什么?”如何撤消转换转换?