Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CGRectApplyAffineTransformInvert不';不要回到原来的位置_Ios_Objective C_Cgaffinetransform - Fatal编程技术网

Ios CGRectApplyAffineTransformInvert不';不要回到原来的位置

Ios CGRectApplyAffineTransformInvert不';不要回到原来的位置,ios,objective-c,cgaffinetransform,Ios,Objective C,Cgaffinetransform,这似乎是不可能的,我相信有一个简单的解决方案,但我无法解决它。我的高中数学有点生疏:) 我正在构建一个cGraffeTransform来执行CGRect的平移-旋转-平移,然后尝试使用反转返回到原始位置。但事实并非如此。我已设法将其简化为: // start building the transform... // translate so (0,0) is at centre of image CGAffineTransform affine = CGAffineTransformMake

这似乎是不可能的,我相信有一个简单的解决方案,但我无法解决它。我的高中数学有点生疏:)

我正在构建一个
cGraffeTransform
来执行
CGRect
的平移-旋转-平移,然后尝试使用反转返回到原始位置。但事实并非如此。我已设法将其简化为:

//  start building the transform...
//  translate so (0,0) is at centre of image
CGAffineTransform affine = CGAffineTransformMakeTranslation(-100, -100);

//  add a rotate
affine = CGAffineTransformConcat(affine, CGAffineTransformMakeRotation(M_PI/4));

//  get the inverse
CGAffineTransform inverseAffine = CGAffineTransformInvert(affine);

//  now test this: pick a starting CGRect
CGRect start = CGRectMake(50, 40, 10, 20);

// use my CGAffineTransform to move "start" to "midpoint"
CGRect midpoint = CGRectApplyAffineTransform(start, affine);

//  use the inverse to move "midpoint" to "finish"
CGRect finish = CGRectApplyAffineTransform(midpoint, inverseAffine);

//  what did we get
NSLog(@"start    %5.1f %5.1f %5.1f %5.1f", start.origin.x, start.origin.y, start.size.width, start.size.height);
NSLog(@"midpoint %5.1f %5.1f %5.1f %5.1f", midpoint.origin.x, midpoint.origin.y, midpoint.size.width, midpoint.size.height);
NSLog(@"finish   %5.1f %5.1f %5.1f %5.1f", finish.origin.x, finish.origin.y, finish.size.width, finish.size.height);
输出如下所示:

2011-09-29 ... start     50.0  40.0  10.0  20.0
2011-09-29 ... midpoint  -7.1 -77.8  21.2  21.2
2011-09-29 ... finish    40.0  35.0  30.0  30.0
结束矩形不应该与开始相同吗?这不是
cGraffinetTransformInvert
应该做的吗

如果我做同样的事情,但是用
CGPoint
而不是
CGRect
它似乎工作正常。

好,我发现了我的错误

不是什么奇怪的、扭曲的、不正确的东西。

复制自:
您可以通过调用函数
CGRectApplyAffineTransform
CGRect
结构进行操作。此函数返回包含传递给它的矩形的变换角点的最小矩形。如果在矩形上操作的仿射变换仅执行缩放和平移操作,则返回的矩形与由四个变换角构造的矩形一致。

您将看到我已经发现了该解决方案,但感谢您提醒我接受它!