我遇到了尝试反转变换比例的问题。这是我的代码:
- (void)updateTransforms {
CGAffineTransform holeTransform = CGAffineTransformIdentity;
holeTransform = CGAffineTransformTranslate(holeTransform, _holeOffset.x, _holeOffset.y);
holeTransform = CGAffineTransformRotate(holeTransform, _holeRotation);
//Problem code:
holeTransform = CGAffineTransformScale(holeTransform, _holeScale, _holeScale);
self.transform = holeTransform;
self.imageToUse.transform = CGAffineTransformInvert(holeTransform); }
这基本上是一种让我旋转,平移和缩放对象的方法。我想要的理想效果与每个动作相反。因此,如果向左移动,图像向右移动,向左旋转,向右旋转,向上放大,图像以相同的速率缩小。到目前为止,此代码完美地用于平移和旋转。
我认为问题在于反转规模,因为规模实际上并不消极,它只是从1.0增加或减少。如何修改我的代码以使扩展正常工作?感谢。
答案 0 :(得分:2)
这应该这样做:2.0f变为0.5f,5.0f变为0.2f等。您可能需要创建一个新的变换对象,而不是尝试进行变换反转。
holeTransform = CGAffineTransformScale(holeTransform, 1.0f/_holeScale, 1.0f/_holeScale);
答案 1 :(得分:2)
您没有提到缩放转换实际上发生的错误。但是从I helped you get the rotation and panning working开始,我会对此进行一次尝试。
正如皮西亚诺在他的回答中指出的那样,为了反转比例因子,你需要采用它的倒数,而不是它的负数。你显然认为你需要比例因子的负面影响。基于此我推测你将它初始化为0(这是它自己的负数)而不是1(这是它自己的倒数)并得到这样的错误:
Feb 9 14:17:41 Robs-iPad-2 imagehole[3138] <Error>: CGAffineTransformInvert: singular matrix.
以下是您需要做的事情才能让您的捏合手势正确地缩放洞:
您需要将_holeScale
初始化为 1 。您可以在viewDidLoad
或viewWillAppear
中执行此操作。如果你有一个重置按钮或类似的控件,你也需要在那里进行。
您需要将_holeScale
乘以手势识别器的比例,并将识别器的比例重置为 1 ,而不是 0 :
- (IBAction)pinchGesture:(UIPinchGestureRecognizer *)sender {
_holeScale *= sender.scale;
sender.scale = 1;
[self updateTransforms];
}
您可以下载my test project以查看有效的示例。