问题标签 [catiledlayer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
html - Sencha Touch/ExtJS:平铺滚动视图(如 CATiledLayer)
我正在寻找类似CATiledLayer
(在 iOS 上)的东西,但用于 PhoneGap/Sencha Touch 2。
这个想法是以瓦片的形式从服务器“流式传输”一个非常大的图像 - 就像谷歌地图一样。
它应该支持移动设备上的触摸手势,以便用户可以捏缩放和滚动。
不幸的是,我找不到任何东西 - 所以非常感谢一些指针。
更新:
与此同时,我查看了OpenLayers,这似乎是我想要的并管理多层缩放等。不幸的是,它与 Geospartial 数据挂钩太多,无法禁用投影以使其像基本图像查看器一样工作。
我还发现了GSV(Big Ass Image Viewer)——不幸的是,我不支持触摸手势,而且通常似乎被放弃了。
对我来说,没有人真正需要这样的东西很奇怪,我尽量避免“重新发明轮子”。但现在看起来没有任何非地理数据/地图相关的解决方案。
ios - 由于内存使用异常,启用了 CATiledLayer 且具有 drawRect 定义的子视图的 UIView 崩溃
我们在 iPad 3 上发生内存不足崩溃,我们追踪到以下情况:
使用 CATiledLayer 并绘制内容(例如 PDF)的 UIView 具有带有自己的 drawRect 方法的子视图(例如,突出显示搜索结果)。这使得 Core Animation 消耗大量内存(在 VM Tracker 工具中超过 100 MB),并且很容易导致崩溃。虽然所有设备都存在此问题,但只有在 iPad 的 Retina 显示屏上,缓存大小才会变得过大。
这可以通过 Apple 的PhotoScroller示例重现:子类 UIView,取消注释 drawRect,并将实例添加到 TilingView。该应用程序将在 iPad 3 上崩溃。评论 drawRect 解决了内存使用问题。
现在,我们可以放下子视图并在最顶层的 UIView 中进行绘图。但是,使用子视图很方便(因为我们在 PDF 之上表示不同的、独立的层)。两个问题:
- 什么是好的解决方法?最好是允许我们继续使用多个视图的。
- 为什么会发生这种情况?我猜缓存机制正在加班,但如果了解它背后的技术细节会很棒。
谢谢!
编辑:
我想详细说明凯的回答。该问题确实与 CATiledLayer 无关,而是与实现 drawRect 的 UIViews 的使用有关。
在 PhotoScroller 的情况下,我创建了一个 UIView,它的图像大小 - 2000x2000 或更大,如果 drawRect 存在,它会创建一个巨大的后备存储。
在我们的应用程序中,覆盖视图是全屏的(在 iPad 3 上 =~11 MB),每页大约有 5 个。滚动时我们在内存中最多保留三页,这意味着超过 150 MB 的额外内存。不好玩。
所以解决的办法就是优化drawRect掉,或者少用这样的view。回到绘图板它是:-)
objective-c - CATiledLayer 在 iPad 第 3 代放大时被移除和刷新
当父 UIScrollView 放大时,我在 CATiledLayer 上遇到重绘问题。
我在 CATiledLayer 支持的 UIView 中呈现 PDF 页面。它后面有另一个 UIImageView,其中包含 CATiledLayer 将绘制的页面的低分辨率图像。当我放大时,它按预期工作。CATiledLayer 将根据缩放级别渲染更高分辨率的图像。
缩放后出现问题。如果我放大然后只留下 iPad,显示的图像会模糊然后重新锐化。看起来 CATiledLayer 正在被移除,因为我在背景视图中看到模糊的低分辨率图像,然后 CATiledLayer 被重新绘制,即我看到了平铺效果和图像的重新锐化。如果我不理会应用程序并等待大约 30 到 40 秒,就会发生这种情况。我只在第三代 iPad(新 iPad、iPad3 等)上观察到它。我也在 iPad2s 上进行测试,但我还没有遇到这个问题。
有没有其他人遇到过这个问题?任何已知的原因和可能的解决方案?
编辑:
我的 UIScrollViewDelegate 方法如下:
不确定这会有多大帮助,因为当问题发生时,滚动视图没有接收到输入。如上所述,pdf页面加载到CATiledLayer,然后我不理会iPad(设备没有接收到输入),CATiledLayer会自行重绘。
我还尝试在视图和平铺层上捕获对setNeedsDisplay
、setNeedsDisplayInRect:
、setNeedsLayout
和的调用setNeedsDisplayOnBoundsChange:
,但是重绘发生时没有调用任何这些函数。drawLayer:inContext:
当然会被调用,但是跟踪仅显示在后台线程中启动了一些 Quartz 调用(正如预期的那样,因为平铺层在后台准备内容),所以它也无济于事。
提前致谢!
xcode - xcode:在catiledlayer中绘制对象
我正在尝试将自己的对象绘制到 CATiledLayer,我只是不确定我应该如何将对象推送到 drawLayer 中使用的上下文。例如,我知道我可以通过在方法 drawLayer 中声明文本代码来添加我想在屏幕上绘制的文本,但是说我只想在获得用户输入时才绘制一些东西,然后我想创建这个新的文本对象并将其绘制到屏幕上,但我不确定如何在 drawLayer 方法之外执行此操作,因为我需要上下文。
ios - 如何在 MonoTouch 中移植很棒的 PhotoScrollerNetwork?
我正在尝试将 PhotoScrollerNetwork 应用程序移植到 MonoTouch(iOS 5 Apple PhotoScroller 示例的改进版本),但代码正在执行我无法在 MonoTouch 中重现的事情。
https://github.com/dhoerl/PhotoScrollerNetwork
例如,内存管理很难在 MonoTouch 中重现,没有它就会崩溃。作者(dhoerl)在自述文件中写道:
v2.0: - iPad1 和 iPhone3GS(只有 256M 内存)在没有操作系统警告的情况下被杀死。因此,创建了 cdisk 缓存使用上限,并在达到阈值时刷新文件(以释放内存)。崩溃消失了。
在 MonoTouch 中移植以下类非常复杂:
由于他的 GC,也许 MonoTouch 中还有另一种更简单的方法来处理上述内存管理技巧。有其他人尝试移植 PhotoScrollerNetwork 应用程序并想分享吗?
任何建议表示赞赏,谢谢。
objective-c - CATiledLayer 基础知识:为什么在渲染 PDF 时经常调用 CATiledLayer 的 drawLayer:inContext:?
我试图了解CATiledLayer
使用CGContextDrawPDFPage()
.
我的理解是,drawLayer:inContext:
每个图块和细节级别调用一次。那是对的吗?
在我的平铺层的代表中,我调用了CGContextDrawPDFPage().
但是我注意到(通过将日志放入 中drawLayer:inContext:
)drawLayer:inContext:
如果我使平铺层的平铺尺寸更小,则调用的频率更高。这让我想知道:
- 我的 PDF 页面是否被绘制/渲染了 x 次?
- 还是 CGContextDrawPDFPage() 神奇地知道要绘制页面的哪个部分?
- 渲染PDF页面时,CATiledLayer是不是很浪费资源?它的优势是什么?
objective-c - 如何使用 UIScrollView 和 CATiledLayer 在可缩放的 UIView 上绘制标记
我想在使用 UIScrollView 和 CATiledLayer 的可缩放 UIView 上绘制标记。我目前使用的设置与 Apple 的 PhotoScroller 演示应用程序相同。我绘制形状没有问题,但我希望它们即使在缩放后也能保持在同一个位置。我可以为此使用转换矩阵吗?或者我是否必须在缩放之后或缩放期间重新绘制形状?这似乎是一项昂贵的操作。
我不想缩放我正在绘制的形状。所以使用缩放转换是不可能的。
我很好奇 MapView 是如何实现这个功能的。有人知道吗?
iphone - CATiledLayer 到 CALayer
我有一个带有 CATiledLayer 支持的视图。我想从这个 CATiledLayer UIView 中获取可见图块并将其添加到另一个视图作为它的 CALayer 支持,从而在另一个不使用 CATiledLayer 的 UIView 中重新创建可见图像。
我想这样做的原因是我将使用第二个 UIView 来掩盖更新 CATiledLayer 支持的 UIView 的效果 - 这当前会在重新加载所有图块时产生闪烁。
问题是,我不完全确定我会如何做到这一点。有任何想法吗?
iphone - CATiledLayer 问题
我想像在 PhotoScroller 应用程序中一样使用 CATiledLayer。在我的 TilingView.m 我有
所以,当我使用视网膜显示器时,它总是进入
它在模拟器(视网膜显示器)上完美运行,但在设备上它会引发异常(图像!= nil,我已经检查过)
例外
先感谢您。
iphone - CATiledLayer 的背景图像
您可能知道,CATiledLayer
用于通过以适合视图大小的比例显示平铺图像来显示大图像。
我的CATiledLayer
工作类似于可以在 iOS 文档下找到的示例,我计算了drawRect:(CGRect)
rect 在哪一行和哪一列试图绘制其内容。
当视图第一次出现时,它开始在空白视图上逐块绘制,该视图/图层后面没有任何内容。我首先尝试放置低分辨率图像以填充图层,然后开始绘制平铺视图。
就像您在浏览 PDF 页面时一样,每个页面最初都以非常差的图像表示,但足以看到内容布局,当您停在某个页面时,该页面会变得更加清晰。
我知道我可以在 catiledlayer 之上添加子图层,但我无法在 catiledlayer 后面放置任何图层,因为这是一个 masterlayer。我也相信在同一层上加载背景图像很重要,这样可以适当地缩放。
有谁知道如何实现这一目标?