我收到以下崩溃消息:
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;有人知道是什么引起的吗
6条答案
按热度按时间w8f9ii691#
[nan 0; nan 15.1]
这意味着边界的
x
位置和width
都不是数字。这可能意味着负值,或者它可能是一个除以零类型的问题。宽度的nan
也可能是一个无法支持的非常大的宽度(尽管这会导致其他错误消息)。这类事情通常是应用转换的结果,要么是用于创建
bounds
的值,要么是应用边界的视图/层(因为这将修改应用的bounds
以确定frame
)。使用旋转变换时,请小心使用
anchorPoint
。使用视图/图层变换时,请在更改
frame
之前将变换重置为identity
。iibxawm42#
您可以在Xcode运行模式中设置
CG_NUMERICS_SHOW_BACKTRACE
环境变量,它将转储导致非数字值出现的堆栈跟踪。从那里,只是调查为什么它会发生,并防止它。
wkyowqbh3#
在我的情况下,我忘了添加图像在我的项目和运行时,我试图使用这些图像的名称,这就是为什么我得到这个错误。
现在它的解决后,将图像在项目。
希望这些提示对其他人有帮助。
des4xlb04#
伙计们!我的情况不是这样的,但很接近。当我试图制作UIimageView时,我在frame rect中得到了Nan值。经过一些搜索,我发现我正在从无到有初始化frame-我将frame绑定到UIimage大小,但没有检查image是否为nil。这就是为什么Nan值出现在我的情况中。在创建frame之前检查是否正确传递了所有值。
vohkndzv5#
我知道你已经发现了问题,但对于那些谁也面临着同样的问题:
我也遇到了同样的问题。我的代码是:
当我第一次和第二次打开视图时,一切都正常。但是在第三次尝试类似
[_imageView setFrame:rect]
时,我有CALayer bounds contains NaN
,所以我手动添加了x
和y
为我的rect
:所以现在一切正常。
hujrc8aj6#
下面的代码帮助了我。
请确保您的CGRect和其他传递的UIView大小的子项工作正常,并且具有正确的值。不要忘记打开异常调试模式。