【问题标题】:Find new coordinates after using CGAffineTransformMakeRotation on an object在对象上使用 CGAffineTransformMakeRotation 后查找新坐标
【发布时间】:2011-12-27 09:03:21
【问题描述】:

这是一个简单的问题,这让我很烦恼......

所以,我有一个 UIImageView 的对象,我使用

-(void)rotate {

// ...

CGAffineTransform transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(180));
self.image.transform = transform; // image is a property.

}

所以,当我调用此方法一次时,它会旋转对象!。当我再次调用该方法时,我希望对象再次旋转 - 但它不会再旋转 180 度。弄乱坐标并移动图像后,我可以理解对象的-perspective也被旋转了180度,所有坐标也被反转了。

我希望恢复对象的视角(尽管它已经旋转了某个角度),这样我就可以像以前一样继续旋转和移动它!

有什么想法吗?

【问题讨论】:

  • 你试过 self.image.transform += transform; ?
  • @Eugene,尝试过 += 两个 CGAffineTransforms 吗?
  • 是的,没错。抱歉,我记得我在 CGAffineTransformMakeRotation 函数中添加了值。忽略我之前的评论。

标签: iphone objective-c cocoa-touch core-animation cgaffinetransform


【解决方案1】:

无论如何,这段代码有效:

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;

  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;
}

【讨论】:

  • 说实话,我不是 100% 确定,我只是在互联网上找到了这段代码,在我的应用程序中对其进行了测试,旋转按预期进行,所以我决定分享什么我找到了。如果您需要复杂的解释,您可以忽略代码,因为我几乎无法提供它们。 :\
【解决方案2】:

解决了CABasicAnimation的问题!

【讨论】:

  • 你可以使用CGAffineTransformRotate,它有两个参数:self.image.transform = CGAffineTransformRotate(self.image.transform, DEGREES_TO_RADIANS(180));
猜你喜欢
  • 2018-06-11
  • 2015-08-25
  • 2019-05-08
  • 2018-08-17
  • 2016-06-16
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
相关资源
最近更新 更多