首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CGAffineTransform重置

CGAffineTransform重置
EN

Stack Overflow用户
提问于 2011-05-13 18:00:23
回答 5查看 42.2K关注 0票数 45

我有一个被触摸操纵的图像。

让我们说,这是一个箭头的图像指向。在它被旋转180度之后,箭头现在向下,我想重置CGAffineTransform属性,这样它就会认为它已经转回0度了。

我想要这个,因为无论图像的角度是0还是180,我都需要平移,旋转,缩放等等。

提前谢谢。

编辑的Ater 5答复:

嗯,我不确定这些答案中是否有我想做的事。我很抱歉没说清楚。

  1. --一个箭头指向上方的图像被触摸并移动到右边--一切都很好。
  2. 图像与旋转姿态一起旋转并旋转180度--一切都很好--
  3. 图像现在被触摸并移动到右边--因为坐标是颠倒的,现在图像上下跳跃,使我的其他动画序列变得异常。--

为了防止上述问题和其他问题,我想在它被旋转180之后重新设置所有的东西。例如,一旦图像转到180度,CGAffineTransform属性就知道它已经转到180%了。我想在那个时候重置操作,所以CGAffineTransform认为它变成了0度,而不是180度,尽管图像在视觉上颠倒了。我希望在没有任何视觉变化的情况下发生这种情况,当它旋转到180度时。

希望这更清楚..。

EN

回答 5

Stack Overflow用户

发布于 2011-05-13 18:03:04

如果您试图重置转换,使图像显示为原来的样子,您可以简单地将转换设置为标识。

代码语言:javascript
复制
self.imageView.transform = CGAffineTransformIdentity

如果要将任意转换应用于转换后的映像,最简单的方法是使用接受现有转换的CGAffineTransform方法。只需发送现有的转换。例如:

代码语言:javascript
复制
CGAffineTransform scale = CGAffineTransformMakeScale(zoom, 1);
self.imageView.transform = CGAffineTransformConcat(self.imageView.transform, scale);

如果您真的需要图像,因为它的出现,没有任何转换,您将不得不把它拉回另一个图像。这也没那么难,但我不推荐它作为你的第一个解决方案。此代码适用于任意视图的UIView类别上下文,包括UIImageView:

代码语言:javascript
复制
- (UIImage *) capture {
    CGRect screenRect = self.frame;
    CGFloat scale = [[UIScreen mainScreen] scale];
    UIGraphicsBeginImageContextWithOptions(screenRect.size, YES, scale);

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [[UIColor blackColor] set];
    CGContextFillRect(ctx, screenRect);

    [self.layer renderInContext: ctx];

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return newImage;
}
票数 79
EN

Stack Overflow用户

发布于 2017-10-15 15:22:50

Swift 3Swift 4Swift 5

您可以使用以下内容重置CGAffineTransform:

代码语言:javascript
复制
self.imageView.transform = CGAffineTransform.identity

较短的版本就是.identity,如下所示:

代码语言:javascript
复制
self.imageView.transform = .identity
票数 55
EN

Stack Overflow用户

发布于 2011-05-13 18:39:40

昨天做了一些类似但简单的事情。

查找任何现有的转换值。然后,将其作为新转换的抵消项。

见例子:

代码语言:javascript
复制
// Rotate right/clockwise

CGFloat radians = atan2f(imageView.transform.b, imageView.transform.a);
CGFloat degrees = radians * (180 / M_PI);
// Yeah yeah, I like degrees.
CGAffineTransform transform = CGAffineTransformMakeRotation((90 + degrees) * M_PI/180);
imageView.transform = transform;

代码语言:javascript
复制
// Rotate left/anticlockwise

CGFloat radians = atan2f(imageView.transform.b, imageView.transform.a);
CGFloat degrees = radians * (180 / M_PI);
// Yeah yeah, I like degrees.
CGAffineTransform transform = CGAffineTransformMakeRotation((-90 + degrees) * M_PI/180);
imageView.transform = transform;

这只是一个提示,如果您想要将现有的转换值相加到新的转换以形成正确的移动,那么这只是一个提示。用同样的方法来进行比例尺等。

一些人建议使用CABasicAnimation,并将其加性设置为YES。但不能让它起作用。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5995923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档