ios 由于“CALayer边界包含NaN:[nan 0; nan 15.1]”

3gtaxfhh  于 2023-03-31  发布在  iOS
关注(0)|答案(6)|浏览(190)

我收到以下崩溃消息:

CALayerInvalidGeometry CALayerInvalidGeometry
CALayer bounds contains NaN: [nan 0; nan 15.1]

在这段代码的最后一行:

CGRect bounds = self.bounds;
bounds.size = CGSizeMake(fabsf(self.width), self.height);
self.bounds = bounds;

其中self.width从平移手势识别器导出:

CGPoint panGestureRecognizerTranslationPoint = [panGestureRecognizer translationInView:panGestureRecognizer.view.superview.superview];

CGPoint rotatedPanGestureRecognizerTranslationPoint = CGPointApplyAffineTransform(panGestureRecognizerTranslationPoint, CGAffineTransformMakeRotation(-self.angle));
self.width += rotatedPanGestureRecognizerTranslationPoint.x;

一个共同点是当我得到这个崩溃是在错误消息,它总是[nan 0;有人知道是什么引起的吗

w8f9ii69

w8f9ii691#

[nan 0; nan 15.1]
这意味着边界的x位置和width都不是数字。这可能意味着负值,或者它可能是一个除以零类型的问题。宽度的nan也可能是一个无法支持的非常大的宽度(尽管这会导致其他错误消息)。
这类事情通常是应用转换的结果,要么是用于创建bounds的值,要么是应用边界的视图/层(因为这将修改应用的bounds以确定frame)。
使用旋转变换时,请小心使用anchorPoint
使用视图/图层变换时,请在更改frame之前将变换重置为identity

iibxawm4

iibxawm42#

您可以在Xcode运行模式中设置CG_NUMERICS_SHOW_BACKTRACE环境变量,它将转储导致非数字值出现的堆栈跟踪。
从那里,只是调查为什么它会发生,并防止它。

wkyowqbh

wkyowqbh3#

在我的情况下,我忘了添加图像在我的项目和运行时,我试图使用这些图像的名称,这就是为什么我得到这个错误。
现在它的解决后,将图像在项目。
希望这些提示对其他人有帮助。

des4xlb0

des4xlb04#

伙计们!我的情况不是这样的,但很接近。当我试图制作UIimageView时,我在frame rect中得到了Nan值。经过一些搜索,我发现我正在从无到有初始化frame-我将frame绑定到UIimage大小,但没有检查image是否为nil。这就是为什么Nan值出现在我的情况中。在创建frame之前检查是否正确传递了所有值。

vohkndzv

vohkndzv5#

我知道你已经发现了问题,但对于那些谁也面临着同样的问题:
我也遇到了同样的问题。我的代码是:

CGRect rect;
rect.size.width = _mImage.size.width;
rect.size.height = _mImage.size.height;

[_imageView setFrame:rect];

当我第一次和第二次打开视图时,一切都正常。但是在第三次尝试类似[_imageView setFrame:rect]时,我有CALayer bounds contains NaN,所以我手动添加了xy为我的rect

rect.origin.x = 0;
rect.origin.y = 0;

所以现在一切正常。

hujrc8aj

hujrc8aj6#

下面的代码帮助了我。

super.init(frame: CGRect(x: 0, y: 0, width: 10, height: 10))

请确保您的CGRect和其他传递的UIView大小的子项工作正常,并且具有正确的值。不要忘记打开异常调试模式。

相关问题