How does Facebook photo zooming work when zooming high res image? - iphone

The Facebook iPhone app loads the low res images first and then it loads up the high res in the background and it gets better when the image loads. What is the process in doing something like this?

You'll want to use a CATiledLayer inside of a UIScrollView. Check out Advanced Scroll View Techniques from WWDC 2011. Slides can be found here.

Related

UIWebView Rotation

I am using a UIWebView in my app and when I rotate my iPhone the webview rotates along with it, works just fine. However, you see the corners of the background view behind my webview as it rotates and it can look a little flickery when rotating.
So I went and tried Safari on my iPhone, using the same website and it different. In Safari if I rotate, its far smoother, I can also see it zooms slightly.
For example, I am on Apple's homepage in portrait mode, fully zoomed out to see the whole page. I rotate to landscape and the contents zooms, as far as I can observe this is why it looks smoother.
So, my question, how can I achieve this in my app?
I have played with the 'Scales Page To Fit' option but had no success.
Currently:
Rotating scales the webpage to fit the view. (Whole page is zoomed out to be seen).
Required:
When rotating, rather than rescaling the page, just let it zoom as required.
Don't know if this will help you, but you might find it useful to change the background color (or even background image) of the view behind your webview, which might mitigate your issue with seeing the corners.
If you haven't found a solution yet... As an alternative you could try refreshing the webview, if you notice that the device has rotated, refresh webview and webkit should renderize it again, also play with the HTML meta viewport tag (initial zoom, scale, etc.) and CSS media queries to support different scales. As for the HTML document, try using em, and pt units in CSS rules.
//reload webview
[self.webView reload];
link Orientation Notifications
hope this help in something

iPad: How can I implement a scrolling timeline using a static image?

I'm diving into iOS development and I'm building a simple timeline app using a static timeline image that I already have. The timeline image won't fit on the screen. The width of the image is about five times the width of the iPad screen, so I have to allow the user to scroll the image horizontally. Here's a mockup...
For each item on the timeline, the user can tap it to receive a description at the bottom of the screen. My questions are...
I was planning to use a UIScrollView with a PageControl at the bottom. Can a UIScrollView hold a single view that holds the entire timeline image or do I have to break the the timeline image up into multiple views?
Are there any performance issues I need to consider when implementing this with a UIScrollView, using a static image?
Are there other approaches to implementing this scrollable timeline that I should consider other than using a UIScrollView?
Thanks so much in advance for your wisdom!
Yes, you'll need a UIScrollView. However, you could use a CATiledLayer to make it perform well. You would just need to pre-tile your static image. Try out the ShutterStock app in the app store (it's free). They have a really nicely done horizontal scrolling implementation that I believe uses a CATiledLayer (though I'm not completely sure).
I did a tutorial on using the CATiledLayer a while back. You can check it out here: http://www.cimgf.com/2011/03/01/subduing-catiledlayer/
If you are going to support iOS 6 and up only, you could look into using a UICollectionView which is very efficient. It works similarly to a UITableView with the cell re-use pattern, but allows you to have horizontal scrolling like you're looking for.

Implementing CATiledLayer on a UIWebView for fast scrolling

I have a big webview in my iPad app and scrolling performance seems to be a big issue, especially the first time you browse the webview. In mobile Safari, the scrolling is extremely smooth and the page simply appears as a transparent checkerboard pattern and loads in as it comes into view. From what I've read, the way to handle this is using CATiledLayer, but I have no idea how to implement this. Can anyone point me in the right direction? Thanks!
A UIWebView should already do its own tiling behind the scenes. There's no way to manually back a UIWebView with a CATiledLayer that I'm aware of, due to its complex rendering architecture.
If you create a UIWebView that is only the size of the display, the only reason I could think of for slower scrolling than Mobile Safari would be other overlaid views that need to be composited on the web view when scrolling.

UIScrollView as image viewer

I have to use UIScrollView as image viewer like Photo app. The UIScrollView is supposed to show photos with swiping, zooming and rotating with interface rotation.i have to load minimum 20 images.is it possible? which is the best way? plz post some sample codes.
I've written a simple and easy to use photo browser called MWPhotoBrowser which you should be able to look at and dissect.
It is an implementation of a photo viewer that I wrote allowing the user to view one or more images in a similar way to the native Photos app. It can display one or more images by providing either UIImage objects, file paths to images on the device, or URLs images online. Photos can also be zoomed, panned, and navigated with previous/next buttons.
View MWPhotoBrowser on GitHub
Hope this helps!
Refer to the sample application page control here https://developer.apple.com/iphone/library/samplecode/PageControl/ , it should help you get started, they have a scroll view that you can use to scroll through a bunch of pages, you can modify this to do pictures. It doesnt do zooming o rotationg but its a good place to start

UIWebView scrolls jerkily

I need to use a website with quite a bit of content in my App via UIWebView.
When I scroll the page in Mobile Safari everything scrolls smoothly. Even if I scroll fast - the grey squared background appears but is rendered properly after a few moments (less then 0.5 seconds).
The same page in UIWebView scrolls jerkily if scrolled fast and doesn't show the grey squared background.
I guess Mobile Safari shows the grey squared background first and renders after that while UIWebview stops the scrolling until the part which will be shown is rendered.
How to I tell UIWebView to behave like Mobile Safari?
It is already being drawn on it's own custom tiledLayer. The problem is that it is by default attempting to draw itself on the main thread so it locks up when I can't be drawn. There is a private message you can call
-(void)_setDrawInWebThread:(BOOL)arg1
That will work BUT you will see empty space when you scroll too fast and it can't keep up with the drawing until it has time to catch up. They use:
-(void)_setDrawsCheckededPattern:(BOOL)arg1
in mobile safari to help with this.
Found a better solution. CGTiledLayer.
http://developer.apple.com/mac/library/documentation/GraphicsImaging/Reference/CATiledLayer_class/Introduction/Introduction.html