执行转换后,“无效帧”是啥意思?

Posted

技术标签:

【中文标题】执行转换后,“无效帧”是啥意思?【英文标题】:What does "invalid frame" mean exactley after a transform is performed?执行转换后,“无效帧”是什么意思? 【发布时间】:2011-11-09 18:41:06 【问题描述】:

我有一个简单的应用程序,它允许用户使用平移和捏合手势识别器在屏幕上拖动/缩放图像。 Apple API 的常识是,在您执行转换后,正如我在缩放方法中所做的那样,框架变得“无效”。即使在我执行了转换并且一切都继续正常工作之后,我仍然继续使用我的 imageview 的框架来计算比例大小和平移距离,我想知道框架变得无效怎么办?

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

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];

【问题讨论】:

你确定它无效并且没有失效吗?那些东西是不同的 invalidated 表示需要重绘,不代表大小不对。我不知道在这种情况下无效是什么意思 @Dani:我相信 CoDEFRo 指的是这个:developer.apple.com/library/ios/documentation/WindowsViews/… 【参考方案1】:

无效帧 = 有趣的结果。

我认为无效意味着不能保证它具有错误的值,但它可能。你一直靠运气使用框架。

如果你有一个转换后的视图,并且你需要框架,你可以使用这个代码:

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

只要不旋转。如果它被旋转,则“框架”不能表示为 CGRect,它只能表示与轴对齐的矩形。如果该信息对您的程序有用,您可以使用convertPoint 转换边界的每个角。

如果不旋转则设置框架

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

【讨论】:

我更仔细地阅读了您的代码,但我不确定这个答案是否能解决您的问题。但是你应该把它应用到你使用框架的其他情况,因为那个代码可能不可靠。 谢谢,那行代码正是我一直在寻找的。​​span> 【参考方案2】:

在这种情况下,您无论如何都不应该使用框架。框架在超级视图的坐标系中定义。您在图像的坐标系中指定 CGImageCreateWithImageInRect 的参数,我怀疑它与图像视图的坐标系相同,即使在转换时也是如此。您应该在该代码中使用边界代替框架。或者 (0.0, 0.0) 作为原点。我不知道你想要达到什么目的。

【讨论】:

以上是关于执行转换后,“无效帧”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

STM8 ADC_CR1;ADC_CR2;这个是啥意思呢

“不兼容的类型:void 不能转换为 ...”是啥意思?

firebase转换的event_params值是啥意思?

AD和DA转换是啥意思

高斯坐标转换中的“三度带投影”“六度带投影”是啥意思?干啥用的?怎么用?

某些 Java 泛型类型转换中的类型安全警告是啥意思?