- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当父级 UIScrollView 放大时,我在 CATiledLayer 上遇到重绘问题。
我正在 CATiledLayer 支持的 UIView 中呈现 PDF 页面。它后面有另一个 UIImageView,其中包含 CATiledLayer 将绘制的页面的低分辨率图像。当我放大时,它按预期工作。 CATiledLayer 将根据缩放级别渲染更高分辨率的图像。
缩放后出现问题。如果我放大然后不理会 iPad,显示的图像会模糊然后重新锐化。看起来 CATiledLayer 正在被删除,因为我在后 View 中看到模糊的低分辨率图像,然后 CATiledLayer 被重新绘制,即我看到平铺效果和图像的重新锐化。如果我不理会应用程序并等待大约 30 到 40 秒,就会发生这种情况。我只在第三代 iPad(新 iPad、iPad3 等)上观察到它。我也在 iPad2s 上测试,我还没有遇到这个问题。
有没有人遇到过这个问题?任何已知原因和可能的解决方案?
编辑:
我的 UIScrollViewDelegate 方法如下:
// currentPage, previousPage, and nextPage are the pdf page views
// that are having the refresh problem
- (void)positionBufferedPages {
// performs math {code omitted}
// then sets the center of the views
[previousPage.view setCenter:...];
[nextPage.view setCenter:...];
}
- (void)hideBufferedPages {
if ([previousPage.view isDescendantOfView:scrollView]) {
[previousPage.view removeFromSuperview];
}
if ([nextPage.view isDescendantOfView:scrollView]) {
[nextPage.view removeFromSuperview];
}
}
- (void)showBufferedPages {
if (![previousPage.view isDescendantOfView:scrollView]) {
[scrollView addSubview:previousPage.view];
}
if (![nextPage.view isDescendantOfView:scrollView]) {
[scrollView addSubview:nextPage.view];
}
if (![currentPage.view isDescendantOfView:scrollView]) {
[scrollView addSubview:currentPage.view];
}
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return currentPage.view;
}
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view {
[self hideBufferedPages];
}
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollViewParam withView:(UIView *)view atScale:(float)scale {
[self positionBufferedPages];
[self showBufferedPages];
}
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
// nothing relating to the pdf page view
// but does set the center of some other subviews on top of the pdf page views
}
虽然不确定这会有多大帮助,因为在问题发生时 ScrollView 没有接收到输入。如上所述,pdf 页面加载到 CATiledLayer,然后我不理会 iPad(设备未接收到任何输入),CATiledLayer 将自行重绘。
我还 try catch 对 setNeedsDisplay
、setNeedsDisplayInRect:
、setNeedsLayout
和 setNeedsDisplayOnBoundsChange:
的调用 View 和平铺层,但是重绘是在没有调用任何这些函数的情况下发生的。 drawLayer:inContext:
当然会被调用,但是跟踪只显示了一些在后台线程中启动的 Quartz 调用(正如预期的那样,因为平铺层在后台准备内容),所以它是也没有帮助。
提前致谢!
最佳答案
您的应用的内存使用情况如何?如果发生内存警告,CATiledLayer 将丢弃其缓存并重新绘制。我已经看到即使没有向应用程序发送内存警告(只是比平常的内存负载更高)它也会这样做。使用 Instruments 查看内存使用情况。您可能需要使用 OpenGL ES 驱动程序工具来查看图形内存的情况。
关于objective-c - 在第 3 代 iPad 中放大时删除和刷新 CATiledLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10432675/
我试图了解 CATiledLayer在使用 CGContextDrawPDFPage() 渲染 PDF 页面时有效. 我的理解是 drawLayer:inContext:每个图 block 和细节级别
有没有人有任何技巧可以提高 CATiledLayer 在视网膜显示器上的性能? 这篇文章: CATiledLayer in iPad retina simulator yields poor perf
我是 iOS 开发的新手,我正在尝试了解 CATiledLayer 的工作原理。不是如何使用它! CATiledLayer 有两个关键特性,我想知道它是如何工作的。 可见范围自动报告。 CATiled
请看这个简单的 CATiledLayer 示例 https://github.com/seanhess/CATiledLayer-Example 它由一个具有如下层次结构的 viewControlle
如您所知,CATiledLayer 用于通过以适合 View 大小的比例显示平铺图像来显示大图像。 我有 CATiledLayer 的工作方式类似于可以在 iOS 文档中找到的示例,我计算 drawR
我有一个适用于 iPad 的 pdf 阅读器应用程序,我在其中使用 ScrollView 来显示每个页面。我将页面保持在 View 中,并在页面的任一侧保持页面在 View 中。我有单独的纵向和横向
由于种种原因,我正在考虑自己实现CATiledLayer。我做了一些调查,但我似乎无法弄清楚 CATiledLayer 如何知道要提供哪个图 block 。例如,当您滚动图层时,setPosition
我有这个巨人UIView与约 600 UIButtons作为 subview 。 UIView大约是 2000 x 2000 像素,它是 UIScrollView 的 subview .我正在尝试实现
我正在按照 this answer 中概述的说明进行操作用 Core Graphics 中的图案填充图层。当图层是 CALayer 子类时,绘图工作正常。但是,当图层是 CATiledLayer 子类
我需要在 UIImageView 中加载更高分辨率的图像。经过各种方法之后,如果我们加载更高分辨率的图像,内存使用量就会变得巨大 [ width * height * 4 ]因此,为了克服这个问题,需
我正在尝试屏幕捕获使用 CATiledLayers(用于动画)的 View ,但无法获取我想要的图像。 我在 Apple 的“PhotoScroller”示例应用程序上进行了尝试,并添加了以下内容:
我有一个 CATiledLayer,我通过以下方法在其中渲染内容 - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 我使用
全部, 我无法从 CATiledLayer 获取我想要的行为。有没有一种方法可以触发图 block 重绘,而不会产生先将其区域清除为白色的副作用?我已经将 CATiledLayer 子类化以将 fad
关闭。这个问题需要debugging details .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 4年前关闭。 Improve this question 好吧
我将如何捕获 CATiledLayer 上的触摸事件? 我遇到以下情况,如果我将 View 层更改为 CATiledLayer, View 将停止捕获 TouchesXXX 事件。为什么会发生这种情况
我正在尝试在一个图层上添加两个子图层。一个图层应充当(快速渲染)背景,而另一图层(CATiledLayer)应显示其他内容。但是,CATiledLayer 不会出现在前面。普通的CALayer总是隐藏
每次您处于更深的缩放级别时,是否有一种方法可以重置您的缩放级别,以便您可以无限缩放? 我正在尝试创建一个 CATiledLayer,其中每个图 block 都有不同的颜色,当您放大一个图 block
我正在我的应用程序中创建一种“ map ”。这基本上只是使用 imageView/scrollView 查看图像。然而,图像是巨大的。像 20,000x15,000 像素之类的。如何平铺此图像以使其适
我的一个老问题与在 monotouch 中查看 pdf 文件有关(我设法完成了这个)。 Port of the iOS pdf viewer for xamarin 我的问题如下:如果我开始关闭和打开
其他人也遇到过这个问题,但我没有看到任何解决方案 - 请参阅 ( http://openradar.appspot.com/6941930)。 我有一个 UIScrollView,它的内容 View
我是一名优秀的程序员,十分优秀!