由于"CALayer bounds包含NaN:[nan 0; nan 15.1]"而发生崩溃

Ser*_*nce 7 iphone cocoa-touch ios

我遇到了以下崩溃:

CALayerInvalidGeometry CALayerInvalidGeometry
CALayer bounds contains NaN: [nan 0; nan 15.1]
Run Code Online (Sandbox Code Playgroud)

在这段代码的最后一行:

CGRect bounds = self.bounds;
bounds.size = CGSizeMake(fabsf(self.width), self.height);
self.bounds = bounds;
Run Code Online (Sandbox Code Playgroud)

其中self.width来自平移手势识别器:

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

CGPoint rotatedPanGestureRecognizerTranslationPoint = CGPointApplyAffineTransform(panGestureRecognizerTranslationPoint, CGAffineTransformMakeRotation(-self.angle));
self.width += rotatedPanGestureRecognizerTranslationPoint.x;
Run Code Online (Sandbox Code Playgroud)

我收到此崩溃时的一个共性是在错误消息中,它总是[nan 0; 接下来是什么.有人知道是什么原因引起的吗?

Wai*_*ain 6

[nan 0; 南15.1]

这意味着x边界的位置和width都不是数字.这可能意味着负值,或者可能是零分类型问题.nan宽度也可能是一个非常大的宽度,不能支持(虽然这应该导致其他错误消息).

这种情况通常是应用变换的结果,或者是用于创建bounds应用边界的视图/图层的值(因为这将修改应用bounds以确定frame).

使用旋转变换时,请注意anchorPoint.

使用视图/图层变换时,请identity在更改之前将变换重置为frame.

  • 负值不是NaN.除以零是最常见的问题. (4认同)