2012-02-09 64 views
0

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

- (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

你没有提到你的缩放转换实际发生的错误。但自从I helped you get the rotation and panning working以来,我会对此进行刺探。正如picciano在他的回答中指出的那样,为了倒置一个比例因子,你采取了它的倒数,而不是负数。你显然认为你需要比例因子的负数。根据我猜测,你是它初始化为0(这是它自己负),而不是1(这是它自己的倒数),并得到象这样的错误:

Feb 9 14:17:41 Robs-iPad-2 imagehole[3138] <Error>: CGAffineTransformInvert: singular matrix. 

下面是你需要做什么让你捏放的比例适当,孔:

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

  2. 您需要通过手势识别的规模成倍_holeScale,以及识别的规模重置为,不:

    - (IBAction)pinchGesture:(UIPinchGestureRecognizer *)sender { 
        _holeScale *= sender.scale; 
        sender.scale = 1; 
        [self updateTransforms]; 
    } 
    

您可以下载my test project看到一个工作示例。

+0

嗨罗布,将_holeScale设置为1.0的确是罪魁祸首。在那之后,你实际上并不需要通过sender.scale乘以_holeScale吗? – user339946 2012-02-09 20:40:24

+0

试试看看。 – 2012-02-09 21:16:29

+0

我明白了,我误解了CGAffineTransformScale的工作原理。 – user339946 2012-02-09 22:17:56

2

这应该做到这一点:2.0f变为0.5f,5.0f变为0.2f等等。您可能需要创建一个新的变换对象,而不是尝试执行transform invert。

holeTransform = CGAffineTransformScale(holeTransform, 1.0f/_holeScale, 1.0f/_holeScale);