我有一个适用于 iPad 的 pdf 阅读器应用程序,我使用滚动视图来显示每个页面。我将页面保持在视图中,并在页面的任一侧查看一页。我有纵向和横向视图的单独视图。纵向视图显示单个页面,横向查看器显示 2 个页面。
当 iPad 改变方向时,我卸载旧方向的视图并加载新方向的视图。因此,假设它处于纵向视图,然后更改为横向,应用程序会卸载纵向视图并加载横向视图。这一切都很好,除非 pdf 很大。
pdf 是使用 tiledlayers 绘制的。当使用大 pdf 更改方向时,应用程序会崩溃。如果在所有图块绘制之前更改方向,应用程序只会崩溃。我的猜测是它正在崩溃,因为它试图将瓷砖绘制到一个视图而不是已卸载的视图。那么有没有办法在我卸载视图时停止绘制瓷砖?
您需要将 CALayer 的委托设置为 nil,然后将其从超级视图中删除。这将停止渲染,之后您可以安全地解除分配。
- (void)stopTiledRenderingAndRemoveFromSuperlayer; {
((CATiledLayer *)[self layer]).delegate = nil;
[self removeFromSuperview];
[self.layer removeFromSuperlayer];
}
Run Code Online (Sandbox Code Playgroud)
另外,请确保从主线程调用它,否则可怕的错误将等待您。
| 归档时间: |
|
| 查看次数: |
1816 次 |
| 最近记录: |