Iphone 旋转UIImageView可将图像移出屏幕
我在代码中实现了一个简单的旋转手势,但问题是当我旋转图像时,它总是向右离开屏幕/离开视图 正在旋转中心X的图像视图会偏离或增大(因此它会从视图的屏幕上消失) 我希望它围绕当前的中心旋转,但由于某种原因它正在改变。你知道这是什么原因吗 代码如下: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
- (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)导致其变为空白。为什么?”如何撤消转换转换?