CGAffineTransform重置

2024-02-04

3我有一个可以通过触摸操作的图像。

假设它是一个向上的箭头图像。旋转 180 度后,箭头现在指向下方,我想重置 CGAffineTransform 属性所以它认为现在又回到了 0 度。

我想要这个是因为无论图像的角度是 0 还是 180,我都必须进行平移、旋转、缩放等操作。

提前致谢。

已编辑 5 条回复:

嗯,我不确定这些答案是否符合我的要求。我很抱歉没有说清楚。

  1. 触摸箭头向上的图像并向右移动 - 一切都很好。
  2. 图像随旋转手势旋转并旋转 180 度 - 一切都很好
  3. 图像现在被触摸并移动到右侧 - 由于坐标是颠倒的,现在图像上下跳跃,使我的其他动画序列变得混乱。

为了防止上述问题和其他一些问题,我想在旋转 180 度后重置所有内容。例如,一旦图像旋转 180 度,CGAffineTransform 属性就知道它旋转了 180%。我想重置当时的 poperties,以便 CGAffineTransform 认为它转动了 0 度而不是 180 度,尽管图像在视觉上是颠倒的。我希望在旋转到 180 度时,在没有任何视觉变化的情况下发生这种情况。

希望这更清楚......


如果您尝试重置变换,以使图像像原来一样显示,则只需将变换设置回恒等式即可。

self.imageView.transform = CGAffineTransformIdentity

如果您想对变换后的图像应用任意变换,最简单的方法是使用接受现有变换的 CGAffineTransform 方法。只需发送现有的转换即可。例如:

CGAffineTransform scale = CGAffineTransformMakeScale(zoom, 1);
self.imageView.transform = CGAffineTransformConcat(self.imageView.transform, scale);

如果您确实需要完全不进行任何转换的图像,则必须将其绘制回另一个图像。这也不是那么难,但我不推荐它作为您的第一个解决方案。此代码在任意视图的 UIView 类别的上下文中工作,包括 UIImageView:

- (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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CGAffineTransform重置 的相关文章

随机推荐