cameraViewTransform和CGAffineTransformMakeScale

时间:2010-02-09 22:32:34

标签: iphone-sdk-3.0

我想在应用程序中实现数码变焦,我使用以下行来更改缩放系数(在显示相机界面时可以多次调用):

picker.cameraViewTransform = CGAffineTransformMakeScale(zoomFactor, zoomFactor);

第一次显示相机界面时它完美运行但之后没有,相机使用的变换不是我设置的变换。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我不确定我到底知道你在做什么,但我可以告诉你,除非你以递归方式提供现有的变换,否则变换不会累积。

例如,假设您有一个将对象旋转45度的变换,并且您希望使用它来旋转对象。第一次调用它时,它会将对象旋转45度但不会随后旋转它。这是因为你只是一遍又一遍地设置相同的精确变换。 45度变换总是相同的。

要使对象旋转,您必须调用45度变换,然后必须从第一个操作中获取结果变换并将其旋转45度。然后取出结果并将其旋转45度。

您需要执行以下操作:

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

这样,您的变换就会累积,您可以上下缩放。

答案 1 :(得分:0)

这不是一个答案,而是一个线索。每次将相机带回应用程序的前端(可能使用presentModalViewController :)时,都会导致在cameraViewTransform上创建新的变换。棘手的是,这个过程似乎需要大约一秒左右才能完成,我找不到任何委托方法让我们知道新变换何时安全到位。在我的应用程序中,我最终等待大约1秒,然后修改cameraViewTransform以满足我的需要。 Hacky,但是到目前为止我找到的唯一解决方案......