执行转换后,“无效帧”是啥意思?
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) 作为原点。我不知道你想要达到什么目的。
【讨论】:
以上是关于执行转换后,“无效帧”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章