当前位置 : 主页 > 手机开发 > ios >

iOS CATiledLayer崩溃

来源:互联网 收集:自由互联 发布时间:2021-06-11
我有一个适用于iPad的pdf阅读器应用程序,我使用滚动视图来显示每个页面.我将页面保持在视图中,并在页面的任一侧查看一页.我有纵向和横向视图的独立视图.纵向视图显示单个页面,横向
我有一个适用于iPad的pdf阅读器应用程序,我使用滚动视图来显示每个页面.我将页面保持在视图中,并在页面的任一侧查看一页.我有纵向和横向视图的独立视图.纵向视图显示单个页面,横向查看器显示2个页面.

当iPad改变方向时,我会卸载旧方向的视图并加载新方向的视图.所以说它是在纵向视图中然后更改为横向应用程序卸载纵向视图并加载横向视图.这一切都很有效,除非pdf很大.

pdf是使用tileslayers绘制的.当方向改变为大pdf时,应用程序正在进行清理.如果在绘制完所有图块之前更改了方向,则应用程序仅会崩溃.我的猜测是它崩溃了,因为它试图将瓷砖绘制到视图而不是已卸载.那么当我卸载视图时有没有办法停止绘制图块?

您需要将CALayer的委托设置为nil,然后将其从superview中删除.
这会停止渲染,之后您可以安全地释放.

- (void)stopTiledRenderingAndRemoveFromSuperlayer; {
    ((CATiledLayer *)[self layer]).delegate = nil;    
    [self removeFromSuperview];
    [self.layer removeFromSuperlayer];
}

另外,请确保从主线程中调用此方法,否则可能会出现可怕的错误.

网友评论