I have an infinite scrollview in which I add images as the user scrolls. Those images have varying heights and I’ve been trying to come up with the best way of finding a clear space inside the current bounds of the view that would allow me to add the image view.
Is there anything built-in that would make my search more efficient?
The problem is I want the images to be sort of glued to one another with no blank space between them. Making the search through 320×480 pixels tends to be quite a CPU hog. Does anyone know an efficient method to do it?
Thanks!
It seems that you’re scrolling this thing vertically (you mentioned varying image heights).
There’s nothing built in to
UIScrollViewthat will do this for you. You’ll have to track yourUIImageViewsubviews manually. You could simply maintain the max y coordinate occupied by you images as you add them.You might consider using
UITableViewinstead, and implementing a very customizedtableView:heightForRowAtIndexPath:in your delegate. You would probably need to do something special with the actual cells as well, but it would seem to make your job a little easier.Also, for what it’s worth, you might find a way to avoid making your solution infinite. Be careful about your memory footprint! iOS will shut your app off if things get out of hand.
UPDATE
Ok, now I understand what you’re going for. I had imagined that you were presenting photographs or something rectangular like that. If I were trying to cover a scroll view with
UILeafs (wah wah) I would take a statistical approach. I would ‘paint’ leaves randomly along horizontal/vertical strips as the user scrolls. Perhaps that’s what you’re doing already? Whatever you’re doing I think it looks good.Now I guess that the reason you’re asking is to prevent the little random white spots that show through – is that right? If I may suggest a different solution: try to color the background of your scroll view to something earthy that looks good if it shows through here and there.
Also, it occurred to me that you could use a larger template image — something that already has a nice distribution of leaves — with transparency all along the outside outline of the leaves but nowhere else. Then you could tile these, but with overlap, so that the alpha just shows through to the leaves below. You could have a number of these images so that it doesn’t look obvious. This would take away all of the uncertainty and make your retiling very efficient.
Also, consider learning about CoreAnimation (CALayer in particular) and CoreGraphics/Quartz 2D ). Proper use of these libraries will probably yield great improvements in rendering speed.
UPDATE 2:
If your images are all 150px wide, then split your scrollview into columns and add/remove based on those (as discussed in chat).
Good luck!