【问题标题】: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];

【问题讨论】:

标签: iphone objective-c ios cocoa-touch core-graphics


【解决方案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) 作为原点。我不知道你想要达到什么目的。

【讨论】:

    猜你喜欢
    • 2016-03-16
    • 2018-01-16
    • 1970-01-01
    • 2014-11-06
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    相关资源
    最近更新 更多