2011-11-09 21 views
0

我有一个简单的应用程序,允许用户使用平移和捏手势识别器拖动/缩放屏幕上的图像。 Apple API的常识是,在您执行转换后,正如我在缩放方法中所做的那样,帧变为“无效”。由于我不断使用我的imageview框架来计算比例大小和平移距离,即使我进行了变换并且所有内容都可以继续正常工作,但我想知道框架变得无效了吗?执行转换后,“invalid frame”是什么意思exactley?

我问这个,因为现在我正在尝试裁剪已经移动和缩放的图像,并且我使用其帧值来确定裁剪区域,并且我得到了有趣的结果。我想知道如果无效帧可能是问题,或者如果它可能是别的东西。这里是我的代码供你参考:

CGRect croppedRect = CGRectMake(fabsf(self.oldImageView.frame.origin.x), fabsf(self.oldImageView.frame.origin.y), 316, 316); 
CGImageRef croppedImageRef = CGImageCreateWithImageInRect(self.oldImageView.image.CGImage, croppedRect); 
UIImage *croppedImage = [UIImage imageWithCGImage: croppedImageRef]; 
CGImageRelease(croppedImageRef); 
UIImageView *newImageView = [[UIImageView alloc] initWithImage: croppedImage]; 
+0

你确定它的无效并且不会失效吗?那些事情是不同的 – Dani

+0

我不确定是诚实的。 –

+0

无效意味着它需要重绘,但这并不意味着大小是错误的。我不知道在这种情况下什么是无效的手段 – Dani

回答

1

无效帧=有趣的结果。

我认为无效意味着它不保证有错误的价值,但它可能。幸运的是,你一直在使用这个框架。只要它不旋转

CGRect frame = [[view superview] convertRect:view.bounds fromView:view]; 

如果你有改变看法,以及你所需要的框架,您可以使用此代码。如果旋转了,“框架”不能被表示为CGRect,它只能表示与轴对齐的矩形。如果该信息对您的程序有任何用处,您可以使用convertPoint转换边界的每个角点。

,或者设置的框架,如果它不应该反正使用帧在这种情况下可以不旋转

view.bounds = [view convertRect:newFrame fromView:[view superview]]; 
+0

我更仔细地阅读了你的代码,我不确定这个答案能否解决你的问题。但是,您应该将其应用于使用框架的其他情况,因为该代码可能不可靠。 – morningstar

+0

谢谢你,那行代码正是我一直在寻找的。 –

0

。框架在超视图的坐标系中定义。您可以在图像坐标系中为CGImageCreateWithImageInRect指定参数,我猜想它与图像视图的坐标系相同,即使在转换时也是如此。您应该在该代码中使用边界代替框架。或者(0.0,0.0)作为原点。我无法确定你想要达到的目标。