反转变换比例

时间:2012-02-09 19:21:13

标签: iphone ios xcode ipad

我遇到了尝试反转变换比例的问题。这是我的代码:

    - (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增加或减少。如何修改我的代码以使扩展正常工作?感谢。

2 个答案:

答案 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.

以下是您需要做的事情才能让您的捏合手势正确地缩放洞:

  1. 您需要将_holeScale初始化为 1 。您可以在viewDidLoadviewWillAppear中执行此操作。如果你有一个重置按钮或类似的控件,你也需要在那里进行。

  2. 您需要将_holeScale乘以手势识别器的比例,并将识别器的比例重置为 1 ,而不是 0

    - (IBAction)pinchGesture:(UIPinchGestureRecognizer *)sender {
        _holeScale *= sender.scale;
        sender.scale = 1;
        [self updateTransforms];
    }
    
  3. 您可以下载my test project以查看有效的示例。