CATiledLayer uses different set of tiles to handle different levels of zoom This example is exactly what we left from previous part of this tutorial. Based on some further logging I’ve added to the example project, I think the problem is this: The CATiledLayer has two render threads that. Let’s take a look at a CATiledLayer demo. I first ran across the CATiledLayer class when I was looking into a multithreaded, tiled.

Author: Shaktibei Zulkitaur
Country: Azerbaijan
Language: English (Spanish)
Genre: Environment
Published (Last): 7 July 2013
Pages: 369
PDF File Size: 14.88 Mb
ePub File Size: 9.56 Mb
ISBN: 175-5-28474-727-1
Downloads: 96462
Price: Free* [*Free Regsitration Required]
Uploader: Manris

Everything worked great in my tests and on my device. As always, if you have any questions or comments about this article or working with layers, join in on the discussion below!

Pholio Coder’s Guide: Tiling Large Images

The cached value is based on the previous “data source” just the tile color in exmaple examplerather that the updated data source. But what you might not know is that each view in iOS is backed by another class called a layer — a CALayer to be specific.

In other words, an x value of 1 means the point is at the right edge of the layer, and a y value of 1 means the point is at the bottom edge of the layer. This line is a little peculiar. Computing the tile index Rendering the tile Rendering the label Tile index computation is only presented as a placeholder; the index is used in the label and passed to some other functions, but never used for anything important. CALayer has more than just a few properties and methods to tinker with, as well as several subclasses that have unique properties and methods.

Consider the implications before setting either shouldRasterize or drawsAsynchronously. Pretty cool effect with just a few lines of code, eh? Together, they make it unready for production use. Next, draw the shape layer’s path.

As more data is required by the renderer, the layer’s draw cattiledlayer Layer Player includes controls to adjust all of the above-mentioned properties, and several more:. You use this filter when enlarging the image via contentsGravitywhich can be used to change both size resize, resize aspect, and resize aspect fill and position center, top, top-right, right, etc. Play around with the various controls – it’s a great way to get a feel of what you can catiedlayer with CALayer!


Example Example code that demonstrates this issue: CALayer has several properties that let you customize its appearance. A CATiledLayer must be configured to use a high-resolution catiledllayer store. Finally, to create a little visual interest in the absence of zooming recode viewDidLoad to look like this:.

CATiledLayer (Part 1) | Things that were not immediately obvious to me

Bear in mind, startPoint and endPoint are not explicit points. This seems to happen when the view is invalidated on the main threadwhile at the same time, the tile render threads are still working on examplee previous version of the tile. Particularly unusual is that the setNeedsDisplay message must be sent to the layer ; the same message passed to the content view has no effect.

You’ve already seen an example of using CALayerand setting a few of the properties. Post Your Answer Discard By clicking “Post Your Answer”, you acknowledge ctiledlayer you have read our updated terms of serviceprivacy policy and cookie policyand that your continued use of the website is subject to these eaxmple. Okay — that was a lot of ground to cover. Sign up or log in Sign up using Google. You have to provide the tiles and logic to tell the tiled layer which tiles to grab as the user scrolls around, but the performance gain here is remarkable.

Stack Overflow works best with JavaScript enabled. Layer Player includes switches to toggle the opacity of each sublayer, and the TrackBall utility from Bill Dudney, ported to Swiftwhich makes it easy to apply 3D transforms based on user gestures:. I think there’s a bug where the scale is incorrectly set in the sample code. Layer Player demonstrates a CAScrollLayer that houses an image view with an image that’s larger than the scrolling view’s bounds. As you might assume, setting rate to a negative number instructs playback to commence at that number times regular speed in reverse.


This article shares some tips I learned writing Pholio on managing large images. When you run the above code and pan the view, this would be the result:.

CATiledLayer – Core Animation | Apple Developer Documentation

With a block of code like this, it’s possible to manipulate the font, font size, color, alignment, wrapping and truncation, as well as animate the changes:. Then a TilingViewForImagesized to the original image’s dimensions can be added to a scroll view. You don’t need to actually code anything for the rest of this article, so just sit back, read, and relax: With those tiles in place, a custom UIView subclass can be created to draw those tile layers:.

CGSize The maximum size of each tile used to create the layer’s content. CGRect call a setNeedsDisplay is called, the current execution of the draw call is finished and the result is cached.

I think the result is pretty nice, though: At its core, I use code from the great tutorial at Cocoa is my Girlfriend. First create properties for the side length, colors for each side of the cube, and a transform layer.

In the above code, you create a gradient layer, match its frame to the bounds of someViewassign an array of colors, set start and end points, and add the gradient layer to the view hierarchy. Home About this Blog.

CATiledLayer (Part 1)

The layer’s contentsScale property defines the relationship between view space points and backing store pixels. This blurriness is the result of levels of detail maintained by the layer. Since I can’t fix that, does anyone know of a good workaround for this issue?

A layer that creates a specified number of sublayer copies with varying geometric, temporal, and color transformations. This will enable your app to run on iOS 3. This code behaves a little strangely on my device iPhone 3G running iOS 3.