Tag: catiledlayer

对NSDictionary的SIGABRT objectAtIndex:无法识别的select器

我在这里有一个奇怪的错误。 我有一个名为__ImageData的数组: static NSArray *__ImageData = nil; NSString *path = [[NSBundle mainBundle] pathForResource:@"ImageData" ofType:@"plist"]; NSData *plistData = [NSData dataWithContentsOfFile:path]; NSString *error; NSPropertyListFormat format; _ImageData = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error]; 当我NSLog出arrays的内容,我得到这个输出: 2012-08-23 16:36:35.573 CAT[28814:c07] { "Item 0" = { height = 7121; name = Map1; width = 8556; }; "Item 1" = { height = […]

CALayer和视图消失

我有一个CATAILLAYERpipe理的大图像(如大图缩小iOS示例代码 )。 我有一个绘图视图(UIView覆盖绘图方法),但当我缩小了很多,我得到以下消息,我的看法消失.. -[<CALayer: 0xb253aa0> display]: Ignoring bogus layer size (25504.578125, 15940.361328) 有没有办法避免这种情况?

带有大型CATiledLayer的UIScrollView +渲染速度快的Overlay

我一直在努力工作几个星期(iOS),我似乎无法找出一个可以接受的解决scheme。 要求 显示一个10000×10000像素的背景图像 缩放和滚动响应 覆盖在具有自定义绘图的顶部 叠加中的元素是交互式的(点击和突出显示元素等),可以打开或closures棋子。 iOS 4.0 把它想象成一个虚构的小镇的地理地图,在上面绘制一个疯狂的道路,线路,区域和build筑系统。 CGPaths与各种不透明的填充,一些图标图像等混合物。这就像一个更复杂的谷歌地图应用程序的版本。 我试过了: 1 – 多个CATiled图层 查看层次结构: 滚动型 – > ContainerView – > TiledView(CATiledLayer 10000×10000) —> OverlayView(CATiledLayer 10000×10000) 结果:从魔法苹果caching中左右丢弃瓦片。 两个CATiledlayers似乎不是正确的道路。 更新重叠不是很快。 2 – 用于OverlayView的子类TiledView 查看层次结构: 滚动型 – > OverlayView(TiledView CATiledLayer 10000×10000的子类) 结果:渲染覆盖的更新时间过长。 慢点更新瓷砖 3 – 滚动视图w /一个容器视图 查看层次结构: 滚动型 – > ContainerView(10000×10000) – > OverlayView(CALayer 10000×10000) – […]

如何在放大CATiledLayer时绘制非转换的上下文?

我正在使用CATiledLayer来显示数据。 默认情况下,drawLayer函数获得转置和缩放的上下文,这允许绘图代码不知道缩放级别和正在请求的图块。 但是,我想使用缩放function来改变数据的水平范围,而不会发生实际的缩放。 到目前为止,我得到了这样的代码: (void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context { /* retrieve the transformation matrix from the context. */ CGAffineTransform contextTrans = CGContextGetCTM(context); /* Scale the context back, so all items will still have the same size */ CGContextScaleCTM(context, 1.0/contextTrans.a, 1.0/contextTrans.d); <.. loop through all datapoints ..> { /* Transpose the point-centers to the new zoomed context */ […]

在没有CATiledLayer的情况下在iOS上呈现和缩放大图像

我想介绍一下,并允许用户以与照片应用程序相同的方式放大iPhone和iPad上的大图像。 我意识到CATiledLayer是这个类的goto类,但它使用的审美不适用于我的应用程序。 它一个接一个地渲染拼贴,而Photos应用同时呈现整个屏幕(并且在缩放期间和之后显示像素化版本,直到应用可以追上)。 我当然可以在每次缩放后实现一个在后台渲染图像的视图。 但是,一旦源图像变大,这将使应用程序崩溃。 所以平铺是有吸引力的,我只是希望不更新屏幕,直到所有的瓷砖准备好(并在此期间显示较低分辨率的图像)。 有没有人试图实现这样的事情? 有任何想法吗?

在iOS上显示大图片,而不需要预先切片

我正在构build一个将图像数据保存到沙盒中的单个JPEG文件的相机应用程序。 图像的平均大小约为2MB。 问题:我无法在照片查看器中显示图像,因为在内存中有less量图像会引发内存警告,并且非常缓慢地滚动图像。 我不能将图像拆分成磁贴并将其保存到磁盘,因为这比显示单个图像更昂贵。 我试图在捕获时将图像分成多个图块,但在5S上平均花费5 1/2秒将所有图块保存到磁盘。 随着应用程序在旧设备上执行,它只会变得更糟。 这是非常糟糕的,因为如果用户在保存中间存在应用程序呢? 我将遗失瓷砖,并没有未经压缩的原始文件以后find遗失的瓷砖。 问题:在不引起内存问题的情况下显示全尺寸图像并保持滚动速度最快的最佳方式是什么? 在App Store上的相机应用程序吨这样做,照片应用程序这样做,必须有一个很好的解决scheme。 注意 :我目前正在显示图像的缩略图,然后在另一个线程中从磁盘加载完整大小的图像。 一旦完整大小的图片加载完成后,我会在主线上呈现全尺寸的图片。 这消除了内存问题,因为我一次只有一个全尺寸的图像在内存中,有两个缩略图,但仍然导致在scrollview滞后,因为在主线程中绘制全尺寸图像仍然非常昂贵。 我将不胜感激任何input!

iOS的CATiledLayer崩溃

我有一个iPad阅读器应用程序,我正在使用scrollview来显示每个页面。 我将页面保持在视图中,并且页面的任一侧都可以看到一页。 我有单独的肖像和风景的意见。 纵向视图显示单个页面,横向查看器显示2个页面。 当iPad改变方向时,我卸载旧方向的视图,并加载新方向的视图。 所以说这是在纵向视图,然后更改为横向应用程序卸载纵向视图,并加载横向视图。 这一切都很好,除非pdf很大。 pdf的使用tiledlayers绘制。 这个应用程序在大的pdf格式改变方向时会被刮掉。 如果在瓷砖全部被绘制之前改变方向,应用程序只会崩溃。 我的猜测是,它正在崩溃,因为它试图将瓷砖绘制到一个视图比已经被卸载。 那么当我卸载视图的时候有没有办法停止瓷砖的绘制?

任何方式来编码PNG比UIImagePNGRepresentation更快?

我正在为CATiledLayer生成一堆瓷砖。 大约需要11秒,在iPhone 4S上生成256个256个细节的120个贴图。 图像本身适合2048 x 2048。 我的瓶颈是UIImagePNGRepresentation 。 生成每个256 x 256图像大约需要0.10-0.15秒。 我已经尝试在不同的背景队列上生成多个贴图,但这只能将其缩减到大约9-10秒。 我也尝试使用这样的代码的ImageIO框架: – (void)writeCGImage:(CGImageRef)image toURL:(NSURL*)url andOptions:(CFDictionaryRef) options { CGImageDestinationRef myImageDest = CGImageDestinationCreateWithURL((__bridge CFURLRef)url, (__bridge CFStringRef)@"public.png", 1, nil); CGImageDestinationAddImage(myImageDest, image, options); CGImageDestinationFinalize(myImageDest); CFRelease(myImageDest); } 虽然这产生较小的PNG文件(胜利!),它需要约13秒,比以前多2秒。 有什么办法来更快地从CGImage编码PNG图像? 也许一个像libjpeg-turbo那样使用NEON ARM扩展(iPhone 3GS +)的库呢? 有没有比PNG更好的格式来节省不占用大量空间的瓷砖? 我已经能够提出的唯一可行的select是将拼贴大小增加到512 x 512.这将编码时间减less了一半。 不知道这将做我的滚动视图。 该应用程序是为iPad 2 +,只支持iOS 6(使用iPhone 4S作为基准)。

iPad视网膜模拟器中的CATiledLayer产生较差的性能

我希望也许这只是一个模拟器的问题,但当然,这让我担心,因为我已经提交了我的视网膜能力的应用程序,没有办法testing,直到16日。 我在我的应用程序中实现了一个CATiledLayer来查看非常大的地图。 地图的瓷砖来自互联网,但他们也被caching,所以,通常,他们实际上是直接从设备加载。 在iPad 1和iPad2上,它的作品非常漂亮。 即使是来自互联网,你也几乎看不到在iPad 2上显示的图块。 在iPad模拟器上,它运行的很好。 我的问题是iPad视网膜模拟器。 在视觉上,它看起来没问题。 地图大小合适,并与另一个图层排列起来,用于显示数据叠加层,但是它缓慢地加载INCREDIBLY。 大多数时候我尝试,它不会加载任何瓷砖,直到我开始滚动,然后当它正在加载瓷砖,它可能每秒1,看起来很可怕。 我没有在标准分辨率屏幕上的视网膜上运行不同的代码,所以我希望这只是模拟器的问题…但我仍然担心。 有没有其他人在自己的应用程序中看到这个?

iOS应用程序中没有CATiledLayer的巨大图像?

我有一个约7000×6000像素的图像。 我需要这个在我的应用程序中的scrollview / imageView,但是这是巨大的方式来显示。 它应该是一种地图。 我希望能够将应用程序的大小保持在最低限度,图像大小约为13mb。 在PNG是超过100MB,这是不能接受的。 许多人build议CATiledLayer作为一个选项,但我相信这将导致更大的文件大小。 无论如何,我试图用CATiledLayer ,并在TileCutter中创build我自己的瓷砖,(瓷砖以.jpg为单位),尺寸不是太差。 但是我到处都有错误。 CATiledLayer的iOS版本对我来说是一个谜,我找不到解决这个问题的方法。 我得到一个错误,说有关java的等价“索引超出数组的界限”,即使该数组有内容在该特定的索引..它有一个方法返回一个数组。 该数组包含.plist的数据。 在返回之前,我注销了数组的内容,给了我很好的数据。 电话正试图访问 [array objectAtIndex:0] 并把它放在一个字典,但抛出OutOfBounds。 注销整个数组时,我可以清楚地看到内容,但是在注销时 NSLog("%@",[method objectAtIndex]); I get the same exception. 无论如何, CATiledLayer给了我一些问题。 我一直在逆向工程的PhotoScroller项目没有运气。 任何人都有其他的解决scheme 谢谢。