2010-02-09 23 views
1

我特林實現在應用程序中的數碼變焦和我使用下面的行來更改變焦倍數(它可以同時顯示在相機接口來調用許多時間):cameraViewTransform和CGAffineTransformMakeScale

picker.cameraViewTransform = CGAffineTransformMakeScale(zoomFactor, zoomFactor); 

它在第一次顯示相機界面時很好地工作,但在此之後,相機使用的變換不是我設置的變換。任何想法?

+0

您應該發佈一些截圖,以便我們可以確切地看到問題所在。 – TechZen 2010-02-11 16:24:26

回答

1

不知道我確切地理解你在做什麼,但我可以告訴你,除非你以遞歸方式提供現有的變換,否則變換不會累積。

例如,假設您有一個將物體旋轉45度並且想用它來旋轉物體的變換。第一次調用它時,它會將對象旋轉45度,但不會隨後再旋轉它。這是因爲你只是反覆設置相同的轉換。 45度轉換總是相同的。

要使對象旋轉,您必須調用45度變換,然後您必須從第一個操作中獲得結果變換並將其旋轉45度。然後拿出結果並旋轉45度。

你需要做的是這樣的:

picker.cameraViewTransform =CGAffineTransformScale(picker.cameraViewTransform, zoomfactor); 

這樣,你的變換就會積累,你可以放大上下。

+0

我不希望我的比例變換是累積的,這就是爲什麼我使用CGAffineTransformMakeScale。我分配/初始化/顯示攝像頭選擇器,設置變換動態更改縮放,然後關閉/釋放選取器。它工作完美。第二次我分配/初始化/顯示相機選擇器,似乎我的變換適用於現有的變換!我不明白爲什麼因爲我使用CGAffineTransformMakeScale。謝謝! – Yoshi 2010-02-10 15:38:25

+0

第二次啓動選取器時,它是否會顯示您第一次設置的變換(即使您不再嘗試設置它)?如果這樣會暗示選取器是單數並且實際上未被重新初始化。你應該張貼一些截圖,以便我們可以確切地看到問題所在。 – TechZen 2010-02-11 16:23:59

0

這不是一個線索的答案。每次將相機帶回應用程序的前端(大概使用presentModalViewController :),這會導致在cameraViewTransform上創建新的變換。棘手的是,這個過程似乎需要大約一秒左右的時間才能完成,我不能找到委託方法讓我們準確知道新變換何時安全到位。在我的應用程序中,我最終等待大約1秒鐘,然後修改cameraViewTransform以適合我的需要。 Hacky,但是迄今爲止我找到的唯一解決方案...

相關問題