2012-02-09 65 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);